web-dev-qa-db-ja.com

ルールエンジンを使用してビジネスルールのクライアント側とサーバー側の検証を管理していますか?

フロントエンドとバックエンドの間で共通のルールシステムを使用できた人はいますか?

この質問に似ています: クライアント側とサーバー側の検証を1か所で管理 、フロント(JS)とバックエンド(Java)に一貫したビジネスルールを適用する方法を見つけようとしています)。この質問とは異なり、私は一般的なクロスプラットフォームのフィールド検証システムには興味がありません(フィールドの長さを検証するつもりはありません)。

ビジネスルールの例は次のようになります。

ユーザーの年齢が18歳未満の場合は、保護者のメールアドレスが必要です。

この場合、フォームフィールドのnull入力可能性は、フォームの別の部分からの入力に基づいて変化します。

システムが許可するように:

{"user":"Bob","age":33}

{"user":"Carol","age":15,"parent_email":"[email protected]"}

しかし否定する:

{"user":"Alice","age":16}

Drools のようなルールエンジンは、バックエンドでビジネスルールを作成および適用できますが、JVM(またはCLR)でのみ可能です。

デフォルトの解決策は、2つの異なるルールのセットを使用しているように思われます。これらのルールは同期を維持することができず、あらゆる種類の検証問題とEdgeケースを引き起こします。

この問題に取り組むためのいくつかの成功、失敗、またはより良いテクニックを聞きたいです。

5
Sherman

これは制約プログラミングに関連しています。プロローグはそのようなシステムの例です。 prolog http://yieldprolog.sourceforge.net/ のjavascript実装が存在します。次に、prologプログラムを作成して、サーバーとクライアントの両方で使用できます。

別のアプローチは、すべてのロジックをサーバー側に置くことですが、クライアントがajaxを使用してクエリできるAPIとしてそれを公開します。わずかな遅延が発生する可能性があることを除いて、ユーザーにとってはほとんど同じです。

3

クライアント側でJavaScriptに変換するプログラミングモデルについてはどうでしょうか。 Javascript/JVMの世界に住んでいる場合はscala.js、clrを使用している場合はFable with FableまたはF#with websharperになります。少なくとも、ルールの表現は、クライアントとサーバーの両方で単一のソース言語になります。

1
Bohdan Szymanik