解耦合设计的一个困惑,请大家讨论

06-04-10 neo_q
我在设计中遇到一个问题!而且我想或许大家也会有类似的困惑,还是我多想了抑或是孤陋寡闻。具体问题如下,简化了分析模型

利用ctrl(action)接受客户端提交的请求并分配到不同的DS(DOMAIN SERVICE),然后DS调用BO,BO在调用DAO来完成持久化!粗略地看看是没有太大的问题,耦合度也可以控制在一定程度,但是我有个问题出在哪里呢?我觉得BO是比较容易变动的东西,基于将变动与不变分离的原则,我希望可以设计一个这样子功能的bo。利用最简单的工厂模式,首先定义好一个interface在里面定义特定BO的所有行为,然后定义一个abstract class 里面定义BO的所有属性以及get/set方法,当然他继承前面的interface,然后再根据不同功能,根据职责分配的方式,以不同的实做类来实现不同功能(继承前面的abstract class),但是因为对DS来讲的话,我希望降低他与BO的耦合度,在DS来说我希望他只能通过interface访问(利用工厂实现)。表面看好象符合我要求了,也满足了提供内聚性降低耦合度的想法,但事实上大家看,如果我的BO 有三个功能的话那么在interface中必须定义三个行为才能通过接口统一访问,不然对DS来讲提高了耦合度(假如有多个interface的话),那么不考虑abstract class对于每个实做类来讲,并没有达到我想要的结果,为什么,因为内聚性并未提高,他得到了自己不想要的行为(例如实现新增,结果还有修改和查询也随继承得到了),这违背了我的初衷!我目前使用了一种妥协的办法,就是在实现类中对非本类功能行为的实现,全部都是直接抛出异常,但是非常遗憾,这比我理想的情况相差实在太远,因为这样子一来根本就不是一个良好的设计!我一直被这个问题困扰,不知道在坛的高人有没有什么很到的解决方案,或者大家一起来讨论一下此问题,小弟不胜感激!

              

neo_q
2006-04-11 09:07
如果我这样子做是否有设计过度的嫌疑,而且我也在思考是不是最初我的思路就错了!希望大家能多回复啊!小弟一直困惑啊!

banq
2006-04-11 21:42
sorry,不是非常明白你的意思,可贴些代码或画张图看看。

不要试图在业务层使用工厂模式,因为工厂模式有一个前提约束:统一产品接口;其实这世界丰富多彩,没有那么好统一的,容易造成程序员强迫统一,进而脱离设计本意。

neo_q
2006-04-11 21:43
为什么一些回复不见了?

neo_q
2006-04-11 21:49
我前面的一个回复不知道在哪里去了,我的意思就是说希望如果我的bo多了一个功能的话,我不需要改代码,只需要在顶层BO(interface)中添加一个方法描述,然后再添加一个实做类就可以了,但是外面统一用顶层接口来调用!

猜你喜欢
4Go 1 2 3 4 下一页