2.2 界限上下文
DDD中最晦涩难懂的一个抽象概念 , 特定模型的限界应用 , 不过可以借用原文的比喻会意一下:细胞之所以能够存在 , 是因为细胞膜限定了什么在细胞内 , 什么在细胞外 ,并且确定了什么物质可以通过细胞膜:
界限上下文的定义涉及粒度的思想 , 即每个粒度要具备独立性;如上图仓储业务 , 可以将服务部署与仓储子域、仓储上下文做成一一对应的关系 , 或者在仓储子域中分别定义:仓库和货架两个上下文;这里具有极大的灵活性 , 没有真正意义上的标准可以参考 。
2.3 映射关系
做好界限上下文的划分 , 理清各个上下文之间的关系 , 明确业务场景中的依赖顺序 , 这样可以更好地推动开发流程的落地;对于上下文的关系描述也远不止图中的这些 , 还有共享内核、合作等等:
- 上下游(U-上游 , D下游):描述上下文调用时的关系 , 服务调用方为D , 服务提供方为U;
- 防腐层(Anticorruption-Layer , 简写ACL):上下文交互时封装的一层 , 提供对动作的校验、适配、转换等;
- 开放主机服务 , 发布语言(Open-Host-Service简写OHS , Published-Language简写PL):定义访问协议;
2.4 建模设计
子域和界线上线文完成对业务的拆分切块 , 从而进行分治;基于防腐层降低各个界限上下文的耦合程度;聚合思想保证了业务问题的解决方案内聚;严格的分层模型实现服务支撑能力的分散;
- 防腐层(Anticorruption-Layer):上下文交互时封装的一层;
- 领域层(Domain-Layer):在分层架构中负责领域逻辑的设计和实现;
- 领域服务(Domain-Service):行为无法识别归属的实体时 , 封装到领域服务;
- 聚合(Aggregate):相关对象的集合 , 描述核心领域 , 通常把聚合作为数据修改的单元;
- 实体(Entity):通过标识来定义的对象 , 而不是基于属性 , 比如Uid标识用户实体;
- 值对象(Value-Object):描述特征或属性但没有标识的对象;
- 工厂(Factory):封装对象复杂的创建逻辑与类型;
- 存储库(Repository):把存储、缓存、搜索等资源封装的机制 , 对应领域模型;
3、工程实践领域模型在代码工程的实践中 , 可以将不同的子域集成到各自的服务中 , 也可以在一个服务中 , 通过多个模块(Module)进行隔离维护 , 即一个模块对应一个界限上下文;
将业务问题进行分模块分层分包的方式进行隔离 , 是代码工程中的基本手段 , 这里只是对组织方式进行描述 , 在实际的开发中 , 要根据依赖顺序进行类库拆包管理;
在程序的执行过程中 , 并不是所有的交互命令都需要经过领域层 , 实际上大部分业务中的查询命令都是超过增删改命令的 , 所以在纯读取数据的请求中 , 应用层可以绕开领域层直接访问基础设施层 , 减少一层数据处理逻辑 。
四、实践总结最后来讨论一些架构实践的经验 , 随着技术的不断发展和更新换代 , 为解决业务问题提供了极大的便利 , 不管是单服务中各种成熟的组件 , 又或者分布式中的微服务体系 , 或者聚焦业务管理的领域模型;每种架构选型都有其适用的场景 , 不同的选型意味着不一样的实现成本;
- 有网友表示|苹果上线自助维修服务,卡针多少钱?
- 本文转自:华商网继微博、今日头条、抖音等多平台后4月29日晚|热搜第一!微信又有大变化
- 作为微软在2001年推出的操作系统|油管博主找到一颗1mhz的intelpentiumcpu
- 微博|如何评价vivo X80系列?有双芯、微云台可能还不够
- 今日早间|米家app疑似出现服务器宕机,官方回应:无需重新绑定
- 最后3天!关于个人收款码,马云推出新规定,微信压力来了
- 作为微软在2001年推出的操作系统|比推荐配置慢233倍的cpu强行运行winxp会怎样?
- 微信终于可以显示小尾巴了,快试试!
- 微博|微博启用IP属地功能,想要扼杀谣言,但也成全了地域黑
- 新氧|所有RX 7000系显卡已流片,RX 7700 XT开始进行量产