循环依赖最佳实践

2024-01-23

我目前正在编写一个网络爬虫,它从互联网上检索信息。简化后看起来像这样。

数据访问项目

  • 检索原始数据的对象
  • 将原始数据解析为对象的对象(!!)
  • 解析器返回的实体。

现在,我正在创建实际的解析器,我将像这样使用它:

using Application.DataAccess;
using Application.DataAccess.Entities;

namespace Application{
 public class TestScraper{
  public static ScrapeIt()
  {
   var source = DataAcces.Retriever.Retrieve("http://example.com");
   DataAccess.Entities.Entity entity = DataAccess.Parser.Parse(source);

   //Do stuf with source here.
  }
 }
}

正如您所看到的,解析器返回一个实体。然而,这是在 DataAccess 命名空间中,但是,它没有任何意义......它是一个圆圈,我真的不知道如何解决这个问题。好吧,我可以想出一些办法,比如在这些层之间创建另一个层。

但我只是想知道,你会如何解决这个问题。对此什么是好的(或最佳实践)。


您可以通过将两个类引用的内容分解到一个新类中,然后旧类都引用新类来修复循环引用。

因此,在您的情况下,您可以将实体移出 DataAccess 并移入可能由 DataAccess 和应用程序使用的新实体命名空间。

通过这样做,你可以开始

A <--> D

并最终得到

A --> E
D --> E
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

循环依赖最佳实践 的相关文章

  • 属性对象什么时候创建?

    由于属性实际上只是附加到程序集的元数据 这是否意味着属性对象仅根据请求创建 例如当您调用 GetCustomAttributes 时 或者它们是在创建对象时创建的 或者 前两个的组合 在由于 CLR 的属性扫描而创建对象时创建 从 CLR
  • 在 Xamarin Android 中将图像从 URL 异步加载到 ImageView 中

    我有一个包含多个项目的 ListView 列表中的每个项目都应该有一个与之关联的图像 我创建了一个数组适配器来保存每个列表项并具有我希望加载的图像的 url 我正在尝试使用 Web 请求异步加载图像 并设置图像并在加载后在视图中更新它 但视
  • fgets() 和 Ctrl+D,三次才能结束?

    I don t understand why I need press Ctrl D for three times to send the EOF In addition if I press Enter then it only too
  • Cygwin 下使用 CMake 编译库

    我一直在尝试使用 CMake 来编译 TinyXML 作为一种迷你项目 尝试学习 CMake 作为补充 我试图将其编译成动态库并自行安装 以便它可以工作 到目前为止 我已经设法编译和安装它 但它编译成 dll 和 dll a 让它工作的唯一
  • C# 中值类型和引用类型有什么区别? [复制]

    这个问题在这里已经有答案了 我知道一些差异 值类型存储在堆栈上 而引用类型存储在托管堆上 值类型变量直接包含它们的值 而引用变量仅包含对托管堆上创建的对象位置的引用 我错过了任何其他区别吗 如果是的话 它们是什么 请阅读 堆栈是一个实现细节
  • c# Asp.NET MVC 使用FileStreamResult下载excel文件

    我需要构建一个方法 它将接收模型 从中构建excel 构建和接收部分完成没有问题 然后使用内存流导出 让用户下载它 不将其保存在服务器上 我是 ASP NET 和 MVC 的新手 所以我找到了指南并将其构建为教程项目 public File
  • 使用向量的 merge_sort 在少于 9 个输入的情况下效果很好

    不知何故 我使用向量实现了合并排序 问题是 它可以在少于 9 个输入的情况下正常工作 但在有 9 个或更多输入的情况下 它会执行一些我不明白的操作 如下所示 Input 5 4 3 2 1 6 5 4 3 2 1 9 8 7 6 5 4 3
  • 使用安全函数在 C 中将字符串添加到字符串

    我想将文件名复制到字符串并附加 cpt 但我无法使用安全函数 strcat s 来做到这一点 错误 字符串不是空终止的 我确实设置了 0 如何使用安全函数修复此问题 size strlen locatie size nieuw char m
  • 线程、进程和 Application.Exit()

    我的应用程序由主消息循环 GUI 和线程 Task Factory 组成 在线程中我调用一些第三方应用程序var p new Process 但是当我调用Application Exit 在消息循环中 我可以看到在线程中启动的进程仍在内存中
  • 初始化变量的不同方式

    在 C 中初始化变量有多种方法 int z 3 与 int 相同z 3 Is int z z 3 same as int z z 3 您可以使用 int z z 3 Or just int z 3 Or int z 3 Or int z i
  • Windows 10 中 Qt 桌面应用程序的缩放不当

    我正在为 Windows 10 编写一个简单的 Qt Widgets Gui 应用程序 我使用的是 Qt 5 6 0 beta 版本 我遇到的问题是它根本无法缩放到我的 Surfacebook 的屏幕上 这有点难以判断 因为 SO 缩放了图
  • 用 C 实现 Unix shell:检查文件是否可执行

    我正在努力用 C 语言实现 Unix shell 目前正在处理相对路径的问题 特别是在输入命令时 现在 我每次都必须输入可执行文件的完整路径 而我宁愿简单地输入 ls 或 cat 我已经设法获取 PATH 环境变量 我的想法是在 字符处拆分
  • AccessViolationException 未处理

    我正在尝试使用史蒂夫 桑德森的博客文章 http blog stevensanderson com 2010 01 28 editing a variable length list aspnet mvc 2 style 为了在我的 ASP
  • 检查 url 是否指向文件或页面

    我们需要以下内容 如果文件确实是文件 则从 URL 下载该文件 否则 如果它是一个页面 则什么也不做 举个简单的例子 我有以下命令来下载文件 My Computer Network DownloadFile http www wired c
  • 已过时 - OpenCV 的错误模式

    我正在使用 OpenCV 1 进行一些图像处理 并且对 cvSetErrMode 函数 它是 CxCore 的一部分 感到困惑 OpenCV 具有三种错误模式 叶 调用错误处理程序后 程序终止 Parent 程序没有终止 但错误处理程序被调
  • 如何在内存中存储分子?

    我想将分子存储在内存中 这些可以是简单的分子 Methane CH4 C H bond length 108 7 pm H H angle 109 degrees But also more complex molecules like p
  • ListDictionary 类是否有通用替代方案?

    我正在查看一些示例代码 其中他们使用了ListDictionary对象来存储少量数据 大约 5 10 个对象左右 但这个数字可能会随着时间的推移而改变 我使用此类的唯一问题是 与我所做的其他所有事情不同 它不是通用的 这意味着 如果我在这里
  • 如何使用 ReactiveList 以便在添加新项目时更新 UI

    我正在创建一个带有列表的 Xamarin Forms 应用程序 itemSource 是一个reactiveList 但是 向列表添加新项目不会更新 UI 这样做的正确方法是什么 列表定义 listView new ListView var
  • 更改显示的 DPI 缩放大小使 Qt 应用程序的字体大小渲染得更大

    我使用 Qt 创建了一些 GUI 应用程序 我的 GUI 应用程序包含按钮和单选按钮等控件 当我运行应用程序时 按钮内的按钮和字体看起来正常 当我将显示器的 DPI 缩放大小从 100 更改为 150 或 200 时 无论分辨率如何 控件的
  • 为什么 strtok 会导致分段错误?

    为什么下面的代码给出了Seg 最后一行有问题吗 char m ReadName printf nRead String s n m Writes OK char token token strtok m 如前所述 读取字符串打印没有问题 但

随机推荐

  • ' aria-label='无法使用以下类型的值设置 MODEL_NAME SpatialProxy (POLYGON):'> 无法使用以下类型的值设置 MODEL_NAME SpatialProxy (POLYGON):

    当我尝试对我的模型的 url 进行 API 调用时 我面临以下问题 Cannot set Allotment SpatialProxy POLYGON with value of type
  • Objective-C 中 NSArray 的子类

    我需要一个类 它具有 NSArray 的所有方法 其行为方式相同 但修改了 2 个方法 我想在我的自定义类中重写这两个方法 1 countByEnumerateWithState 对象 计数 2 对象索引 经过几个小时的研究 我没有找到任何
  • Simple_form:删除带标签的内联复选框的外部标签

    使用 Simple form 2 0 2 使用 HAML 的简单表单代码 f input remember me as boolean inline label Remember me 但它呈现出这样的效果 div class contro
  • ++、last 和 init 比 :、head 和 tail 更快?

    给出这两种编写函数来查找特定数字之前的所有素数的方法 primes1 iterate ps gt ps x x lt last ps 1 all p gt x mod p 0 ps 0 2 primesTo1 Integer gt Inte
  • 为在线商店生成订单号的最佳方法?

    我的在线商店中的每个订单都有一个面向用户的订单号 我想知道生成它们的最佳方法 标准包括 Short 通过电话很容易说出来 例如 m 和 n 是不明确的 Unique 校验和 矫枉过正 有用吗 Edit 不会透露订单总数 客户可能会因为下第三
  • 如何在 xcode 上禁用静态库的链接器警告?

    在我当前的 Swift 项目中 我有一个第 3 方静态库 是通过 构建阶段 gt 链接二进制文件与库 部分添加的 更新到 xcode 8 3 后 该库开始抛出一些链接器警告 例如 指针未在 libraryFile a 的地址 0x00000
  • 在 JavaScript 中从对象创建 DOM 元素

    嗨 我试图了解如何制作 Dom elemnt 比如说 div 形成我的数据对象 我做了一个这样的对象 var div style width Math floor Math random 100 height Math floor Math
  • 使用 Fluent NHibernate 和 guid id

    我们正在使用 Fluent NHibernate 1 2 我们的主键是保存在nvarchar 32 专栏 使用 Oracle 11gr2 我们怎样才能做到这一点 进行自动转换 谢谢 随机程序员 更新 忘了提及 保存的 guid 没有破折号
  • 启动 Facebook 转换像素

    我对 Javascript 还很陌生 但我想知道在不实际加载 确认 谢谢 页面的情况下触发 Facebook 转换像素 如下 的最佳方法是什么
  • Android 本地服务器套接字

    在android中 有两个类LocalServerSocket和LocalSocket 我认为它们类似于unix套接字中的AF LOCAL 我不确定它是否正确 我的问题是 是否可以在Java中创建LocalServerSocket并使用普通
  • Unity 在使用 Firebase 数据库进行异步编程时崩溃

    当我尝试这样做时它崩溃了 我想要异步获取用户数据 如果我不使用异步任务 它会返回 null public class Database MonoBehaviour private DatabaseReference m database p
  • Vue.js 中的计算属性未使用 navigator.onLine 更新

    我想使用 Vue js 计算属性来查看我的应用程序的在线状态 基本上 我有以下 Vue 设置 new Vue el app computed onLine function return navigator onLine 以及以下标记 di
  • 安装后如何更改应用程序的图标和标签?

    我正在尝试在安装应用程序后更改其图标和标签 在清单中 我放置了以下代码
  • UTF-8 的多字节安全 wordwrap() 函数

    PHP s wordwrap https www php net wordwrap对于 UTF 8 等多字节字符串 该函数无法正常工作 评论中有一些mb安全函数的例子 但是根据一些不同的测试数据 它们似乎都存在一些问题 该函数应采用与以下完
  • Ionic Android 构建停止工作

    更新 Ionic 和 Cordova CLI 后 我的 Ionic Cordova 应用程序突然停止在 Android 上构建 过去两天我在谷歌上搜索解决方案 但找不到任何有帮助的东西 我假设这与 Cordova 现在使用 Gradle 来
  • 根据字段的值使用不同的 Pydantic 模型

    我有 2 个 Pydantic 模型 var1 and var2 输入的PostExample方法可以接收第一个模型或第二个模型的数据 指某东西的用途Union有助于解决这个问题 但在验证过程中 它会引发第一个和第二个模型的错误 如何做到在
  • 计算减法后剩余多边形的算法

    我有一个大多边形 Pa 多边形内部有很多小 洞 如图 以下是开孔的几个条件 孔不能互相重叠 孔不能超出外多边形 然而 这些洞can触摸多边形的外边 如何高效地获取剩余的多边形 或多边形列表 最简单的方法 蛮力方法 是采取Pa 并通过减去孔逐
  • json.Unmarshal 不返回解码数据[重复]

    这个问题在这里已经有答案了 我在解组从 a 读取的 json 数据时遇到问题 json file type redisConfig struct host string password string func loadRedisConfi
  • 我可以为主键设置ignore_dup_key吗?

    我的表上有一个两列主键 我试图改变它来设置ignore dup key继续使用此命令 ALTER INDEX PK mypk on MyTable SET IGNORE DUP KEY ON 但我收到这个错误 Cannot use inde
  • 循环依赖最佳实践

    我目前正在编写一个网络爬虫 它从互联网上检索信息 简化后看起来像这样 数据访问项目 检索原始数据的对象 将原始数据解析为对象的对象 解析器返回的实体 现在 我正在创建实际的解析器 我将像这样使用它 using Application Dat