您有兩個問題:對條件建模,並將它們存儲在數據庫中。
建模條件:較容易的很可能是,如果你可以使用現有的腳本語言模型,或者類似的東西。如果你不能模擬如下條件: interface Expression public T Evaluate(Context context); } class OrExpression:Expression { Expressionleft; Expressionright; } class AndExpression:Expression { Expressionleft; Expressionright; } class IfExpression:Expression { Expressioncondition; ExpressionthenClause; ExpressionelseClause; } class EqualExpression:Expression { Expression left; 表達權; } 類ContextVariableValue:表達 { }
「IF至少2個月,並在購買時客戶已經簽署了他的訂單價值超過$ 150或產品A或B已經在他的購物車然後告訴他這則廣告」
將是類似的東西:
VAR clientIsAlreadySignedUpFor2Months =新GreaterThanExpression(新ContextVariableValue( 「ClientSignedUpLengthInMonths」),新的常量表達式(2)); var newExceeds150 = new GreaterThanExpression(new ContextVariableValue(「PurchaseAmount」),new ConstantExpression(150)); 新IfExpression(新))
VAR的結果=新AndExpression(clientIsAlreadySignedUpFor2Months,purchaseExceeds150,等...)
若要將其存儲在數據庫中,你可以將它們序列化到像文本一些公式,然後分析它們或者你可以使用類似
條件 ID類型ParametersType OPERAND1 Operand2中 1 GreaterThanExpression數量1 2 3 2 ContextVariableValue數ClientSignedUpLengthInMonths空 3常量表達式2號空
等等
我認爲最好的方法,就是提前下載所有他們在內存條件advertisments,並運行它們,你可以顯示一個附加每次...
如果您檢測到許多添加有「相似」的條件,那麼你可以添加一些邏輯來只評估一次這些條件,以加快速度等等...
我同意這會更簡單和容易。但是我仍然擔心這是否是正確的方式(存儲sql子句)。 – 2012-07-10 13:36:25
'存儲'這也可以被視爲'創造'一個觀點:) – Randy 2012-07-10 13:38:31