Мой вопрос немного расплывчатый ...
Допустим, у меня есть этот процесс для отправки почты в магазин при появлении нового заказа
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: (
Какое лучшее решение? Мой первый код в порядке? Как выбрать между конструктором и внедрением параметра?