第六章 值对象

145 阅读2分钟

值对象

  • ·/typeDefinitions结点下,作为领域基础类型。在一个领域内可能会广泛使用一些适合抽象为值对象的基础概念,把它们定义在这个结点下是很合适的。
  • ·/valueObjects结点下,这里放置的是在限界上下文范围内被各个聚合共用的值对象的定义。

领域基础类型

  • 在DDDML规范中不需要预设任何基本类型。也就是说,在DDDML文档中甚至不需要在使用一个值对象之前,先对一个“值对象是什么样子”做出任何描述——不需要声明这个值对象是由哪些属性组成的,也不需要声明它是否是继承自其他值对象的子类型。

  • DDDML应该支持在团队一致认可某个领域概念是值对象之后,就可以在DDDML文件中直接使用它。这时不需要考虑是不是能“生成”值对象的实现。也就是说在DDDML文档中使用一个没有显式定义的值对象是合法的。

valueObjects:
    PersonalName:
        properties:
            FirstName:
                type: string
            LastName:
                type: string

aggregates:
    Person:
        id:
            name: PersonId
            type: string
        properties:
            Name:
                type: PersonalName
                defaultValue:
                    FirstName: JOHN
                    LastName: DOE
            #…


数据值对象

  • 在应用开发的过程中,我们经常会用到一种只有属性、没有方法的值对象。这样的值对象本身没有什么重要的行为,只是一个简单的数据结构、一个数据的容器,所以我们把它叫作数据值对象。
valueObjects:
    PersonalName:
        properties:
            FirstName:
                type: string
                description: First Name
                length: 50
            LastName:
                type: string
                description: Last Name
                length: 50


枚举对象

  • 枚举对象是一种特殊类型的值对象。我们可以这样定义一个枚举对象:
enumObjects:
    DocumentAction:
        baseType: string
        values:
            Draft:
                description: Draft
            Complete:
                description: Complete
            Void:
                description: Void
            Close:
                description: Close
            Reverse:
                description: Reverse