.NET应用架构设计—面向查询的领域驱动设计实践(调整传统三层架构,外加维护型的业务开关)

简介:

阅读目录:

  • 1.背景介绍

  • 2.在业务层中加入核心领域模型(引入DomainModel,让逻辑、数据有家可归,变成一个完整的业务对象)

  • 3.统一协调层Application Layer(加入协调层来转换DomianModel)

  • 4.从数据扁平结构转换成OO体系结构(使用OO丰富代码结构)

  • 5.DomainModel中的内容(带开关的Specification、SOA化的Specification)

  • 6.模式、重构、单元测试在领域模型中的运用

1.背景介绍

由于时间关系废话不多扯了,直奔主题,对领域驱动设计不是太了解的朋友请先熟悉相关主题或参考本人以下两篇文章:

.NET领域驱动设计—初尝(疑问、模式、原则、工具、过程、框架、实践),这篇文章对领域驱动设计的基本精神详细分析;

.NET领域驱动设计—实践(穿过迷雾走向光明),这篇文章对领域驱动设计的一个基本实践,记录下了实践过程、建模的技巧等内容;

DomainModel是由很多细粒度的Object组成,按照以往的教训(将Object行为、数据肢解,得到一个残缺的Object),现在我们将逻辑行为和数据绑定在一起,形成了一个丰富的领域模型,这也是面向对象设计原则之一;想了解更多关于实现面向对象的技巧请参考【《实现模式》作者:Kent Beck】一书;

但是这样又带来了由于充血型DDD模型会给面向大规模查询的业务模块带来一定的性能开销,试想一个OrderManager对象,如果我们需要获取在某个条件范围类的所有Order会给OrderManager带来很多性能、逻辑上的复杂度;根据DDD.CQRS架构,得知将DomainModel中的查询逻辑单独剥离出去,让Command端很干净的处理聚合的写逻辑,在Query端也很直接的处理查询逻辑;

这样设计之后会有一个很尴尬的情况,在Query端的DomainModel不被关注了,因为Query的逻辑有简单有复杂,大型站点会有很多复杂的查询逻辑还会有很多的业务开关,做过维护的朋友应该知道新功能上线需要有switch的控制,这是为了安全起见吧;但是简单的业务逻辑就会被我们下意识的认为不需要使用完整的DomainModel结构,还是使用传统的分层架构上层依赖下层,Business Layer直接依赖DataAccess Layer,其实这个时候Business Object已经不在是遵循“单一职责”原则了,这样时间一长又慢慢的回到了以前肢解Object的困境;

这篇文章是讲解如何在Query端实践DDD,如何运用DDD的强项来解决复杂业务逻辑的实现,尤其是复杂的业务逻辑需要开关控制的时候其实更需要DomainModel来完成;

2.在业务层中加入核心领域模型(引入DomainModel,让逻辑、数据有家可归,变成一个完整的业务对象)

由于我们缺乏领域模型,所以导致我们的业务逻辑、规则随波逐流,无家可归,时间久了就搞不清到底这块业务逻辑是哪里的;我们现有的Domain Model是一个数据映射对象用来传递数据用的,严格意义是一个DTO对象,大部分的项目都将DTO命名为DomainModel但是其实里面没有任何的行为、方法,只是一个纯粹的数据传输用的容器,所以称不上DomainModel;

所以我们首先要做的就是加入DomainModel,然后逐渐将逻辑搬移到DomainModel中来,在进行逐步的重构、单元测试,让其成为一个可以测试的具有一定核心价值的可重用的DomainModel;

3.统一协调层Application Layer(加入协调层来转换DomainModel)

我们的Service没有Application Layer  也称协调层,专门用来组装业务处理环节的统一调度中心,它并非只是一个简单的静态类;传统三层中没有应用层的概念或者说应用层的概念没扭曲了,或者并没有发挥其的核心作用;我们需要加入应用层来协调DomainModel的工作;

4.从数据扁平结构转换成OO体系结构(使用OO丰富代码结构)

当我们使用DTO对象成功将数据从数据源获取之后,就需要一个对象化的过程,将扁平化的数据实体转换成丰满的领域模型,这个时候所有的领域规则将起作用;

5.DomainModel中的内容(带开关的Specification、SOA化的Specification)

1.实体:

简单理解为OO对象,可以独立存在也可以聚合在某个领域实体下,如果聚合在某个实体下那么只能通过父级实体进行一系列的访问;

2.工厂:

对实体进行有相关约定的创建,这其中包括各种验证、约束、开关等等前提条件。注意:创建实体不像创建数据DTO那么简单;

3.规约、规约工厂:

对业务规则进行对象化,将原本淹没在杂乱无章代码中的核心业务规则提取出来统一管理;这可以很好的像规则配置化(专业称:规则外挂);注意:这可以和我们的业务开关进行合并;最值得惊喜的是可以通过规约工厂来实现面向SOA的规约;

4.领域事件(扩展):

监控、观察等等非侵入式的获取实体在业务处理当中的状态数据,如:发送一封邮件、记录一条LOG,但是这种代码严禁写入业务逻辑层包括分层架构中的任何一个层面,它必须是在一个无关紧要的宿主中进行,类似管道模型的Module;

5.面向特定业务开关:

由于我们每次添加或修改业务逻辑都会加入相应的开关控制,如果这个开关是和业务逻辑相关的那么就可以很巧妙的和规约合并设计;

6.模式、重构、单元测试在领域模型中的运用

设计模式的运用:通过运用DDD就可以方便的对Domain Model进行设计模式的强粒度运用;

重构的运用:对领域模型进行重构就不需要考虑业务逻辑会影响到其他层面;

单元测试的运用:可以独立对领域模型进行测试,包括细粒度的接口抽取都会很方便;

总结:由于时间关系文中都是精简的介绍,具体的理解可以参考我上传的代码示例:http://files.cnblogs.com/wangiqngpei557/3WDDDDemo.zip





 本文转自 王清培 51CTO博客,原文链接:http://blog.51cto.com/wangqingpei557/1359513,如需转载请自行联系原作者



相关文章
|
存储 SQL 关系型数据库
TiDB亿级数据亚秒响应查询整体架构
TiDB亿级数据亚秒响应查询整体架构
1158 0
|
存储 开发框架 前端开发
前端框架EXT.NET Dotnet 3.5开发的实验室信息管理系统(LIMS)成品源码 B/S架构
发展历史:实验室信息管理系统(LIMS),就是指通过计算机网络技术对实验的各种信息进行管理的计算机软、硬件系统。也就是将计算机网络技术与现代的管理思想有机结合,利用数据处理技术、海量数据存储技术、宽带传输网络技术、自动化仪器分析技术,来对实验室的信息管理和质量控制等进行全方位管理的计算机软、硬件系统,以满足实验室管理上的各种目标(计划、控制、执行)。
158 1
|
6月前
|
人工智能 前端开发 Java
DDD四层架构和MVC三层架构的个人理解和学习笔记
领域驱动设计(DDD)是一种以业务为核心的设计方法,与传统MVC架构不同,DDD将业务逻辑拆分为应用层和领域层,更关注业务领域而非数据库设计。其四层架构包括:Interface(接口层)、Application(应用层)、Domain(领域层)和Infrastructure(基础层)。各层职责分明,避免跨层调用,确保业务逻辑清晰。代码实现中,通过DTO、Entity、DO等对象的转换,结合ProtoBuf协议,完成请求与响应的处理流程。为提高复用性,实际项目中可增加Common层存放公共依赖。DDD强调从业务出发设计软件,适应复杂业务场景,是微服务架构的重要设计思想。
|
10月前
|
敏捷开发 缓存 中间件
.NET技术的高效开发模式,涵盖面向对象编程、良好架构设计及高效代码编写与管理三大关键要素
本文深入探讨了.NET技术的高效开发模式,涵盖面向对象编程、良好架构设计及高效代码编写与管理三大关键要素,并通过企业级应用和Web应用开发的实践案例,展示了如何在实际项目中应用这些模式,旨在为开发者提供有益的参考和指导。
104 3
|
11月前
|
存储 设计模式 前端开发
什么是SpringMVC?简单好理解!什么是应用分层?SpringMVC与应用分层的关系? 什么是三层架构?SpringMVC与三层架构的关系?
文章解释了SpringMVC的概念和各部分功能,探讨了应用分层的原因和具体实施的三层架构,以及SpringMVC与三层架构之间的关系和联系。
444 1
什么是SpringMVC?简单好理解!什么是应用分层?SpringMVC与应用分层的关系? 什么是三层架构?SpringMVC与三层架构的关系?
云架构数据倾斜问题之在SQL数据源读取查询时合并小文件如何解决
云架构数据倾斜问题之在SQL数据源读取查询时合并小文件如何解决
109 0
|
前端开发 Java 应用服务中间件
单体架构、垂直应用架构、分布式、SOA、微服务之间有什么关系和区别
单体架构、垂直应用架构、分布式、SOA、微服务之间有什么关系和区别
434 5
|
设计模式 Java 领域建模
【领域驱动设计 学习目标及大纲】从CRUD到架构设计
【领域驱动设计 学习目标及大纲】从CRUD到架构设计
260 1
|
存储 分布式计算 大数据
MaxCompute查询加速的能力,是由其底层的系统架构实现的。
MaxCompute查询加速的能力,是由其底层的系统架构实现的。
310 1
|
存储 数据采集 大数据
大数据必知必会系列——数仓分层架构及三层架构流程[新星计划]
大数据必知必会系列——数仓分层架构及三层架构流程[新星计划]
1996 0

热门文章

最新文章