逻辑分层演示


概述:   架构是高层的设计,如果设计和理解有误,必将在实现时带来各种问题。架构又是最稳定的,不会因为各种具体技术的依赖,如各种UI框架、ORM框架、IoC框架的更新换代而受到影响。上文的总结没有任何Demo是因为架构更偏向于设计层面,有从设计视图创建解决方案经验的人,一看就知道我在说什么。本文将展示从架构设计视图到.NET多项目解决方案的过程。主要包含以下内容: (1)演示DDD分层架构到.NET多项目解决方案的映射。 (2)演示DDD分层依赖到.NET项目引用的映射。 (3)演示依赖注入在.NET多项目解决方案中的使用。    

一、原始的DDD分层

 

1.架构图

2.搭建解决方案

新建空白解决方案,添加如下项目: (1)DDD.Domain类库项目。 (2)DDD.Application类库项目。 (3)DDD.Infrastructure类库项目。 (4)DDD.UI.MVC ASP.NET 空项目,选中MVC引用。 (5)DDD.Repository类库项目。

3.设置项目间的引用关系:

(1)DDD.UI.MVC添加DDD.Application、DDD.Domain、DDD.Infrastructure和DDD.Repository的引用。 (2)向DDD.Application添加DDD.Domain、DDD.Infrastructure引用。 (3)向DDD.Domain添加DDD.Infrastructure引用。 (4)向Repository项目添加DDD.Domain和DDD.Infrastructure引用。  

4.使用依赖注入:

为了更彻底的解耦,我们即使对依赖注入的实现也应用依赖倒置原则,我们不依赖任何具体的IoC框架及其种类和版本。在基础设施层中使用2种不同的IoC框架实现了该接口,并且在使用时展示了通过直接注入和通过反射两种方式。通过反射可以将IoC的实现依赖使用配置文件管理。 (1)IoC抽象接口

5.代码图和解决方案视图:

代码图赤裸裸的告诉我们三个字“不和谐”: (1)看起来更像以基础设施层为核心。 (2)Repository无法置于基础设施层,即使你将它的命名空间改为DDD.Infrastructure.Repository也没有用。 (3)领域层对外有依赖。 (4)看了架构图谁能跟这代码图对应上?

2.搭建解决方案

新建空白解决方案,添加如下项目: (1)DDD.Domain类库项目。 (2)DDD.Application类库项目。 (3)DDD.Infrastructure类库项目。 (4)DDD.UI.MVC ASP.NET 空项目,选中MVC引用。

3.设置项目间的引用关系:

  (1)DDD.UI.MVC添加DDD.Application、DDD.Domain和DDD.Infrastructure的引用。 (2)向DDD.Application添加DDD.Domain、DDD.Infrastructure引用。 (3)向DDD.Infrastructure添加DDD.Domain引用。    

4.改善:

(1)IEntity和IRepository接口定义在领域层,领域层不再依赖基础设施层。 (2)Repository真正在基础设施层实现。  

5.代码图和解决方案视图:

看起来很不错: (1)和架构图完美对应。 (2)领域层为中心。 (3)再也不用为基础设施层无法引用领域层而在服务层添加不必要的代码了。
DDD