web-dev-qa-db-ja.com

PHPでビジネスルールを実装する最良の方法

PHP&MySQL withたくさんのたくさんのカスタムルールを使ってeコマースアプリを書くつもりです。例えば、 "顧客Xに、製品Yにバンドルする場合、製品Yの10%割引を与える "

ビジネスルールエンジン(Javaなど)について聞いたことがあります。ハードコーディングなしで柔軟なビジネスルール機能を実装するつもりですPHPへのあらゆるもの、およびPHP OOPS。

以下の点についてアドバイスをお願いします。

デシジョンテーブル は私の意図する目的に合っていますか?

PHPアプリケーションのルール/ビジネスロジックを再デプロイ/再書き込みせずに変更するにはどうすればよいですか?

6

私はかつて magento を使用していました。これはまさにそれを行っていた(php-mysqlの)eコマースプラットフォームでした。必要な機能を最初から実行するには労力がかかりすぎるため、既成のソリューションを統合する方が適切な場合があります。

上記の回答から:「ビジネスマンがそれらを更新することを忘れてください、彼らは必要なスキルを持っていません。」これは永遠のアドバイスです。人々は過去にそれを試しました、それは常に失敗しました...

ルールをPHP、JavaScript、またはドメイン固有の言語で記述するかどうかに関係なく。要件が十分に複雑な場合(あなたの要件はそうであるようです)、プログラミング言語の表現力のあるものが必要であり、更新するにはプログラミングスキルが必要になります。それらを更新するビジネスマンを忘れて、彼らは必要なスキルを持っていません。

プログラマーがルールを更新する必要がある場合、ルールは既存の言語で記述するのが最適です。既存の言語を使用すると、簡単に理解できる人を獲得できます。たとえば、PHP。

次にハードコーディングのポイントです。 PHPはコンパイル済み言語ではありません。プリコンパイルもされていません。インタプリタは実際にリクエストごとにそれを再解析します。したがって、ビジネスルール定義でファイルを変更すると、すぐに有効になります。アプリケーションのコアとは別にファイルをバージョン管理するか、データベースに保存することもできますが、PHPは実装が最も簡単で、保守が非常に簡単であり、ルールインタープリターが作成するのと同じくらい高速ですPHPでは、顕著なオーバーヘッドが追加されます。

ビジネスルールファイルがトランザクションオブジェクトの外側にあるものに触れないようにするために、いくつかのサンドボックスを使用することをお勧めします(迅速なgoogleは少なくとも2つのPHPの実装を明らかにします)。これは後でいつでも追加でき、気にすることなく開始できます。 PHPを生成するグラフィカル言語を後でデータベースまたは何かに追加することもできますが、実際にはプログラマーが編集する必要があることが繰り返し示されているため、疑わしいリターン(それはセールスポイントかもしれませんが)。

(編集)私が決定表を見たとき、それらは非常に柔軟ではないようです。考えられるすべての基準に対応する列が必要であるため、ルールが複雑になるにつれて、テーブルに必要な列がますます多くなり、とにかく理解するのが難しくなります。

また、eコマースパッケージは無効ではなく、他のさまざまなシステムと統合する必要があることも忘れないでください。ほとんどのショップにはおそらく、すでに完了したトランザクションに関するデータをエクスポートする必要がある会計システムと、出荷する商品に関するデータをエクスポートする必要があるストア管理システムがあり、ソフトウェアショップアカウントを作成して割り当てるライセンスがある場合は、それらを使用します。リダイレクトして支払い確認などを受け取る必要のある別の支払いプロセッサ。これらの場合、ロジックが異なるため、単純なルールはそれをカットしません。あなたが言及したビジネスルールのようにメインコアから独立して、これをPHPで書くことを絶対にサポートする必要があります。

6
Jan Hudec

私自身の目的のために、私は https://github.com/bobthecow/Ruler -プロダクションルールエンジンを検討しました。これはお客様のニーズに適用できます。顧客Xに製品Zをバンドルする場合は、製品Yの10%割引を提供します。

ある種の疑似コードを書いてみます。

Context: your shopping cart items
Rules: cart contains ProductY and ProductZ
Execute: ProductY->discount(10%)
4
Anorgan

送信するデータを決定できるDecision Tables Engineをリリースしました。見てください、多分それはあなたのニーズに合うでしょう。

データを送信し、製品に決定を返すルールのセット(コーディングなし)をセットアップするだけです。また、このルールを他のプロジェクトで再利用できます。

https://gndf.io/

今のところ、PHPで構築されたオープンコードを備えた唯一の無料の意思決定エンジンだと思います。他の無料の代替手段は、他の回答で推奨されていたDrools(Java JBossで動作)です。

1
Andrew Dryga