【发布时间】:2012-01-24 09:55:54
【问题描述】:
在我创建的典型组织应用程序中,存在 User,Projects,Company,Contacts 实体。对于下面定义的用户类,我想我会遇到循环依赖。 我应该如何修改下面的类来解决问题。
用户
-
用户名
-
公司
-
项目
List<Projects>
项目
-
项目名称
-
资源
List<Resource> -
项目负责人
User
资源
-
资源ID
-
项目编号
-
报告负责人
User
你一定已经发现了这个缺陷,但是,正如你所看到的ReportingHead,ProjectLead 已经是 User 类,这使得它可以为他们查询有关项目的信息,这将导致另一个循环来检索项目的用户。
即使资源与项目相关联,我也必须添加一个属性 projectId(首先它是项目类型),因为我有一个 IResourceRepository 来为将返回 Resource 实例的项目创建资源。现在应该如何设计该类以使其有意义?
【问题讨论】:
-
问题出在哪里?我什么都没看到!你可以有两种方式的依赖。
-
@DanielHilgarth 浏览了这个案例。我查询用户 daniel 我会得到他的项目列表,每个项目都会有项目负责人、资源(这反过来有报告负责人)。 ProjectHead、ReportingHead 是 User 类,因此,为了填写他们的详细信息,我将不得不查询 Projects,这些 Projects 又将落在第 1 点。
-
正如我所说,这不是问题......试试吧。但是,我想知道您是否在像 NHibernate 这样的 ORM 上下文中提出这个问题,因为您正在谈论“查询”的东西。
-
我同意丹尼尔的观点,这可能会奏效。但是imo你应该尽量不要有双向关系,只要它是合理的可能。它以多种方式为您提供更简洁的代码。
-
@Daniel Hilgarth:如果 OP 递归地填充整个数据结构,他可能会陷入无限循环(和堆栈溢出)。缓存层应该防止这种情况发生吗?
标签: c# oop design-patterns code-organization