Какой шаблон дизайна я должен использовать и почему?
В аптеке продаются лекарства разных производителей. Каждое лекарство имеет название, тип (антибиотики, противовоспалительное средство, желудок), цену и т. Д. Однако импортное лекарство должно иметь сертификат из лаборатории в текущей стране. Более того, если клиент покупает импортное лекарство, работник аптеки должен запросить базу данных лекарств и посмотреть данные о аналогичном лекарстве от отечественных производителей (которые обычно дешевле).
Как нам разработать структуру классов для обработки данных о лекарствах в этой аптеке?
1 ответ
Я нашел " Применение UML и паттернов " Крейга Лармана очень хорошей книгой, чтобы узнать о дизайне, паттернах и реализации.
Если вам нужно более быстрое решение, а не чтение всей книги, просто прототипируйте что-нибудь: создайте несколько классов, выясните, каким будет ваш интерфейс и т. Д. Попробуйте некоторые вещи, чтобы увидеть, что будет проще всего реализовать / поддерживать.
Возможность:
У тебя есть ProductService
который имеет FindCounterpartMedicines()
, Если описанный в вашем вопросе случай является единственным частным случаем, это может быть достигнуто с помощью простого if
: Не усложняйте вещи, если в этом нет необходимости, а "Делайте самое простое, что может сработать" ( ссылка).
if (medicine.IsImported) {
result.CounterPartMedicines = FindCounterpartMedicines(medicine);
}
Если у каждого лекарства есть особая логика, вы можете использовать полиморфизм, чтобы избежать списка
if (medicine.SomeProp) doSomePropLogic();
if (medicine.SomeOtherProp) doSomeOtherPropLogic();
Пример наследования
interface Medicine {
BeforeBuyLogic();
}
class Antibiotics : Medicine {
BeforeBuyLogic() {
// check doctor subscription
}
}
class StomachMed : Medicine {
BeforeBuyLogic() {
// check customer allergies
}
}