• DDD领域驱动设计-战术设计


    战术设计是指对特定上下文下的模型进行详细设计。

    战术设计的对象包括聚合、实体和值对象等,其目标是用明确它们是什么以及相互之间有何关系。战术设计的产出可以是用 UML 表达的类图,需要细化到具体的属性,同时确保在代码级别可实现。

    战术设计帮助我们创建一套优雅的业务模型,其中使用到下面的概念:

    实体(Entities)

    一个实体很有可能是一个可变的对象,它有唯一的ID。在整个领域模型中, 实体有自己独立的生命周期,这样可以让我们方便地获取到实体整个生命周期的变迁历史。

    值对象(Value Objects)

    区分值对象与实体的区别在于,值对象是不可变的,并且没有唯一标识,仅由其属性的值定义。这种不变性的结果是,为了更新值对象,您必须创建一个新实例来替换旧实例。

    聚合(Aggregates)

    它是战术设计中最重要和最复杂的模式之一,聚合基于另外两个战术标准,即实体和值对象。聚合是一种或多种的群集实体,并且还可以包含值对象。此群集的父实体接收聚合根的名称。

    领域服务(Services)

    服务是无状态对象,它们执行一些不适合实体或值对象上的操作的逻辑。它们执行特定于域的操作,这可能涉及多个域对象。

    领域事件(Events)

    事件表示域中发生的重大事件,需要向属于域的其他利益相关者报告。Aggregates通常发布事件。

    模块(Modules)

    模块很少被开发者提到,不过,他们的使用很有意思。

    使用模块后, 可以有效地帮咱隔离关注点, 对应着Java中的包或C#中的命名空间,也总是遵循着统一语言。

    资源库(Repositories)

    存储库主要用于处理存储,它们抽象了对数据存储的依赖担忧。他们负责持久聚合。

    工厂(Factories)

    工厂的出现,隔离了对象的创建过程。工厂可以生成聚合根、实体或值对象。使用工厂,可以避免创建对象时的复杂过程。

    规格(Specification)

    规格是一些特殊的业务规则。通常表现为用于校验(e.g. 数据格式,业务逻辑)、查询和搜索条件。

    在实践中,规格既可以被设计为灵活的查询或校验条件,也可以被抽象出来以便复用。

  • 相关阅读:
    什么是SMTP?它是如何工作的?第1部分
    二叉搜索树详解以及C++实现二叉搜索树(递归和非递归)
    您的企业从在线直播中可以获益的4种方式
    AR Engine运动跟踪能力,高精度实现沉浸式AR体验
    平面八杆多叶叶线生成机构
    机器学习之支持向量机(SVM)的求解方法
    vivado时序分析-2时序分析关键概念
    41-基于stm32的电子时钟万年历温度OLED显示(源码+实物图+硬件连接)
    Linux centos系统中添加磁盘
    最优化问题及线性规划问题
  • 原文地址:https://blog.csdn.net/haoxin963/article/details/127660170