5

まず、長い闘争の末に MVVM パターンの本質を把握できていないことを恥ずかしく思い、質問せずにはいられません。

MVVMについて検索して検索しましたが、私には明らかな(そう思われる)レイヤーは、ViewおよびViewModelレイヤーのみです。

だから、ここに私が今まで把握してきたことをいくつかの小さな例で示します.参考までに、私はMySQLクエリを使用してデータを取得しています:

モデル

ここで何をすべきかは私には不明です。私はEmployee.csのこのクラスを持っています:

class Employee
{
    public string Id { get; set; }
    public string Name { get; set; }
    public string Gender { get; set; }
}

私の質問: EmployeeModel クラスの MySQL データベースからデータを取得するクエリを実行する必要がありますか? この回答について、データ アクセス レイヤーは MVVM のモデルとは別のものであると読みました。さらに、リポジトリを使用して、データ アクセス レイヤーから従業員のリストを要求できます。

その答えに基づいて、次のようになります。

  • Employee.cs [オブジェクトのプロパティ定義]、
  • EmployeeDataAccess.cs [MySQL から従業員データをフェッチする責任があります]
  • EmployeeRepository.cs [EmployeeModel によって呼び出され、DA から従業員データを取得します]
  • EmployeeModel.cs [検証などのビジネス ロジックを処理し、Employee.cs とほぼ同じプロパティで INotifyPropertyChanged を使用する場所]
  • EmployeeViewModel.cs [EmployeeView のデータ コンテキスト]
  • EmployeeView.cs [XAML]

従業員リストの 1 ページのすべてが間違っていますか?

長い質問で申し訳ありませんが、私が何か間違ったことを言った場合は、喜んで修正します.

現時点では本当に無知なので、新鮮な視点があれば大歓迎です。

4

3 に答える 3

6

よし、見てみましょう:

  • EmployeeDataAccess.cs と EmployeeRepository.cs、データを取得してモデル クラスを返す 'EmployeeRepository' などの 1 つのクラスに組み合わせることができます (必ずしもそうとは限りませんが、以下を参照)。
  • 「EmployeeModel」は実際にはビュー モデルであるため、「EmployeeViewModel」クラスを削除し、「EmployeeModel」の名前を「EmployeeViewModel」に変更できます。
  • この点は、自分の好みによって異なりますが、クラスごとのリポジトリではなく、一般的なリポジトリを使用できます。このような場合、Repositoryすべてのデータ モデルに対して汎用の CRUD メソッドを持つ 1 つのクラスを作成します。

次に、次のようになります。

  • すべてのデータ モデル クラスは、独自のビュー モデルとビューを取得します (エンティティごとに 3 つのクラスです)。
  • ビューモデルで呼び出されて結果がマップされるか、リポジトリを呼び出してマッピング(モデル<==>ビューモデル)を行うビューモデルで使用される別の薄いレイヤーを導入できます。一度に。

悪くないですよね?:)

考えすぎたり、ソリューションを過度に設計したりしないでください。単純なアプリケーションに 300 の異なる間接レイヤーを含めることは、IMO では無意味です。アプリケーションが成長し、別のレイヤーが正当に必要な場合は、必要に応じてそれらを開発できます。

[編集]もちろん、「モデル」クラスは同時にエンティティクラスであると想定しました。軽量のものも含め、あらゆる種類のORMに付属しています(Dapperが思い浮かびます)。

于 2013-02-08T10:44:40.280 に答える
1

さて、あなたは基本的にそれをカバーしました。通常、私はMVVMと一緒にN層モデルを使用するので、あなたの場合は次のようになります:

  • PersonOverview (xaml)
  • PersonOverviewViewModel (人物概要のビューモデル)
  • BcPerson (BLL には必要に応じてビジネス ロジックが含まれます)
  • PersonRepository (DAL はデータベースと通信します)

また、人物クラスを含む DOMAIN レイヤー ウィッチもあります。そこでは、すべてのプロパティに対して NotifyPropertyChanged を使用します。

多くのファイルであることに同意しますが、目的があります。それらは、レイヤーを変更する場合 (たとえば、MySQL から MSSQL に移動する場合) に、より優れた保守性、懸念事項の適切な分離、および柔軟性のために使用されます。

また、OR マッパーなどを使用して、多くの配管を生成することもできます。

于 2013-02-08T10:46:45.993 に答える
0

ファイル

  • リポジトリ[データを取得]
  • 従業員[名前などのデータが含まれています]
  • EmployeeVM[「従業員」モジュールを含む]
  • EmployeeListVM[ListVM から継承]
  • ListVM[リストのベース ViewModle]
  • EmployeeListV[あなたの見解]

サンプル:

  • いくつかのボタンが押されました
  • EmployeeListVMコンストラクターが呼び出されます
  • Repositoryを求めるgetAllEmployee()_List<EmployeeVM>
  • これを ListVM プロパティ "ItemList" にオーバーハンドします。

    EmployeeListV.Datacontextビューとビンを表示するだけで済みます。EmployeeListVM

于 2013-02-08T11:12:46.270 に答える