web-dev-qa-db-ja.com

クライアント/サーバーの責任分担

さまざまなタイプのクライアント間でロジックを書き換える必要がないように、サーバーアプリケーションにできるだけ多くの責任を与えることは理にかなっています。

私の場合、人間関係(母親、父親、姉妹、兄弟など)を表すデータ構造を開発しています。その目的は、データ構造を照会し、2人の間の関係のチェーン(ある場合)を取得することです。

私は最終的には、文化や言語によって一貫していない種類の関係をサポートしたいと考えています。たとえば英語では、祖母と祖父だけが存在し、他の言語と同様に、これらはどちらの親の側にいるかという観点で表現できます。

クライアントとサーバーでサービスの責任をどのように分割するかわかりません。

サーバーは文化に依存しない関係チェーンを返す必要がありますか?それは、母、父、息子、娘のような単純な関係をクライアントにのみ使用していて、クライアントに文化固有の変換を処理させますか?この場合、サポートしたい文化に合わせて、JavaScriptでクライアント変換ライブラリをいくつか開発します。 xamarin-appで私のサービスを使用したい場合は、C#で変換ロジックを書き換える必要があります。

または、サーバー上ですべてを行う必要がありますか?このオプションを使用すると、他のデータ(カルチャー固有の関係)を表すことができるデータ(カルチャーに依存しない関係)を返し、クライアントに適切と思われる変換を実行するだけで十分ではないかと思います?一方、変換にはかなり多くのロジックが含まれます...

それとも両方持っているべきですか?つまり、サーバー上で、文化に依存しない関係チェーンと、私がサポートしたいいくつかの文化固有の関係を提供します。このように、APIでサポートされていない種類の関係がある場合、誰かが文化に依存しない関係チェーンを取得し、独自の変換を行うことができます。

さまざまなアプローチで他の長所/短所を考えている場合は、ぜひ聞いてください。

より良いアプローチとは何ですか?なぜですか?

4
Tagor

説明されているケースは、論理プログラミングとグラフベースのデータ構造を使用するのに理想的です。あなたには2つの部分があります:最も基本的な形式の関係(結婚、離婚、出産などの基本的な事実を含む-それらには良い標準的なオントロジーがあると思います)、およびそれらの関係を「呼び出す」方法に関するルール。

私はあなたの「クライアント」がどのように制約されているか、そしてそれがそれ自体で推論を実行できるかどうかはわかりませんが、ファクトとルールが整ったら、推論エンジンが泥臭い文化的ケースでも事実を推論するのは非常に簡単です(裏付けとなる事実がある場合)。

カルチャー固有の知識の一部のみが使用されることがわかっている場合は、ナレッジベースをカルチャーごとに1つのモジュールにすることもできます。これは、推論がより速く発生する可能性があることを意味します。

ナレッジベースアプローチを使用する良い点は、すべての知識が統一された形式であり、機能するファクトをさらにロードするだけで拡張できることです(たとえば、セマンティックWebの発話では、新しいトリプルまたはトリプル付きのグラフを追加するだけです)。非常に一般的な推論エンジン(おそらく、いくつかのライブラリーの形で見つけることもできます)。

したがって、APIは、事実(特定の個人の周り)とルールのパッケージ(ルールのセット全体がアプリケーションのクライアント側に適合しない場合、私はそうではない)を要求するように煮詰めます。

ユーザークエリがあるかどうかはわかりませんが、推論エンジンは簡単に双方向で機能できます。複雑な関係をより小さなもので構成されているものとして「理解」し、基本的な関係を前提として複雑な関係を識別する:それは単に目標に依存します。私が見たすべてのプロローグに関する本は、導入例として家族関係を使用しています。

1
Roman Susi

REST(HTTP)にはコンテンツネゴシエーションの概念があります。クライアントはサーバーにリソースのコンテンツタイプを要求し、サーバーが受け入れるコンテンツタイプのタイプをサーバーに通知することもできます。クライアントとサーバーは、データを返すのに最適な形式を見つけることができます。

したがって、定義したカスタムコンテンツタイプを介して、これらの関係リソースの非常に具体的な表現をサポートできます(ベンダーおよび未登録のコンテンツタイプを参照してください https://en.wikipedia.org/wiki/Media_type#Vendor_tree )。

また、クライアントが特定の表現をサポートしていない場合に、クライアントがフォールバックできる非常に一般的な形式にすることもできます。

これにより、両方の長所が得られ、特定の表現をサポートできます。1つを見逃すと、クライアントが機能しなくなることを心配する必要はありません。

1
Cormac Mulhall