像梦一样奔驰|谈DDD领域驱动设计和建模( 二 )
传统的用例驱动往往我们会先分析会有哪些业务行为和业务操作 , 再来分析这些行为操作的承载对象 , 如RUP中的实体类控制类等 。 领域驱动的方法则可能是尽快先找出核心的业务实体对象 , 再通过交互分析来分析对象应该展现出来的行为 。
在解耦的层面我们看到两个层面的解耦:
第一个层面是业务操作和业务实体的解耦 , 这也是传统的SOA的一个思想 , 在领域建模里面可以看到分解为业务服务 , 实体对象和值对象等 。
第二个层面则是应用功能 , 服务能力 , 基础设施三层的解耦 , 在领域驱动设计的分层架构中则将其分解为了应用层 , 领域层 , 基础设施层 。 基础设施层提供资源层和持久化的能力 , 领域层提供业务服务能力 , 而应用层仅仅处理能力的协同 , 状态保存 , 服务的编排问题等 。
领域驱动设计中领域层的构建可以是整个系统构建的核心 , 通过领域层的构建再拓展到持久化层和界面展现层 。 领域模型完全基于面向对象思路构建 , 因此完全可以兼顾底层是关系型数据库还是NoSQL数据库来持久化 。 而且领域模型的持久化好像专门就是为适合NoSQL数据库而设计 。 对于界面展现层相同的道理 , 领域层只是提供和暴露业务服务 , 具体业务服务如何交互 , 协同和展现并不是关键 。
一个完整的领域层应该包括了实体对象 , 值对象 , 主域模型类 , 业务服务类几个关键的类 。
实体对象有唯一的标识符 , 需要持久化 , 对应现实中的业务对象 , 而值对象无唯一标识符 , 仅仅关注它拥有的一组属性 。 实体对象本身会表现出对应到行为 , 而值对象仅仅是属性的结合 。 在多个实体对象上层可能还要构建主域层对象 , 程度跨多个实体对象的操作组合 。 而对于业务服务仅仅是能力通过接口方式的暴露 。 一方面是实现应用层到领域层的协同 , 一方面是实现多个domain主域间的协同 。
对于领域层 , 在大型系统构建过程中可以是首先进行全局的领域层建模再划分为多个domain域 , 形成业务组件或模块 。 也可以首先进行业务主体域的划分 , 然后再分解下去后识别每个业务域里面的实体对象和表现行为 。 组件划分思路需要引入到大型领域层的构建 。 即领域层也会组件化和模块化 。 业务服务即需要考虑模块内 , 也需要考虑模块间协同 。 在这里可以看到是领域层本身进行模块化后引入的 , 对业务服务的能力进行了扩展 。
领域驱动设计让我们在分析和构建一个应用系统的时候 , 真正的转正核心矛盾 , 即领域对象和行为表现 , 而不是太多的关注基础设施和持久化机制 , 不去关心前台的展现层技术等 。 因为只有领域层这块在各种技术架构中是完全可以复用的 , 也是业务系统的核心 。 我们谈业务架构驱动应用架构 , 而业务架构核心内容就应该体现到应用架构的领域层模型中 。
领域模型关键对象和UML彩色建模领域驱动设计实质是业务场景和实体驱动的设计 , 有关注业务场景和流程 , 分析 , 识别和抽象业务对象 , 进一步分析对象间的创建 , 关联 , 逻辑和服务 。 注意领域模型和多层架构和技术关联很小 , 更多的是关注概念模型和业务逻辑 , 因此抛开了多层架构和框架本身 , 先研究领域模型再由内而外过渡到数据层和界面层 , 以及多层的集成 。 按照Eric的表述 , 将领域中的组成角色分为五种:
- 芒种风向标|奔驰全新S级的内饰好看吗?不得不说优秀全靠同行衬托
- 光明论|劳动者的尊严不能像证件一样被“扔”在地上
- 王者荣耀|没有明世隐的“狼狗”不能玩?正确玩法教给你一样凯瑞全场!
- 像梦一样奔驰|51WDP开发者平台五大工具全面开放,让数字孪生触手可及
- 汽车知识|奔驰全新S级的内饰好看吗?不得不说优秀全靠同行衬托
- 体育多看|若他留在湖人,能享受和科比一样的待遇吗?,詹姆斯38岁合同到期
- 杨毅|理智看球!杨毅:像威少爷这种,就像没学过打球一样
- 光一样的少年|面对后起之秀,苏泊尔不玩价格战,以一抵八多功能破壁机倍受追捧
- 带翅膀的蜗牛|国家一级演员,孝女关牧村,把高龄父亲当成孩子一样呵护
- 穿搭|黑白灰太单调?这样穿体现不一样的气质,打造不一样的美