在我创建的典型组织应用程序中,存在实体User
,Projects
,Company
,Contacts
。对于下面定义的用户类,我想我会遇到循环依赖。 我应该如何修改下面的课程以解决问题。
用户名
公司
项目List<Projects>
项目名
资源List<Resource>
项目负责人User
RESOURCEID
专案编号
ReportingHead User
你一定已经找到了这个漏洞但是,正如你所看到的ReportingHead
,ProjectLead已经是用户类,这使得它可以查询有关它们的项目的信息,这将导致另一个周期检索项目的用户。
即使资源与项目相关联,我也必须添加一个属性projectId(首先它是类型项目),因为我有一个IResourceRepository
为项目创建资源,该项目将返回{{1 }}。如何设计课程以使其有意义?
答案 0 :(得分:1)
您可以花一些时间阅读聚合和聚合根。
将您的某个实体确定为root,然后尝试查看它是否适合您的方案。我举个例子。如果不知道你的场景,这很难,所以把它看作一个例子:
我选择Companyas聚合根。
Company
Name:string
Projects:IList<Project>
Project
ProjectName:string
Resources:IList<Resource>
Projecthead:Employee
Resource
Employee:Employee
(ResourceType probably)
Employee
Name
(Ids被遗漏但如果你想要DB Persist,可能会在某个基类中)
现在,您必须确保只通过根公司访问此Aggregate-root。 这是关于隔离的,你不能再使用像user.GetAllMyProjects()这样的方法感觉很奇怪,但这会让你以后更容易。 相反,您可以创建一个类似project.HasGivenUserAccess(用户用户)的方法。这可能足够了,但这取决于你的情况。
您可以随意使用某种您认为无法处理的方案攻击此设计,我会编辑我的帖子。