5

私は今日この記事を読みましたhttp://dotnetslackers.com/articles/silverlight/Silverlight-3-and-the-Data-Form-Control-part-I.aspxあなたが持っているSilverlightアプリ内でのMVVMパターンの使用についてドメインエンティティと、基本的に実際のエンティティオブジェクトのサブセットである特定のエンティティを表示します。これは明らかに DRY の原則に違反していませんか? もしそうなら、どうすればうまく対処できますか?

4

4 に答える 4

7

個人的には、Dino がそこで行っていることは好きではありませんし、同じ方法で問題に取り組むつもりもありません。私は通常、VM を、フィルタリングされ、グループ化され、ソートされたモデル クラスのコレクションと考えています。私にとっての VM はビューへの直接マッピングであるため、ビューで使用される複数の CollectionView を持つ NewOrderViewModel クラスを作成することがあります (おそらく、顧客用の 1 つの CV と製品用の別の CV で、おそらく両方がフィルター処理されます)。私の意見では、モデル内のすべてのクラスに対してまったく新しい VM クラスを作成することは、DRY に違反しています。必要に応じて派生クラスまたは部分クラスを使用してモデルを拡張し、View 固有の (しばしば計算される) プロパティを追加します。IMO .NET RIA Services は、M と VM のデータを組み合わせた優れた実装であり、クライアントとサーバーの両方で使用できるという追加のボーナスがあります。ディーノは素晴らしい男だ、

于 2009-07-27T21:14:55.187 に答える
2

DRYは原則であり、厳格なルールではありません。あなたは人間であり、差別化することができます。たとえば、DRYが本当に難しいルールである場合、2つの異なる変数に同じ値を割り当てることは決してありません。些細なプログラムでは、値0を含む変数が複数あると思います。

一般的に言えば、DRYは通常データには適用されません。これらのビュー固有のエンティティは、おそらく注目に値するロジックのないデータ転送オブジェクトにすぎません。さまざまな理由でデータが重複する可能性があります。

于 2009-07-27T19:19:46.653 に答える
1

これは、データ転送オブジェクト(DTO)の場合と同じです。

これら2つのオブジェクトタイプのドメインは異なるため、DRYの違反ではありません

次の例を考えてみましょう。

class Customer
{
    public int Age
}

そして対応するビューモデル:

class CustomerViewModel
{
    public string Age;

    // WPF validation code is going to be a bit more complicated:
    public bool IsValid() 
    {
        return string.IsNullOrEmpty(Age) == false;
    }
}

異なるドメイン-異なるネットプロパティタイプ-異なるオブジェクト。

于 2009-07-29T16:14:09.593 に答える
1

I think the answer really depends on what you feel should be in the ViewModel. For me the ViewModel represents the model of the screen currently being displayed.

So for something like a ViewCategoryViewModel, I don't have a duplication of the fields in Category. I expose a Category object as a property on the ViewModel (under say "SelectedCategory"), any other data the view needs to display and the Commands that screen can take.

There will always be some similarity between the domain model and the view model, but it all comes down to how you choose to create the ViewModel.

于 2009-07-28T03:04:46.933 に答える