Ein Rabattmodell kann logischerweise alles sein , sodass Sie nicht davon ausgehen können, dass Sie alle Fälle im Voraus programmieren können. Auch kann niemand, der Ihre Frage beantwortet, völlig sicher sein, was Sie tatsächlich benötigen. Unter der Annahme, dass Sie die üblichen Rabatte erhalten, die in der realen Welt zu finden sind ...
Eine große Frage ist, ob die Rabatte programmiert werden oder ob Sie möchten, dass Benutzer sie eingeben. Wie oben erwähnt, kann man sie nicht niemals programmieren lassen, aber normalerweise besteht das Ziel darin, die Dateneingabe so zu gestalten, wie es für häufige Fälle der Fall ist, anstatt sie alle zu programmieren. Dies gilt zum Teil auch dann, wenn alle Rabatte von Programmierern erstellt werden.
Martin Fowler erwähnt "Einzelinstanzmethode" in "Analysemuster: wiederverwendbare Objektmodelle" als Teil der Implementierung von "Buchungsregeln" für Buchhaltungssysteme, aber die Regeln scheinen Ihren ziemlich ähnlich zu sein. Ich würde mehr Details geben, aber es ist ein urheberrechtlich geschütztes Werk und
Für eine Benutzeroberfläche müssen Sie entweder relativ einfache Anwendungsfälle entwickeln oder einen Interpreter und einen Abfrage-Builder erstellen. Möglicherweise beides, eines für einfache Fälle und eines für Fortgeschrittene. Wenn Sie einen Interpreter schreiben, ist dies wahrscheinlich ein recht guter Fall für die Verwendung des Interpreter-Musters, da der Code im Vergleich zu einem Parser-Generator relativ einfach ist und die langsamere Analysezeit wahrscheinlich keine Rolle spielt. (Wenn Sie Parser-Generatoren verwenden möchten, lassen Sie sich von mir nicht aufhalten.)
Versuchen Sie jedoch nicht, alles mit einem Dolmetscher zu erledigen - irgendwann programmieren Sie nur noch in Ihrer eigenen, miesen Sprache, also können Sie auch eine echte verwenden. Wenn Ihre interpretierte Sprache Funktionen unterstützt (wahrscheinlich sollte sie das Aufrufen unterstützen - es ist zweifelhaft, sie zu definieren), können diese in einer realen Sprache codiert werden. Gehen Sie nicht weiter, als Sie müssen.
Egal, was Sie tun, irgendwann möchte jemand, dass der Rabatt davon abhängt, ob er innerhalb von 30 Werktagen nach einer Werbeaktion gekauft hat - wobei Werktage nur dann zählen, wenn in der durch die Postleitzahl des Geschäfts oder die des Kunden definierten Region kein Feiertag war Postleitzahl. Versuchen Sie also nicht, das perfekte System im Voraus zu entwerfen - nehmen Sie an, dass Sie manchmal Code für neue Arten von Rabatten schreiben und entsprechend designen müssen.