За логікою, модель знижок може бути будь-якою , тому ви не можете припустити, що ви можете запрограмувати всі справи заздалегідь. Також ніхто не може відповісти на ваше запитання, щоб бути повністю впевненим, що вам насправді потрібно. Однак якщо припустити, ви отримуєте звичайні види знижок у реальному світі ...
Велике питання - чи будуть запрограмовані знижки, чи ви хочете, щоб користувачі їх вводили. Як згадувалося вище, ви ніколи не можете їх запрограмувати, але зазвичай мета полягає в тому, щоб спробувати зробити це більш введенням даних, як для звичайних випадків, а не програмувати їх усі. Це стосується певної міри, навіть якщо програмісти використовуються для створення всіх знижок.
Мартін Фаулер згадує "Індивідуальний метод екземпляра" у "Шаблонах аналізу: об'єктні моделі багаторазового використання" як частину того, як реалізувати "Правила розміщення" для облікових систем, але правила здаються досить схожими на ваші. Я детальніше розповім, але це захищені авторським правом та
Для користувальницького інтерфейсу потрібно або придумати випадки використання, які є досить простими, або ж побудувати інтерпретатора та конструктора запитів. Можливо, і те, і інше для простих випадків і ще одне просунуте. Якщо ви все-таки пишете інтерпретатора, це, ймовірно, досить хороший випадок для використання інтерпретаційного шаблону, оскільки його відносно просто кодувати в порівнянні з генератором парсера, і більш повільний час розбору, ймовірно, насправді не має значення. (Якщо вам подобається використовувати генератори парсера, не дозволяйте мені зупиняти вас).
Не намагайтеся все робити з перекладачем - у якийсь момент ви просто програмуєте на своїй власній крихтій мові, тому ви можете також використовувати справжню. Якщо ваша інтерпретована мова підтримує функції (вона, ймовірно, повинна підтримувати їх виклик - визначення їх є сумнівним), вони можуть бути закодовані справжньою мовою. Не йдіть далі цією дорогою, ніж вам доводиться.
Незалежно від того, що ви робите, врешті-решт хтось захоче, щоб знижка ґрунтувалася на тому, чи купували вони протягом 30 робочих днів після просування - де робочі дні рахуються лише в тому випадку, якщо в регіоні не було відпустки, визначеної або поштовим індексом магазину, або клієнтом Поштовий індекс. Тому не намагайтеся заздалегідь розробити ідеальну систему - припускайте, що вам іноді потрібно буде писати код для нових видів знижок та оформляти відповідно.