首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DDD基础设施与模型层/项目之间的循环依赖关系

DDD基础设施与模型层/项目之间的循环依赖关系
EN

Stack Overflow用户
提问于 2013-09-15 13:36:16
回答 1查看 1.9K关注 0票数 0

我正在学习一本关于C#.NEt领域驱动模型的书。我在基础设施和域层之间具有循环依赖关系(这两者都是我的解决方案的类库项目,即"ShareManagement")。我想知道如何解决Visual /C#.NET中的循环依赖问题。

  1. 模型对基础设施层的依赖性:领域层使用基础设施层,使得基础设施层中的模型层中的对象依赖(调用)对象(就像基础结构层中定义的存储库一样,使用实现基础结构层定义的ICompanyRepository从域模型层访问存储库)。

  1. 基础设施对领域模型类的依赖:然而,在基础结构层,我的实体框架(实体工厂)需要实现IEntityFactory<T>,其中TEntityBase (域模型层中的一个实体类,派生自第一层的EntityBase;EntityBase是所有实体的基类)。

以下是基础设施层中的类(在“存储库”文件夹下):

代码语言:javascript
复制
using System.Text;
using System.Data;
using ShareManagement.Model.Company; // How to do this ??
ShareManagement.Infrastructure.EntityFactoryFramework;

namespace ShareManagement.Infrastructure.Repositories
{
    internal class CompanyFactory: IEntityFactory<Company> 
//Company is defined in Model Layer and derived from Abstract Base class "EntityBase"
//So, how to use "using ShareManagement.Model.Company" ?
    {

    }
}
EN

回答 1

Stack Overflow用户

发布于 2013-09-19 07:28:19

下面链接中显示的图像有两个程序集/项目(包含在两个主要边界中),分别命名为基础结构层项目/组装和模型层Prject/Assembly。

从图中可以明显看出,它们都形成了循环依赖关系。http://screencast.com/t/lUGwetETXHF

这个问题的解决方案在下面的链接中描述:http://screencast.com/t/acsLjq7Ubd

如果一个项目/程序集A(本例中的模型)依赖于(引用)一个项目/程序集B(本例中的基础设施),并且如果-“程序集B(类似,Infrastructure.Repositories或EntityFactory)”依赖于(;需要引用)项目/组装A(模型)中形成循环依赖关系的类,那么就按照以下方式解决该依赖关系:

为了理解,让我们将装配B中依赖的“代码部分”命名为B-dep1 1;

  1. 使B-部门1与B ShareManagement.Infrastructure.Repositories分离为一个单独的程序集/项目。
  2. B-dep1 1的新项目名称应该与项目B中的层名称相同,这样在汇编/项目B中,be 1仍然是层/名称空间的一部分(我的意思是它仍然是ShareManagement.Infrastructure命名空间的一部分)。(在我们的例子中,我将B-De1的这个新项目命名为ShareManagement.Infrastructure.Repositories。
  3. 现在,B部门1的新项目(即"ShareManagement.Infrastructure.Repositories“)可以引用A,而无需形成循环依赖关系。

见如何:

B-部门1的新项目,即"ShareManagement.Infrastructure.Repositories“依赖于B,但B不依赖于(引用)新的部分项目。

A依赖于B,但B不依赖于B-De1的新项目,即" ShareManagement.Infrastructure.Repositories“,而ShareManagement.Infrastructure.Repositories项目仍然可以继续使用基础结构层的命名空间(和封装代码),而不必添加对基础结构代码的引用,因为它们具有相同的名称空间(这就是为什么我将项目命名为B项目中的命名空间)。Visual根据项目名称或文件夹名自动创建命名空间。在不同类别的名称空间中,相同的名称空间释放程序集相互引用,就像在本例中,名称空间与Infrascture层相关。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18813012

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档