系统领域对象设计,希望大家探讨

08-08-15 kogle
本人在做邮件消息发送程序,目前可以按2种方式发送消息,

1.internet email

2.站内消息

于是定义了一个Message接口,以及EmailMessage和站内消息(StationMessage)的实现类。

又有2种生成message的方式:键盘敲进去和选择模板

于是又定义了一个MessageRender接口

和 键盘输入(SimpleMessageRenderImpl),模板邮件输入(TemplateMessageRenderImpl)2个实现类

然后又定义了一个MessageSender接口和 MailMessageSenderImpl, StationMessageSenderImpl 2个发送

消息的实现类

按照开-闭原则,这个设计是合理的。

有2个疑问:1.MailMessageSenderImpl不可能发送StationMessage,同样StationMessageSenderImpl 不可能

发送EmailMessage, 因此这种是不是属于过渡设计??到底有没有必要把站内消息发送和email消息发送写在同一个模块里??

2.关于MessageRender, SimpleMessageRenderImpl或者StationMessageSenderImpl至少返回一个Message的具体实现类

方式1:

interface MessageRender {

Message getEmailMessage();

Message getStationMessage();

} 然后SimpleMessageRenderImpl,TemplateMessageRenderImpl 分别实现

方式2:

interface MessageRender {

Message getMessage();

}

需要4个实现类SimpleEmailMessageRenderImpl,SimpleStationMessageRenderImpl,

TemplateMailMessageSenderImpl,TemplateStationMessageRenderImpl.

方式一缺点:当再来一种其他Message实现的话,又得在MessageRender里面加一个方法Message getOtherMessage();

然后分别在各实现类里面编写,修改的太多了

方式二缺点:类太多

希望大侠解惑

    

freebox
2008-08-15 12:50
关于MessageRender的方式1肯定是错误的,这样的话就不用接口了。

banq
2008-08-15 15:18
>到底有没有必要把站内消息发送和email消息发送写在同一个模块里

你潜意识里觉得是有必要的,我因为不是很了解需求,确实没有看到他们有统一的必要性,尽管他们都有一个message消息概念在里面。

其实这还是和我们的数学思维有关,潜意识里看到相同的就想合并同类项,就想使用一个精简的公式统一代表他们,喜欢先总结,而不是首先分析拆解。

我的建议,首先分开处理,然后,两个功能完成后,我们再重构,进行合并,而不要一开始就去合并,就产生过度设计,离开需求很远。

kogle
2008-08-15 16:27
回freebox: 你的意思是按方式一没必要用message接口了?

回BANQ: 确实如你所说的这样, 我也怀疑将它们合在一起!

需求是这样的,用户可以选择(单选框)使用 email 发送, 或者站内消息发送, 另外系统后台也需要发送邮件功能

freebox
2008-08-15 18:03
方式1我认为没必要用MessageRender接口了,在方式一里它的任务是什么呢?当加进一个getXXMessage()功能时,已有的实现类怎么办?实现一个空方法么?那干嘛不直接在这方法里把功能实现了,而非要另做一个XXMessageImpl类呢?

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