ドメインエンティティを持ち、基本エンティティが実際のエンティティオブジェクトのサブセットであるシルバーライトアプリケーション内で、MVVMパターンの使用についてこの記事を今日読んだのはhttp://dotnetslackers.com/articles/silverlight/Silverlight-3-and-the-Data-Form-Control-part-I.aspxです。これはドライ原則の明確な違反ではありませんか?もしそうなら、あなたはそれをどうやってうまく処理できますか?Model-View-ViewModelパターンのDRY違反ですか?
答えて
個人的には、私はディーノがそこでやっていることが好きではなく、私は同じように問題にアプローチしません。私は通常、モデルクラスのフィルタリング、グループ化、ソートされたコレクションとしてVMを考えています。私のVMはViewへの直接マッピングです。そのため、ビューで使用される複数のCollectionViewを持つNewOrderViewModelクラスを作成することがあります。私の意見では、モデル内のすべてのクラスに対してまったく新しいVMクラスを作成することはDRYに違反します。むしろ、View固有の(しばしば計算される)プロパティを追加して、必要に応じてモデルを補強するために派生クラスまたは部分クラスを使用したいと思います。 IMO .NET RIA Servicesは、MとVMのデータを、クライアントとサーバーの両方で使用可能な追加ボーナスと組み合わせる優れた実装です。ディノは華麗な男ですが、この人に彼を呼び出す方法です。
DRYは原則であり、厳しいルールではありません。あなたは人間であり、差別化することができます。 など。 DRYが本当に難しいルールだった場合は、2つの異なる変数に同じ値を割り当てることは決してありません。私は平凡なプログラムでは、値0を含む複数の変数があると思います。
一般的に言えば、DRYは通常データには適用されません。これらのビュー固有のエンティティは、おそらく注目すべき論理がないデータ転送オブジェクトのみである。データはあらゆる種類の理由で複製される可能性があります。
viewmodelの軽いエンティティクラスを作成し、実際のエンティティを繰り返しているので、これはかなり悪いです。 – terjetyl
なぜこれが悪いのですか? – EricSchaefer
継承を使用せずに同じエンティティを表す2つのほぼ同一のクラスを作成しているため、その乾燥が悪いと思われます – terjetyl
答えは実際にあなたがViewModelにあるべき気持ちに依存していると思います。私の場合、ViewModelは、現在表示されている画面のモデルを表します。
ViewCategoryViewModelのようなものでは、カテゴリのフィールドが重複していません。 ViewModelのプロパティ(たとえば、 "SelectedCategory")、ビューが表示する必要がある他のデータ、および画面が取ることができるコマンドに、Categoryオブジェクトをプロパティとして公開します。
ドメインモデルとビューモデルの間には常に類似点がありますが、ViewModelの作成方法はすべて同じです。
データ転送オブジェクト(DTO)と同じです。これら2つのオブジェクト型のため
ドメインは異なるので、それはDRYの違反ではありません。
class Customer
{
public int Age
}
そしてcorspondingビューモデル:: - differnetのプロパティタイプ - 異なるオブジェクト
class CustomerViewModel
{
public string Age;
// WPF validation code is going to be a bit more complicated:
public bool IsValid()
{
return string.IsNullOrEmpty(Age) == false;
}
}
Differntドメイン
は、次の例を考えてみましょう。
1.このコンテキストでドメインとは何ですか? 2.あなたのビジネスモデルには顧客エンティティがあります。 Customerエンティティ、Customer DTO、CustomerViewModelがあるとします。もちろん、そこには重複したプロパティがたくさんあります。私はこれをDRY – terjetyl
の明確な違反とみなしています。1.顧客はおそらくNHにデータベースにマップされています。それは、完璧ではないDBスキーマのためにハッキングを含むことさえあります。多くのビジネスメソッド、コレクションがありますが、これは画面に表示するときには必要ない可能性が最も高いです。 2. SRPは、CustomerクラスがMVPのビジネスモデル、DTO、ViewModelとして使用されている場合、SRPを明らかに揮発させるよりも、オブジェクトを変更する理由が1つだけである必要があることを示しています。クラスが1つだけの方が簡単な状況があることに同意します。すべてがコンテキストに依存します。 –
ViewModelでIsSelectedのようなプロパティを検討し、画面上でエディションをキャンセルする(CustomerViewModelクラスをバインドしていない場合はCustomerオブジェクトを元に戻す必要があります)、INotifyPropertyChangedを実装します。非常に単純化されたシナリオにおいてのみ、DRYの違反のように思えます。 –
- 1. ベストプラクティス - DRY違反レール<-> JavaScript
- 2. DRYに違反しないようにdjangoクエリを使用するリファクタリング方法?
- 3. これは反パターンですか?Reactjs
- 4. アクセス違反ですか?
- 5. RelayCommandの一般的な実装はMVVMパターンに違反していますか?
- 6. ユーザビリティのためのCLIパターン/反パターン
- 7. IClientChannel反パターン
- 8. 戦略パターンと委任パターンの違い
- 9. 委任パターンと間接パターンの違い
- 10. Googleタグマネージャのセキュリティ違反ですか?
- 11. MVCパターンのコントローラーとMVPパターンのプレゼンターの違いは何ですか?
- 12. "反応ネイティブバンドル"と "反応ネイティブアンバンドル"の違いは何ですか?
- 13. "ModelViewViewModel"または "MVVM"を大声で言うのは面倒です!代替案?
- 14. DRY反応複数の類似の機能をコード
- 15. 厳密なエイリアシング違反ですか?
- 16. 反応状態とmobx - 反パターン?
- 17. BDE inmem000.remアクセス違反/共有違反
- 18. Javaのorg.joda.time.DateTime違法パターン
- 19. MVCパターンのコントローラとコマンドパターンのコマンドの違いは何ですか?
- 20. JPAの「循環参照」は反パターンですか?
- 21. Akka 2のディスパッチャの違いと使用パターンは何ですか?
- 22. インタプリタとメディエータの設計パターンの違いは何ですか?
- 23. 工場とパイプラインの設計パターンの違いは何ですか?
- 24. スプリングブートの/ *と/ **パターンの違いは何ですか?
- 25. python/webapp2:webformベースの電卓のどこにでもDRYを違反しています...どうすれば修正できますか?
- 26. wxDevでのアクセス違反エラー
- 27. マルチスレッドアプリケーションでのアクセス違反、C++
- 28. デザインに(反)パターンがありますか?どのようにパターンを認識するのですか?
- 29. Page Controllerとmvcパターンの違いは何ですか?
- 30. 流暢なインターフェースとBuilderパターンの違いは何ですか?
合意しました.VMは、Viewが知っておくべきモデルの部分でなければなりません。 –