领域驱动设计实和践
9页1、领域驱动设计和实践引言软件系统面向对象的设计思想可谓历史悠久,20世纪70年代的Smalltalk可以说是面向对象语言的经典,直到今天我们依然将这门语言视为 面向对象语言的基础。随着编程语言和技术的发展,各种语言特性层出不穷,面向对象是大部分语言的一个基本特性,像C+、Java、C#这样的静态语 言,Ruby、Python这样的动态语言都是面向对象的语言。但是面向对象语言并不是银弹,如果开发人员认为使用面向对象语言写出来的程度本身就是面向对象的,那就大错特错了。实际开发中,大量的业务逻辑 堆积在一个巨型类中的例子屡见不鲜,代码的复用性和扩展性无法得到保证。为了解决这样的问题,领域驱动设计提出了清晰的分层架构和领域对象的概念,让面向 对象的分析和设计进入了一个新的阶段,对企业级软件开发起到了巨大的推动作用。本文主要介绍了领域驱动设计的基本概念、要素、特点,对比了事务脚本和领域模型的特点,最后介绍了我们在软件开发过程中的领域驱动设计实践。什么是领域驱动设计(DDD)领域驱动设计事实上是针对OOAD的一个扩展和延伸,DDD基于面向对象分析与设计技术,对技术架构进行了分层规划,同时对每个类进行
2、了策略和类型的划分。领域模型是领域驱动的核心。采用DDD的设计思想,业务逻辑不再集中在几个大型的类上,而是由大量相对小的领域对象(类)组成,这些类具备自己 的状态和行为,每个类是相对完整的独立体,并与现实领域的业务对象映射。领域模型就是由这样许多的细粒度的类组成。基于领域驱动的设计,保证了系统的可维 护性、扩展性和复用性,在处理复杂业务逻辑方面有着先天的优势。领域驱动设计的特点领域驱动的核心应用场景就是解决复杂业务的设计问题,其特点与这一核心主题息息相关:1. 分层架构与职责划分:领域驱动设计很好的遵循了关注点分离的原则,提出了成熟、清晰的分层架构。同时对领域对象进行了明确的策略和职责划分,让领域对象和现实世界中的业务形成良好的映射关系,为领域专家与开发人员搭建了沟通的桥梁。2. 复用:在领域驱动设计中,领域对象是核心,每个领域对象都是一个相对完整的内聚的业务对象描述,所以可以形成直接的复用。同时设计过程是基于领域对象而不是基于数据库的Schema,所以整个设计也是可以复用的。3. 使用场景:适合具备复杂业务逻辑的软件系统,对软件的可维护性和扩展性要求比较高。不适用简单的增删改查业务。
3、如果不使用DDD?面对复杂的业务场景和需求,如果没有建立和实现领域模型,会导致应用架构出现胖服务层和贫血的领域模型,在这样的架构中,Service层开始 积聚越来越多的业务逻辑,领域对象则成为只有getter和setter方法的数据载体。这种做法还会导致领域特定业务逻辑和规则散布于多个的 Service类中,有些情况下还会出现重复的逻辑。我们曾经见过5000多行的Service类,上百个方法,代码基本上是不可读的。在大多数情况下,贫血的领域模型没有成本效益。它们不会给公司带来超越其它公司的竞争优势,因为在这种架构里要实现业务需求变更,开发并部署到生产环境中去要花费太长的时间。领域驱动设计的分层架构和构成要素下面我们简单介绍一下领域驱动设计的分层架构和构成要素,这部分内容在Eric Evans的书中有非常详尽的描述,想要详细了解的,最好去读原版书籍。下面这张图是该书中著名的分层架构图,如下:整个架构分为四层,其核心就是领域层(Domain),所有的业务逻辑应该在领域层实现,具体描述如下:用户界面/展现层负责向用户展现信息以及解释用户命令。应用层 很薄的一层,用来协调应用的活动。它不包含业
4、务逻辑。它不保留业务对象的状态,但它保有应用任务的进度状态。领域层 本层包含关于领域的信息。这是业务软件的核心所在。在这里保留业务对象的状态,对业务对象和它们状态的持久化被委托给了基础设施层。基础设施层 本层作为其他层的支撑库存在。它提供了层间的通信,实现对业务对象的持久化,包含对用户界面层的支撑库等作用。领域驱动设计除了对系统架构进行了分层描述,还对对象(Object)做了明确的职责和策略划分:1. 实体(Entities):具备唯一ID,能够被持久化,具备业务逻辑,对应现实世界业务对象。2. 值对象(Value objects):不具有唯一ID,由对象的属性描述,一般为内存中的临时对象,可以用来传递参数或对实体进行补充描述。3. 工厂(Factories):主要用来创建实体,目前架构实践中一般采用IOC容器来实现工厂的功能。4. 仓库(Repositories):用来管理实体的集合,封装持久化框架。5. 服务(Services):为上层建筑提供可操作的接口,负责对领域对象进行调度和封装,同时可以对外提供各种形式的服务。当然,DDD中还提出了聚合和聚合根(Aggregate Root
《领域驱动设计实和践》由会员s9****2分享,可在线阅读,更多相关《领域驱动设计实和践》请在金锄头文库上搜索。
可降解脂肪族聚酯纤维公司企业创新与创新管理【范文】
六年级语文上册将相和教案
广东燃料电池项目招商引资方案模板参考
宿州纯碱技术研发项目投资计划书模板范本
匀质板专项施工设计方案
2023年最新2023年冬奥会主题作文精选8篇
2022年高中地理《5.4综合国力竞争》学案 新人教版选修1
燃气管道工程应急救援预案
巧富客房管理系统
粤教版九年级思想品德第四单元中考复习测试题(选择题)
滔滔江河万古流
项目经理工作职责电子版(三篇).doc
小学音乐说课稿《美丽的家乡》.doc
《台阶》课后练习题及答案
施工电梯租赁合同(7篇)
停车场安全管理制度标准范本(十篇)
会计工作职责职责范文(四篇)
最新人教版初中九年级语文暑假作业
商务助理个人年底工作总结模板
解除劳动协议书简单版(四篇).doc
2023-11-16 10页
2023-06-03 34页
2023-04-28 6页
2023-12-29 18页
2023-09-09 2页
2024-01-14 2页
2023-06-27 106页
2022-11-06 2页
2022-09-23 3页
2023-03-17 9页