我的问题有点含糊......
假设我有这个过程,当有新订单时将邮件发送到商店
class BookingMessager : IBookingMessager{
BookingMessager(IBookingDataSource source,IBookingMessageFactory messageFactory,IMessager messager){
this.source = source;
this.messageFactory= messageFactory;
this.messager = messager;
}
void SendBookingMessage(int idBooking){
Booking aBooking = source.GetById(idBooking);
BookingMessage aMessage = messageFactory.Create(aBooking);
messager.SendMessage(aBooking.Shop.Contact,aMessage.Title,aMessage.Content);
}
}
这很好用。
新要求:我必须根据商店更改邮件正文。
我虽然关于这些解决方案:我创建了一个IBookingMessageFactory,它将根据这样的商店调用所需的IBookingMessageFactory
BookingMessage Create(Booking aBooking){
return this.BookingMessageFactoryIndex.ContainsKey(aBooking.Shop.ID) ? this.BookingMessageFactoryIndex[aBooking.Shop.ID].Create(aBooking) : this.default.Create(aBooking);
}
或者我将IBookingMessageFactory作为参数注入,但这会迫使我更新我的界面IBookingMessager :(
什么是最佳解决方案?我的第一个代码好吗?如何在构造函数和参数注入之间进行选择?
答案 0 :(得分:1)
允许IBookingMessageFactory
返回特定于商店的BookingMessage
看起来很好。看来你正在使用一个复合/装饰器IBookingMessageFactory
,它将委托给一个特定于商店的实现,这很棒,因为这样可以保持简单。