有关循环依赖的问题?来者有分

最近在工作中遇到这样的问题,概要设计类图如图所示(http://blog.dreambrook.com//images/blog_dreambrook_com/justin/93/r_xhyl.gif),就拿NormalPurchaseOrderDetailControl这个对象来说,本意是想把一些可以独立出来的东西放在一个对象里封装起来,方便编码和维护。但是实际中要实现NormalPurchaseOrderDetailControl里的大部分功能,都又需要去依赖NormalPurchaseOrderForm(本质是依赖BaseForm),在我理解这就已经是一种循环依赖了,直觉上觉得这样会使程序实现起来比较复杂,近而造成维护,调试都很麻烦,而这么做的意义(所谓的单个对象功能独立,单个对象关注范围集中)又不是十分明显,所以在我们开会讨论的时候就把这个方案否掉了,最后设计成主要的功能还是都由NormalPurchaseOrderForm来做,即只专心维护NormalPurchaseOrderForm这个对象,而NormalPurchaseOrderDetailControl只作为收集数据而用。

但是我回头来想想,循环依赖到底有什么不好呢?我还真说不太清楚,NormalPurchaseOrderDetailControl在NormalPurchaseOrderForm对象中是以私有变量引用的,NormalPurchaseOrderDetailControl通过parentForm变量应该不能引用到detailControl,这样的话也不会引起很大的混乱?!

大家来讨论一下吧,重点是围绕这个类图,讨论一下循环依赖的问题?!还有能有什么更好的设计给我出出注意~谢了先!

Justin
MSN:xiaoliang203@hotmail.com

个人认为还是循环依赖等负责依赖关系产生的根本原因来自OrderForm边界对象粒度设计不细,你的OrderForm可以划分得更细腻,这样,细腻化后可能会理清依赖关系,从而降低依赖。