对象设计夜未眠
对象设计不是仅仅为了真实的模拟现实世界,而是使现实世界的需求能更好的在计算机这个环境中表达,当我们思考对象职责,设计对象行为时,能够更好的扩展,能够更好的维护,能够更清晰的表达这个对象所承担的职责,能够更好测试,能够有更好的性能,才是我们要达到的目标。我曾经一度对什么是正确是设计,什么是好的职责分配。这一点混淆不清,那是因为我忘记了我要实现的目标,只是一味想找出现实世界在软件环境中的对应物,事实上这种思考方式也是有失偏颇的。比如以图书馆系统为例,你说还书是谁的职责呢,你说是人的职责是可以的。那我也可以说是书的职责,说书被还了。事实上对于这两个设计到底谁正确的参考标准不是哪个思维方式更贴近于现实世界。而是哪种设计能更好的和其他对象协作,更好的表达业务需求,更适合承担这个职责。说了这么多,其实对象设计就一句话,高内聚,低耦合。在这个本身互相牵制的两个法则中找到合适的点,就是合理的对象设计。
我还说下我对领域事件的理解,其实领域事件的本质实质上我觉得也是解耦合。事件这个东西很早就用于模块之间解耦合,让模块与模块之间的调用通过消息总线的方式调用,让各自模块独立的变化。然后又出现在DDD里面用来保持领域模型主导地位和领域模型注入仓储问题,同样领域事件就是为了解决领域模型和仓储解耦合问题。更有甚者想用事件代替所有的对象交互,把所有的对象的直接调用,改为向消息总线发送消息,然后让服务提供者消费对象消息。本质而论还是同样六个字:高内聚,低耦合。
模块与模块之间通过事件发送消息
聚合跟与聚合跟之间发送消息
聚合跟内发送消息
总结:发了三张图,分别是模块与模块之间的事件,聚合根与聚合根之间的事件,聚合内的事件,他们都都说明了事件的本质作用,解耦消息的发送者和消息的接受者。当然最后一张聚合内的实体发送消息有点过,聚合内的对象是紧密相关的对象,本身存在内聚性,不需要解耦合。
呵呵,终于发完了,考虑到我辛辛苦苦用画图板画图,有苦劳的情况下,各位大侠对于我的理解不当之处,请多见谅。
[该贴被OweJDao于2011-03-29 13:08修改过]