0

管理者はプロモーションコードを作成し、事前定義されたルールのリストから選択します。ルールは次のような制約です。

  • マックスは使用します
  • 有効期限
  • 最小カート小計

これらのルールをコードに直接ハードコーディングすることも、ビジネスロジックをデータベーステーブルに格納してその場でコンパイル/実行することもできます(したい)。各ビジネスルールは比較的単純であり、Web管理者を介して新しいルールを作成できます。コードロジックをある程度検証するために、上記のルールの作成に関するいくつかのテストを作成できると思います。

ルールロジックをデータベースに保存するのは本当に悪い考えですか?

これらすべてのルールをハードコーディングし、新しいルールが追加されるたびに再コンパイルするのはばかげていると思います。

注:私はそれSystem.CodeDomが私のためにその場でコンパイルを行うだろうと読んだ。

4

2 に答える 2

0

「C# で記述されたコードをプレーン テキストとしてデータベースに保存する」という意味であれば、その場でコンパイルします。はい、それは悪い考えです。コードをデータとして保存するプロジェクトに数年間携わってきた経験から、これは後悔する決定であると断言できます。

それが悪い考えである最も重要な理由は、コードをデータに変換すると、このコードが結合する可能性のあるインターフェイス/クラスを決して変更できないことです。これは、後で気になる可能性のあるすべての機能を今すぐ予測してサポートできるようにすることを意味しますが、これは非常に困難です. このカスタム コードは、バグが多く、遅く、デバッグが難しい場合もあります。

アップデート:

この問題を解決する方法は他にもあります。これを調べる 1 つの方法は、RuleSpecificationオブジェクトをデータベースに格納することです。これは、型とそれらの型のパラメーターのリストと同じくらい単純かもしれません。それらを Web UI で構成する限り、ハードコーディングされた制約を選択し、そこでパラメーターを構成できるようにすることから始めます (ExpirationDataRuleたとえば、 のデータを設定します)。これで十分でしょう。

于 2012-11-13T04:38:51.570 に答える
0

ルールをスクリプト言語で表現し、プロモーション コードを追加する際にルールを解釈してみませんか?

詳細

コンパイルが必要なコード (C# など) を格納する代わりに、ルールをバックグラウンドで JavaScript として表現します (必要に応じて別のスクリプト言語を使用することもできますが、JavaScript はどこにでもあります)。次に、.NET JavaScript 実装 (JScript または使用可能なオープン オプションの 1 つ) を使用して、JavaScript を評価します。したがって、js は次のようになります。

promo.timesUsed < 5 && cart.total >= 35.00

JScript.Net や Java の Rhino などの Javascript ブリッジは、通常、ランタイム オブジェクトを取得し、それらをスクリプト コンテキストに公開する機能を提供します。したがって、上記の例では、スクリプト コンテキストに公開する C# オブジェクトになりますpromocartここで考慮しなければならないのは、スクリプト コンテキストに公開するオブジェクトだけです。スクリプト テキストを何らかの eval メソッドに渡し、ブール値を取得します。あらゆる種類のルールを作成でき、利用可能なデータによってのみ制限されます。

于 2012-11-13T04:43:47.437 に答える