Logicznie rzecz biorąc, model rabatu może być dowolny , więc nie można zakładać, że można zaprogramować wszystkie sprawy z wyprzedzeniem. Nikt, kto odpowie na twoje pytanie, nie może być całkowicie pewien, czego naprawdę potrzebujesz. Zakładając jednak, że otrzymujesz zwykłe rabaty w prawdziwym świecie ...
Ważnym pytaniem jest, czy rabaty zostaną zaprogramowane, czy też chcesz, aby użytkownicy je wprowadzali. Jak wspomniano powyżej, nigdy nie można ich zaprogramować, ale zazwyczaj celem jest próba wprowadzenia większej ilości danych, tak jak w przypadku typowych przypadków, zamiast programowania ich wszystkich. Dotyczy to do pewnego stopnia, nawet jeśli programiści są wykorzystywani do tworzenia wszystkich rabatów.
Martin Fowler wspomina o „metodzie wystąpienia indywidualnego” w „Wzorcach analizy: modele obiektów wielokrotnego użytku” jako część sposobu wdrażania „Reguł księgowania” dla systemów księgowych, ale reguły wydają się dość podobne do twoich. Podałbym więcej szczegółów, ale jest to dzieło chronione prawem autorskim i
W przypadku interfejsu użytkownika musisz albo wymyślić dość proste przypadki użycia, albo zbudować interpreter i narzędzie do tworzenia zapytań. Możliwe, że jedno i drugie dla prostych przypadków i jedno bardziej zaawansowane. Jeśli piszesz interpreter, jest to prawdopodobnie dość dobry przypadek użycia wzorca interpretera, ponieważ kod jest stosunkowo prosty w porównaniu do generatora analizatora składni, a wolniejszy czas analizy prawdopodobnie nie będzie miał znaczenia. (Jeśli lubisz korzystać z generatorów analizatorów składni, nie pozwól mi Cię zatrzymać).
Nie próbuj jednak robić wszystkiego z tłumaczem - w pewnym momencie programujesz po prostu w swoim kiepskim języku, więc równie dobrze możesz użyć prawdziwego. Jeśli Twój interpretowany język obsługuje funkcje (prawdopodobnie powinien obsługiwać ich wywoływanie - definiowanie ich jest wątpliwe), można je zakodować w prawdziwym języku. Nie idź dalej, niż musisz.
Bez względu na to, co robisz, ostatecznie ktoś będzie chciał, aby rabat był oparty na tym, czy kupił w ciągu 30 dni roboczych od promocji - gdzie dni robocze liczą się tylko wtedy, gdy w regionie nie ma wakacji określonych przez kod pocztowy sklepu lub kod klienta kod pocztowy. Nie próbuj więc z góry projektować idealnego systemu - załóż, że czasami będziesz musiał napisać kod dla nowych rodzajów rabatów i odpowiednio zaprojektować.