`
lt1988
  • 浏览: 18165 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

the life cycle of domain object

阅读更多

在对象生命周期中有两个难点问题:

1 )保存对象的完整性

2 )避免在对象生命周期中的逻辑处理中使其状态变得混乱

解决问题主要有三方面的方法:

1 )使用聚合,简化对象之间的复杂关系?

2 )使用工厂,解决对象创建,重新组合(反序列化?)的问题

3 )使用资源库,解决对象的存储,查询问题

 

1聚合

聚合是一些有关联的可以被看做是一个单元的对象集合,只有一个可根节点。使用聚合是通过对业务规则的熟悉,来减少业务上没有需要的关联关系,尽可能简单化对象的关系网。比如说车与轮子,轮胎,活塞就可以看成一个聚合,因为很少有人去直接访问那些小部件而不通过车本身,但是引擎和车不属于一个聚合。

业务规则是在对象数据发生变化时必须保证的,聚合可以有效保证某些业务规则。

例子:订单的完整性,并发问题

如果不使用聚合,那么会出现订单,订单项可以被两人同时编辑,出现并发问题。

如果把订单,订单项,商品看成一个聚合,那么在改变商品价格后,新加入同样商品会出现问题。

只有理解了业务规则,新加入订单项还是按照最早加入商品时的价格计算,这样把订单,订单项看成一个聚合,这样有效保证业务规则,对业务规则的了解是很重要的!

2工厂

 我的理解是如果在构建类似聚合这样比较复杂关系的对象集合时,可以使用专门的工厂来封装对象的创建过程。

工厂的好处:

1)整体构建,构建的业务逻辑就在这一个地方,易维护 。2)基于接口构建,耦合低。

3资源库

使用接口抽象对象的读取操作,使客户端更关注于业务,资源库更关注于数据的读写,接口能带来低耦合。

对资源库的查询两种方式:

1)硬编码查询,如拼凑sql语句。2)使用规格说明,例如hibernate?

对于开发人员来说,需要关注资源库的实现,有助于调优。

还有一些需要注意的问题

1)与工厂之间的关系,可以互相调用,合作。

2)于框架的关系,需要在框架内工作。

3)为关系数据库设计对象,这个问题感觉很复杂啊。。。

 

分享到:
评论

相关推荐

    领域驱动设计(精简版)

    A Model Expressed in Software 81 Chapter 6: The Life Cycle of a Domain Object 123 Chapter 7: Using the Language: An Extended Example 163 Part III Chapter 8: Breakthrough 193 Chapter 9: Making Implicit...

    C++ plus Data Structures.pdf

    you should be able to Describe the general activities in the software life cycle Describe the goals for “quality” software Explain the following terms: software requirements, software ...

    CISSP OIG v2 第二章

    ### Expectation of an Information Security Professional in This Domain 接下来详细探讨了信息安全专业人员在此领域的期望职责与技能要求。通过阅读这部分内容,读者可以了解到成为一名合格的应用安全专家所需要...

    DDS技术架构.zip

    8. **数据生命周期(Data Life Cycle)**:DDS提供了对数据生命周期的管理,包括数据的创建、发布、传输、接收、存储和销毁等阶段。 9. **持久化(Persistence)**:DDS支持数据的持久化,即使在发布者和订阅者之间...

    DDS相关文档(包含多个文档)

    6. **DDS_DLRL(DDS Data Life Cycle and Reliability)**:这部分文档主要讲述数据生命周期和可靠性策略,如数据保留时间、数据重发策略等。 7. **DDS_RPC(DDS Remote Procedure Call)**:DDS_RPC扩展了DDS,...

    软件工程关键概念

    Software Life Cycle(软件生命周期)描述了软件从需求收集到最终退役的各个阶段。Validation(验证)确保产品满足需求,而Partition Testing(分区测试)则是通过测试不同部分来验证软件的全面性。 Fault ...

Global site tag (gtag.js) - Google Analytics