1

私は、業界固有の入力を管理し、その情報をやや複雑な計算やルックアップなどで実行して、一連の他の値と合否の結論を返すデータベースアプリケーションに取り組んでいます。

Entity Framework(プロバイダーに依存しないための最初のコード)とWPF(MVVMパターン)を使用することにしました。POCOエンティティをデータモデルとして使用しており、ビューモデルは基本データ/ビジネスルールの検証などの通常の処理を行っています。

EF + WPF / MVVMは、入力を表示および検証し、それをデータベースに取り込んで、製品、顧客、注文設定などの一般的なビジネスアプリケーションを照会するのに優れているようです。しかし、「計算レイヤー」をどこに接続するかはまったく明確ではありません。ビューモデルとデータモデル(私のPOCO)の間では、物事はすでに少し肥大化していると感じています。そして今、私は他の2つと非常によく似た別のレイヤーを追加することに直面しています。

おそらく、これに取り組む最善の方法は、計算レイヤーを一種のメタビューモデルにし、検証や変更通知などをできるだけ多くプッシュして、より軽い実際のビューモデルで実行することです。

誰かがこのような状況に遭遇しましたか?

編集

私が本当に必要としていたのは、ビューモデルを薄くし、エンティティを強化することでした。そこで、ビューモデルを軽量化し、プロパティ変更通知と基本的な検証をエンティティに移動して直接バインドできるようにし、計算クラスがエンティティを直接消費するようにし、いくつかの基本的なルーチンをエンティティに追加しました。ADMの記事@PeterPorfyへのリンクをありがとう。

検証をエンティティに近づけるために、Fluent Validation(優れた提案@Gloopy!)を使用しました。エンティティにプロパティ変更通知を実装しやすくするために、この手法を採用しました。また、ビューモデルで無限のプロパティラッパーを作成する必要をなくすために(HasChangesプロパティを設定するため)、JoshSmithのPropertyObserverを使用しました。

4

2 に答える 2

1

MVVMはの略Model-View-ViewModelで、モデルレイヤーには、実際のドメインの問題をモデル化するすべてのものが含まれています。

つまり、「計算レイヤー」の意味によって異なります。

それが属する場所にそれを置きます。

実際の操作がドメインエンティティに属している場合は、そのロジックをエンティティに配置する必要があります。貧血ドメインモデルを作成しないでください:

ADMに関するMartinFowlerの記事

DDDはEFコードファーストで完全に機能します。

何かがどのエンティティにも属していない場合は、おそらくそれをサービスとして公開する必要があります。次に、ビューモデルから。を介してそれを使用しますinterface

依存性注入コンテナは、ここでの生活を楽にする可能性がありますが、それがなくても生活できます。

モデルレイヤーであるため、別のレイヤーをプラグインしていません。ビューモデルは、ビューの状態をモデル化し、実際のビジネスオペレーションをエンティティ/サービスクラスに転送するだけで、可能な限り薄くする必要があります。

于 2012-07-07T12:08:05.833 に答える
0

おそらく、計算を処理するためのインターフェイス/オブジェクト(または論理的に分割できる場合はいくつか)を作成し、そのオブジェクトを使用したい場所に渡します。依存性注入フレームワークを使用することでメリットが得られる場合があります。この投稿が役立つ可能性があるため、必要な場所でオブジェクトを明示的にインスタンス化する必要はありません。

また、この投稿では、 FluentValidation.NETについて言及していますが、これは完全には適用されない可能性がありますが、そこから学習/使用するための適切なパターンがいくつかある可能性があります。

于 2012-07-07T08:04:09.513 に答える