
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
领域驱动设计是目前大多数软件开发程序员都需要重点掌握的一个设计方法,而本文我们就通过案例分析来简单了解一下,领域驱动设计基础知识分享。
领域驱动设计
领域驱动设计强调领域模型的重要性,并通过模型驱动设计来保障领域模型与程序设计的一致。领域驱动设计先从业务需求中提炼出统一语言,并建立领域模型指导着程序设计以及编码实现;后,又通过重构来发现隐式概念,并不断解决领域领域模型相关的新问题。本质上,领域驱动设计也是从问题空间映射到解决方案空间。
领域驱动设计结合了宏观和微观两个层面的设计,分别对应于领域驱动概念中的战略设计和战术设计。
领域驱动设计:战略设计
战略设计的初衷是要保持模型的完整性,主要从下面两个方面来考量的:
问题域方面:将问题规模进行拆解,划分为不同类型的子域,识别出核心领域与其他子领域。
解决方案层面:划分限界上下文和上下文映射对问题域进行合理的分解,确定上下文边界以及它们之间的关系。
领域驱动设计:战术设计
战略设计的初衷是要保持模型的完整性,通过战略设计将整个软件系统分解为多个限界上下文,然后对每个界限上下文进行战术设计。对每个限界上下文进行战术设计。
实体:Entity,不同于通过属性进行定义的传统对象,实体对象通过标识进行区分,且具有持续的生命周期。
值对象:ValueObject,值对象是具有属性且不可变的对象,但没有标识。
领域事件:DomainEvent,领域事件用于记录系统内的模型活动相关的离散事件,虽然系统内所有事件都应该能够被跟踪,但只有被领域关心的事件类型才创建领域事件。
聚合:Aggregate,聚合对象是实体和值对象的聚合,聚合具有一个的根,即聚合根。外部对象不再直接访问聚合内部的单个对象或者实体,而是直接访问聚合根,并使用聚合根将指令传递给对应的分组。
领域服务:DomainService,某些领域逻辑不适合分配给某个特定的实体对象,可将其这些操作封装成领域服务
资源库:Repositories,资源库不是配置库,它提供一个全局接口来访问特定聚合内部所有的实体类和值对象,应该包括创建,修改,删除聚合内部对象的方法。
工厂:Factories,工厂封装了创建复杂对象和聚合的逻辑,对客户端屏蔽创建的复杂性
上述DDD战术设计的模式标识了进行设计时的一些关键模式,但并非说是一定要严格使用和遵循的,也不是遵循了所有的战术设计模式就是符合领域驱动设计。因为,实践DDD关键不在于这种战术层面模式的落地,而是在于其宏观的领域驱动设计思想的遵循,比如统一语言、领域模型与代码间的一致、子域及上下文的拆分以及映射、领域模型与技术关注点的分离等等。另外,随着DDD的不断发展,一些新的构建模式已经涌现,老的构造模型不一定能符合团队研发的要求。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加danei456学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。