フロントエンドとバックエンドの間で共通のルールシステムを使用できた人はいますか?
この質問に似ています: クライアント側とサーバー側の検証を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ケースを引き起こします。
この問題に取り組むためのいくつかの成功、失敗、またはより良いテクニックを聞きたいです。
これは制約プログラミングに関連しています。プロローグはそのようなシステムの例です。 prolog http://yieldprolog.sourceforge.net/ のjavascript実装が存在します。次に、prologプログラムを作成して、サーバーとクライアントの両方で使用できます。
別のアプローチは、すべてのロジックをサーバー側に置くことですが、クライアントがajaxを使用してクエリできるAPIとしてそれを公開します。わずかな遅延が発生する可能性があることを除いて、ユーザーにとってはほとんど同じです。
クライアント側でJavaScriptに変換するプログラミングモデルについてはどうでしょうか。 Javascript/JVMの世界に住んでいる場合はscala.js、clrを使用している場合はFable with FableまたはF#with websharperになります。少なくとも、ルールの表現は、クライアントとサーバーの両方で単一のソース言語になります。