系统领域对象设计,希望大家探讨
本人在做邮件消息发送程序,目前可以按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();
然后分别在各实现类里面编写,修改的太多了
方式二缺点:类太多
希望大侠解惑