使用DDD提高性能和可伸缩性
通常软件需求有功能性需求和非功能性需求,在以往数据库驱动方式下,这两个目标是分别需要考虑的,是一个需要分别衡量的指标,但是因为使用DDD,就可以将这两个需求融于一身实现,这不但对象OO的功能,更是DDD定义的聚合边界的功能,Improving performance and scalability with DDD一文对此进行了详细阐述。
这篇文章大部分观点可见我以前讨论中,当然我没有看过这篇文章,完全是我自己的总结,今天看到这篇文章观点和我类似,或者说,仔细阅读DDD后就会有此感悟。
主要分几个点:
1.Aggregates are about units of consistency – not about pointers
聚合是一致性的基本单元,但不是一个点,大多数人认为,根以外对象只能引用聚合根,而聚合根不能引用这些对象,聚合不只是一个技术词语,应该和领域专家一起讨论。
我们需要确保一个聚合体内所有变化都是作为一个事务部分被保存,一旦我们这样做,我们就做了一件非常有意义的事情, 这就潜在地给我们提供者一种自由:以并行或分离的事务处理不同的聚合体。(也是我所说的引入异步也提供可能)
2.If you don’t aggregate enough, even the fastest computers will spin their wheels in vain
如果你不足够聚合,那么最快的计算机也只是让轮子进行空转。
延迟是分布式系统的一个经典问题,直接将聚合体一起装上,在分布式系统中传输,就能避免延迟。
3.If you aggregate too much, baggage becomes a problem
如果你聚合太多,就成了包裹。
序列化是分布式系统第二个经典问题,如果你聚合太多对象,这些对象需要序列化才能在分布式系统传输,那么耗费性能。
4. If you don’t aggregate enough, things are going to be broken just when you need them
如果你聚合得不够,但你需要某个模型时会断线。这其实是同步原子更新和聚合开始工作之间的关系问题。
5.If you aggregate the wrong things, deadlocks galore
如果你聚合了错误方式,死锁就光顾了。
具体可见原文:Improving performance and scalability with DDD
[该贴被banq于2009-10-23 15:53修改过]
[该贴被banq于2009-10-23 15:53修改过]