2 つの問題があります。条件のモデル化と、DB への保存です。
条件のモデル化: 既存のスクリプト言語モデルなどを使用できれば、おそらく簡単です。できない場合は、次のような条件をモデル化できます。 interface Expression { public T Evaluate(Context context); } クラス OrExpression : 式 { Expressionleft; 表現権; } クラス AndExpression : 式 { Expressionleft; 表現権; } class IfExpression : Expression { Expressioncondition; } ExpressionthenClause; ExpressionelseClause; } クラス EqualExpression : 式 { 式が左に; } 表現権; } class ContextVariableValue : 式 { }
「クライアントがすでに少なくとも 2 か月間サインアップしており、購入中に注文額が 150 ドルを超えた場合、または製品 A または B がすでにショッピング カートに入っている場合は、この広告を表示してください。」</p>
そのようなものになります:
var clientIsAlreadySignedUpFor2Months = new GreaterThanExpression(new ContextVariableValue("ClientSignedUpLengthInMonths"), new ConstantExpression(2)); var purchaseExceeds150 = new GreaterThanExpression(new ContextVariableValue("PurchaseAmount"),new ConstantExpression(150)); new IfExpression(new ) )
var result = new AndExpression(clientIsAlreadySignedUpFor2Months, purchaseExceeds150 など...)
それをDBに保存するには、それらをテキストなどの方程式にシリアル化してから解析するか、次のようなものを使用できます
条件 Id タイプ ParametersType Operand1 Operand2 1 GreaterThanExpression 数値 2 3 2 ContextVariableValue 数値 ClientSignedUpLengthInMonths null 3 ConstantExpression 数値 2 null
等...
私はあなたの最善の策は、すべての広告を条件付きでメモリにプリロードし、追加を表示するたびにそれらを実行することだと思います...
多くの追加に「類似した」条件があることを検出した場合は、ロジックを追加して、それらの条件を一度だけ評価したり、速度を上げたりすることができます...