2017-01-31 18 views
0

2つのアプリケーションを構築します。 WPFで1つ、ASP.MVCで2つ目。私は、データベースとアプリケーションの間のレイヤーになるWebサービスを作成することに決めました。私は自分のアプリでエンティティモデルを使用したくありません。軽量モデルを作成してWebサービスに送信し、エンティティモデルに変換する必要があります。私の質問は、WPFとMVCの共通モデルを作成する方法です。 MVCのデータ注釈属性を使用し、WPFのINotifyPropertyChangedインターフェイスも実装したいので、これを行う方法はわかりません。他にも思うことがあります。それを行うための良いアプローチがありますか?それとも不可能ですか?WPFとASP.NET MVCの共通モデル

+0

INotifyPropertyChangedのは、WPF(またはUI)関連のインターフェイスではありません。デスクトップおよびWebプロジェクトと一般的なモデルおよびエンティティオブジェクト用に異なるviewModelクラスを作成します。 –

答えて

0

まずはエンティティクラスをDALの外に公開することには何も問題ありません。彼らはただのクラスです。彼らには特別なものは何もありません。彼らがデータベースにするものは、DbContextクラスに含まれています。実際には、すべての注釈やその他の設定を流暢な設定を使ってコンテキストに移して、そこに外的な影響を与えることなく素朴なクラスを持つことができます。

また、エンティティクラスにあまりにも多くの設定を追加する傾向があります。データベースレベルで重要なものはです。ポストでどのようにプロパティを検証するべきかを指示するようなものは、エンティティクラスでは不適切です。[EmailAddress]

つまり、[EmailAddress]などのビュー固有のものを配置する場所はビューモデルにあります。あなたの混乱の残りの部分をかなりクリアするはずです。 INotifyPropertyChangedを実装する必要がありますか?ビューモデルでそれを行います。エンティティデータとエンティティデータのマッピングを行います。

はちょうど私が何人かの人々がそう見てきたように行うと、単にあなたのアプリにある場所から別の場所にデータを転送するために、基本的にはあなたのエンティティクラスの正確なコピーだDTOクラスを作成しないでください。これは役に立たず、メンテナンスや追加作業を追加するだけで、アプリは何のメリットも払わずに実行する必要があります。エンティティクラスはDTOです。あなたのサービスからそれを返し、あなたのビューモデルにマップします。完了しました。

ただ、最後のビットを明確にするために、あなたのWPF/MVCのアプリには関係のクラスは、そのビューモデルであるべきであり、それらのアプリに固有になります。 WPFで必要とされるもののロジックとWPFアプリケーションに属するエンティティデータのマッピング方法最初の場所でデータを取得を気にするはずのいくつかのサービスで作成されるようにWPFのアプリでdirectyを使用するために、クラスのインスタンスを作成するコードを持っているために、100%不適切です。これは、単一責任の原則に違反します。それぞれのことを、それがするように設計されたものにしましょう。言い換えれば、WPFコードでWPFコードを保持します。あなたはまだ、データ層とあなたのWPFのビューモデルの間のマッピングを扱ういくつかのライブラリを持つことができ、それは、あなたのWPFアプリケーションに依存になり、別のものでなければなりません。

関連する問題