最精简领域驱动设计开发模版(针对WPF)

一:领域驱动中的分层

领域驱动设计将软件系统分为四层:基础结构层、领域层、应用层和表现层。

clip_image001

· 基础结构层:该层专为其它各层提供技术框架支持。注意,这部分内容不会涉及任何业务知识。众所周知的数据访问的内容,也被放在了该层当中,因为数据的读写是业务无关的。

· 领域层:包含了业务所涉及的领域对象(实体、值对象)、领域服务以及它们之间的关系。这部分内容的具体表现形式就是领域模型(Domain Model)。领域驱动设计提倡富领域模型,即尽量将业务逻辑归属到领域对象上,实在无法归属的部分则以领域服务的形式进行定义。

· 应用层:该层不包含任何领域逻辑,但它会对任务进行协调,并可以维护应用程序的状态,因此,它更注重流程性的东西。

· 表现层:这个好理解,跟三层里的表现层意思差不多,但请注意,“Web服务”虽然是服务,但它是表现层的东西

从上图还可以看到,表现层与应用层之间是通过数据传输对象(DTO)进行交互的,数据传输对象是没有行为的POCO对象,它的目的只是为了对领域对象进行数据封装,实现层与层之间的数据传递。为何不能直接将领域对象用于数据传递?因为领域对象更注重领域,而DTO更注重数据。不仅如此,由于“富领域模型”的特点,这样做会直接将领域对象的行为暴露给表现层。

(在本例中,为了简便期间,用了领域模型,而不是DTO,DTO可以放在基础结构层)

二:实例分层

image

可以看到:

基础结构层:SmartCA.Infrastructure,包括了一些最简单的声明和实现,如实体对象工厂接口、数据接口、工作单元接口及实现、数据对象的基类;SmartCA.Infrastructure.Repositories,数据访问及实体对象工厂,如果我们换一个数据库,则可以增加第二个Repositories项目;

领域层:领域模型和领域服务在这里;

应用层:在本例子中,应用层只用来存储应用程序的某些状态,不涉及到任何领域领域逻辑;

表现层:无任何特殊;

三:核心类图

image

该图定义了本实例中的主要类的关系。

需要注意的是,参考资料中是作者实现了一个注入模块的编写,本实例重写了本部分,使用了UNITY来实现注入。

代码下载:SmartCA.rar

参考资料:《领域驱动设计C# 2008实现》

posted @ 2011-12-16 15:57  陆敏技  阅读(2726)  评论(2编辑  收藏  举报
Web Counter
Coupon for Contacts