系統領域物件設計,希望大家探討

kogle發表於2008-08-15
本人在做郵件訊息傳送程式,目前可以按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();
然後分別在各實現類裡面編寫,修改的太多了

方式二缺點:類太多

希望大俠解惑

相關文章