《实现领域驱动设计》第二章读书笔记

Categories:

概述

第二章主要讨论了领域的限界上下文(Bounded Context)和上下文映射(Context Mapping)。具体内容包括:

  1. 限界上下文的定义和作用:通过例子和场景来介绍限界上下文的概念,以及它在领域驱动设计中的重要性和作用。
  2. 限界上下文的识别和分离:详细阐述如何通过业务知识和技术手段来识别和划分限界上下文,并将各个上下文之间的关系、依赖和交互进行分离和解耦。
  3. 上下文映射的实现和策略:介绍不同上下文之间映射和集成的方式和策略,包括共享内核、公共语言、防腐层等,以及它们在不同场景下的应用。

通过本章的学习,读者可以深入了解领域的限界上下文和上下文映射在领域驱动设计中的作用和实践,为后续的领域建模和实现提供了重要的指导和参考。

什么是领域、子域和限界上下文

领域是指有具体业务含义的一类问题或面向实体的业务领域。在软件开发中,领域可以被视作一个独立的子系统或模块。

子域是指领域中的一个较小的划分,可以看作是领域中某个特定部分的业务边界。例如,某个电商领域可以被划分为商品子域、订单子域和物流子域等。

限界上下文是指在子域内,一组紧密关联的领域对象和业务规则的语境。 上下文限制了这些对象和规则的适用范围和意义。在限界上下文内,共享相同的语言和概念,但不同的上下文之间可能使用不同的语言和概念来描述相同的概念。

什么是问题空间、解决方案空间

问题空间(Problem Space)是指问题解决者对一个问题所达到的全部认识状态,其包含了关于问题的所有信息和已有的知识。 问题空间包括初始状态和目标状态,前者是指问题出现时的不完整信息或不满意的状况;后者是指问题解决者希望得到的信息或状态。

解决方案空间(Solution Space)是与问题空间相对应的概念,指的是解决问题时设计者和开发者所构建的软件系统的实现方案和实现细节。 解决方案空间包括针对特定问题领域的模型、技术架构、具体实现、算法选择等实现细节。 因此,解决方案空间是各种技术决策的集合,包括开发语言、框架、数据库、缓存等具体技术选型、系统架构、代码设计、部署方案等方案层面的决策。

如何利用限界上下文来分离模型

限界上下文是指在微服务设计中的主要边界依据之一。
将限界上下文内的领域模型映射到微服务,就完成了从问题域到软件的解决方案。 因此,在分离模型时,可以将整个模型分成不同的限界上下文,并将每个限界上下文作为一个独立的微服务进行开发和维护。 这样,当需要更改某个模型的一部分时,只需要对相应的限界上下文进行修改,不影响其他的限界上下文。

如何正确处理限界上下文的大小,如何构建可以部署的限界上下文

限界上下文应该根据业务需求和团队的技术能力来适当地进行划分和合并。

过大的限界上下文会导致系统复杂度增加、部署困难等问题;而过小的限界上下文则可能导致模型的聚合不完整、模块间沟通成本过高等问题。 因此,在设计限界上下文时需要考虑业务的复杂程度、模型的一致性和可维护性等因素。

除此之外,构建可以部署的限界上下文还需要遵循以下原则:

SaaSOvation在设计协作上下文早期所面临的痛苦是什么,又是如何走出这种困境的

SaaSOvation在设计协作上下文早期所面临的痛苦是将安全和权限相关逻辑引入协作模型中,导致功能上的混淆和复杂度增加。这使得协作上下文难以扩展、难以测试和难以维护。

为了走出困境,SaaSOvation采取了DDD的设计思想,重新设计协作上下文,将安全和权限等逻辑单独抽象成领域服务,使得各个限界上下文之间的耦合降低,同时增强了系统的扩展性和灵活性。 此外,SaaSOvation还使用了开源框架实现了DDD的设计思想,如CQRS、Event Sourcing等,为其他开发者提供了参考和借鉴。

示例项目的核心域和敏捷项目管理上下文是如何形成的

示例项目中的核心域是由业务需求和限界上下文的分析确定的,这也是DDD设计中的基本流程。 核心域代表了业务的关键部分,它包含着业务的本质、价值和特点,是实现业务目标的重要保证。 通过对领域模型的建立和设计,我们可以更好地理解业务领域的本质和特点,并能实现相应的业务需求。 在示例项目中,核心域是指营销管理、商品管理、订单管理、支付管理等与电商相关的领域。

敏捷项目管理上下文则是把敏捷开发方法应用于项目管理的一种实践方法。 示例项目采用了Scrum作为敏捷项目管理框架,具体实现包括产品待办项、Sprint迭代、Sprint计划、Sprint回顾和Sprint评估等。 Scrum框架中强调团队合作、持续交付、迭代式开发、面向用户以及逐步改进等原则,这些原则都能够帮助团队更快地响应市场的变化和客户的需求。 在示例项目中,敏捷项目管理上下文是指采用了Scrum框架进行的项目管理,贯穿了整个项目的周期。

如果你觉得本文对你有帮助或不错,可略表心意,请我喝一杯冰可乐。

Comments