2009-02-20 8 views
16

Ich bin dabei, die Anforderungen eines Kunden nach einer Preisfindungs-Engine in einer Einzelhandelsumgebung zu ermitteln. Wir haben die Pricing-Engine so definiert, dass sie nach einer Reihe von Preisregeln arbeitet, die neue Preispunkte für gekaufte Artikel basierend auf vorhandenen Artikeln, die sich bereits im Warenkorb befinden, festlegen.Entwurfsmuster und Algorithmen zum Anwenden von Regeln auf Fakten

Eine einfache Preisregel könnte sein HEMDEN 40% OFF. Eine komplexere Regel könnte sein ERHALTEN SIE EIN FREIES SHIRT, WENN SIE 2 HOSEN KAUFEN UND MINDESTENS $ 30 SPENDEN.

Die allgemeine Praxis für die Anwendung dieser Regeln scheint der endgültige Bestpreis für den Kunden zu sein, aber es hat sich gezeigt, dass es möglicherweise eine Ranking-Option sowie eine Stapeloption sein muss.

Ranking wird eine Regel erlauben, die sonst verlieren würde zu gewinnen. Durch das Stapeln können mehrere Regeln gewonnen werden.

Ich habe viele der Beiträge hier auf SO in Bezug auf Regel-Engines überprüft und ich brauche Hilfe bei der Bestimmung, ob ich eines dieser Tools als Teil meines Designs betrachten sollte oder wenn nicht, welche Designmuster und Algorithmen anwendbar sein könnten das Design.

Es ist klar, dass dies möglicherweise ein NP-Problem ist, und die Anzahl der Artikel (Fakten), die ich behandeln werde, könnte mehr als 100 pro Transaktion mit Repricing jedes Mal, wenn ein neues Element hinzugefügt wird.

+1

Neugierig, welche Methode haben Sie am Ende gehen mit? War es die richtige Wahl? –

+0

Wir haben unsere eigene Regel-Engine erstellt, die eine Vielzahl von Techniken zur Lösung des Problems verwendet hat. Ich habe hier keine Informationen, die ich aus dem Stegreif teilen könnte, da dies vor über 7 Jahren gelöst und umgesetzt wurde. Wir verwendeten einen Lokalisierungsansatz und gewichteten die Lokalisierungen. Wir haben dann einen Algorithmus mit der geringsten Kostenverteilung verwendet, um die beste Kombination von Preisabschlüssen zu ermitteln. Die fertige Arbeit stellte sich als eines meiner Lieblingsprojekte heraus - wir schrieben es als eigenständiges Modul, das auch an anderen Orten verwendet werden konnte. Regeln + Eingabesatz -> Preisgesteuerter Ausgabesatz. – Bill

Antwort

2

Eine Regelmaschine ist sehr geeignet. Wenn die Regel-Engine zuverlässig ist, sich in den Rest Ihrer Architektur/Anwendung einfügt und für eine Kernfunktion Ihrer Anwendung benötigt wird, dann gehen Sie dafür.

Wenn die Regel-Engine ist nur ein kleiner Teil Ihrer Anwendung oder noch schlimmer: ist etwas Code, der nicht die gleiche Programmiersprache ist als der Rest Ihrer Anwendung ... dann sollten Sie es noch einmal überdenken. Jeder Anwendungsteil, der extern von Ihrer Kernanwendung ist (selbst wenn die Datenbank außerhalb einer Java-Anwendung ist), ist ein Risiko.

Dann gibt es zwei Möglichkeiten: Programmieren Sie eine einfache Regelengine oder verwenden Sie die Strategie oder das Zustandsmuster.

5

Es gibt einen schönen Artikel von Martin Fowler über Rules Engine und wo man sie verwenden kann. Sehen Sie, wenn hilft

http://www.martinfowler.com/bliki/RulesEngine.html

+0

Ich untersuche das. Ich habe sein Arbeitsvolumen gelesen, bin aber in letzter Zeit nicht durch sein Online-Material gegangen. – Bill