これは私がしばらく行ったり来たりして検索して何も見つかりませんでした質問です:バックボーンのようなフレームワークを使用しているときに、Webアプリケーション用のJavascriptでドメインモデルを複製することに関して受け入れられているプラクティスは何ですか?またはノックアウト?
サーバー側に一連のドメインモデルを持つ重要なサイズのWebアプリケーションがある場合、これらのモデルをWebアプリケーションに複製する必要がありますか(下部の例を参照)。または、動的な性質を使用してこれらのモデルをサーバーからロードする必要がありますか?
私の考えでは、モデルを複製するための議論は、フィールドの検証を容易にし、存在すると予想されるフィールドが実際に存在することを保証することなどです。私のアプローチは、クライアント側のコードをほとんど別のアプリケーションのように扱い、些細なことをすることですそれ自体、データと複雑な操作(クライアント側にはないデータを必要とする)をサーバーに依存しています。クライアント側のコードをこのように扱うことは、ORMのエンティティとUIレイヤーのビューで使用されるモデルを分離することに似ていると思います。それらは同じフィールドを持ち、同じドメインの概念に関連しているかもしれませんが、それらは別個です事。
一方、サーバー側でこれらのモデルを複製することは、DRYの明らかな違反であり、クライアント側とサーバー側で異なる結果をもたらす可能性があるように思えます(一方が更新されても、もう一方は更新されません) )。このDRYの違反を回避するには、JavaScriptのダイナミズムを使用して、必要なときにサーバーからフィールド名とデータを取得します。
それで、これらの状況で自分自身をいつ繰り返すか(そうでない場合)について、認められたガイドラインはありますか?または、これはプロジェクトと開発者に基づいた純粋に主観的なものですか?
例
サーバー側モデル
class M
{
int A
DateTime B
int C
int D = (A*C)
double SomeComplexCalculation = ServiceLayer.Call();
}
クライアント側モデル
function M(){
this.A = ko.observable();
this.B = ko.observable();
this.C = ko.observable();
this.D = function() { return A() * C(); }
this.SomeComplexCalculation = ko.observalbe();
return this;
}l
M.GetComplexValue = function(){
this.SomeComplexCalculation(Ajax.CallBackToServer());
};
この質問はこれと非常に似ていると思いますが、これはサーバーからWebアプリケーションをほとんど完全に切り離すことに関するものだと思います。この質問は、複雑な計算の場合にのみこれを行うことに関するものです。
M.getComplexValue()
、すべての操作を(場合によっては)非同期にすることを許可しながら、コールバック地獄を最小限に抑える方法として、「Promise」パターンを検討することをお勧めします。