.NET/C#/ EF6/WPF/WCFでマルチティアアプリケーションをビルドします。マルチティアアプリケーションのエンティティ状態の変更を管理する場所は?
バックエンドは、データベースにアクセスするためのエンティティフレームワークレイヤを持つmysqlデータベースです。ビジネスロジックレイヤーとファサードレイヤーを使用して、サービスを公開しています。
クライアント側では、WPF/MVVMクライアント。
私は、クライアント(ビュードメイン)、エンティティフレームワーク( "dbドメイン")によって生成されたバックエンド、およびサービスのためのdtoのような3つのモデルを持っています。
クライアント側では、エンティティの状態の変更を追跡しますが、基本的にはEntityState
列挙型をSystem.Data
からコピーし、プロパティが変更されたとき、または新しいエンティティが作成されるときに状態を設定します。
例えば、私のサービスの1つはAdd(Entity e)
とUpdate(Entity e)
です。
私は、クライアント上での一つの方法または別のを呼び出すための意思決定を取る必要があります(状態がAdded
かModified
であれば、彼は知っている)か、私はAddOrUpdate(Entity e)
という単一のメソッドを公開し、それが新しいまたは更新エンティティの場合、バックエンドが決定させる必要があります?
これにはどのような方法が最適ですか?それに関してクライアント側かバックエンド側の決定を下すべきですか?
マルチレイヤアプリケーションがあり、データアクセスレイヤデータアクセス層の行の状態を検証して制御する必要がありますが、エンティティの制御状態(データセット状態など)は必要なく、すべての変更をコミットするために変更を保存することができますが、あなたはファサードでそれを制御することができますし、どのデータアクセス方法やルールレイヤを最も呼び出すかを決定します –
もっと重要なのは、クライアントが変更の追跡をまったく行うべきかどうかです。技術的には、クライアントは常に古いデータを持っているので、クライアントがそれを知らなくても、各データポイントは潜在的に「変更」されます。サーバーだけが現在の状態を比較するように調整されています。また、サービスは各クライアントを正しく行うことができないため、常に変更を確認/検証する必要があります。 –
状態をきれいに制御するには2通りの方法があります。あなたはファサードの状態を制御することができますし、ルールレイヤーとルールコールを呼び出す必要がある場合はデータアクセスレイヤーを呼び出す必要がある場合、プレゼンテーションレイヤーにエラーを返す必要がある場合は、ルールまたはデータアクセスレイヤーに移動する必要はありません... 2.別の方法この種の状況を確認するためにhttpモジュールを使用することができます。この場合、偽のサービスコールはありません... –