2017-02-20 5 views
0

.NET/C#/ EF6/WPF/WCFでマルチティアアプリケーションをビルドします。マルチティアアプリケーションのエンティティ状態の変更を管理する場所は?

バックエンドは、データベースにアクセスするためのエンティティフレームワークレイヤを持つmysqlデータベースです。ビジネスロジックレイヤーとファサードレイヤーを使用して、サービスを公開しています。

クライアント側では、WPF/MVVMクライアント。

私は、クライアント(ビュードメイン)、エンティティフレームワーク( "dbドメイン")によって生成されたバックエンド、およびサービスのためのdtoのような3つのモデルを持っています。

クライアント側では、エンティティの状態の変更を追跡しますが、基本的にはEntityState列挙型をSystem.Dataからコピーし、プロパティが変更されたとき、または新しいエンティティが作成されるときに状態を設定します。

例えば、私のサービスの1つはAdd(Entity e)Update(Entity e)です。

私は、クライアント上での一つの方法または別のを呼び出すための意思決定を取る必要があります(状態がAddedModifiedであれば、彼は知っている)か、私はAddOrUpdate(Entity e)という単一のメソッドを公開し、それが新しいまたは更新エンティティの場合、バックエンドが決定させる必要があります?

これにはどのような方法が最適ですか?それに関してクライアント側かバックエンド側の決定を下すべきですか?

+0

マルチレイヤアプリケーションがあり、データアクセスレイヤデータアクセス層の行の状態を検証して制御する必要がありますが、エンティティの制御状態(データセット状態など)は必要なく、すべての変更をコミットするために変更を保存することができますが、あなたはファサードでそれを制御することができますし、どのデータアクセス方法やルールレイヤを最も呼び出すかを決定します –

+1

もっと重要なのは、クライアントが変更の追跡をまったく行うべきかどうかです。技術的には、クライアントは常に古いデータを持っているので、クライアントがそれを知らなくても、各データポイントは潜在的に「変更」されます。サーバーだけが現在の状態を比較するように調整されています。また、サービスは各クライアントを正しく行うことができないため、常に変更を確認/検証する必要があります。 –

+0

状態をきれいに制御するには2通りの方法があります。あなたはファサードの状態を制御することができますし、ルールレイヤーとルールコールを呼び出す必要がある場合はデータアクセスレイヤーを呼び出す必要がある場合、プレゼンテーションレイヤーにエラーを返す必要がある場合は、ルールまたはデータアクセスレイヤーに移動する必要はありません... 2.別の方法この種の状況を確認するためにhttpモジュールを使用することができます。この場合、偽のサービスコールはありません... –

答えて

1

なぜクライアントがオブジェクトの状態を知りたいのかわからないのか分かりません。
両方のメソッドで「Entity」クラスを再利用するため、おそらく問題が発生しています。上記のいずれもが「国家」プロパティ*を持つべきではない

Add(InputResource e) 
Update(UpdateResource e) 

私はあなたがこのようなものを使用することができると思います。
"InputResource"にはId/Primary Keyが含まれていてはいけません

私は上記のアプローチがより洗練されていると思っていますが、あなたのニーズによって異なります。
"AddOrUpdate"と一緒に行きたいと思えば、私はまだ状態を追加することは良いアイデアだとは思わない。
Idプロパティが設定されている場合、そのプロパティが更新されていないかどうかを確認できます。追加

*もちろん公開APIについて話しています。
あなたのサーバ(BusinessLayer-DataLayer)には、状態に基づいてアイテムを処理するソリューションがあるかもしれませんが、これについては考えていません。

関連する問題