2010-12-30 3 views
6

私はドライを目指していますが、それは必ずしも可能ではないことは明らかです。しかし、MVCでよく見られる概念である「View Model」のコンセプトに頭を下げなければなりません。DRYとMVCとビューモデルによるセキュリティとメンテナンス性

ビューモデルは、セキュリティ、保守性、およびテストに関する懸念の両方に対して、最小限の情報のみをビューに渡すように設計されています。私はそれを得る。それは理にかなっている。

ただし、DRYの観点から、View Modelは既存のデータを単純に複製しています。 View Modelは一時的でDTOとしてのみ使用されるかもしれませんが、DRYプリンシパルに違反していると思われる同じモデルの2つの異なるバージョンを基本的に維持しています。

Do ViewモデルはDRYに違反していますか?彼らは必要な悪であるか?彼らは悪いよりも良いことをしていますか?

答えて

4

これは何度も繰り返されています。だけでなく、それはかなり実質的な欺瞞ですが、答えは主観的で議論的です。 ViewModelsは、DDDに対する応答と永続性の無知の概念です。

ViewModelsを使用していないと言うのは、DjangoとRailsとほとんどのPHP ORM/MVCフレームワークがそれらの概念について全く気にしないことを無視するという意味です。誰かが他のすべての言語やフレームワークに「間違っている」と言ってもらいたいのですか?

ViewModelsを使用するかどうかは、使用するアーキテクチャースタイルやアプリケーションの目的によって100%異なります。

これは、WebFormアプリケーションでGridViewをドラッグアンドドロップするのが適切であるかのようです。多くのことにかかっています。

あなたがここにいるDRYについての誤解もあります。 WCFサービスのProxyクラスはDRYに違反しますか? ViewModelにロジックが含まれていますか? DRYの主な目的は、重複した論理を意味のある目的で持たないことです。オブジェクトシェイプを共有するいくつかのDTOがそれに違反していますか?

限定されたコンテキストのDDDプリンシパルは、良い読み取りにもなります。 ShoppingCartオブジェクトが倉庫と電子商取引のウェブサイトの設定で異なるように機能する必要がある場合、そのタイプを共有することを意味しますか?唯一の共有機能が価格(価格+税+送料)を合計している場合はどうなりますか?そのためにベースクラスを作成するだけでカップリングが増えますか? GetTotal()のような単純なメソッドの100%DRYであることについての時間/コスト/保守のトレードオフは何ですか?実際にコードベースを維持するための複雑さと全体的なコストを削減する意味で、DRYに違反していますか?

非常に多くの質問で申し訳ありませんが、うまくいけば、質問した質問のニュアンスと複雑さを確認できます。 ;)

+0

私はこれを投稿する前に検索を行い、同様の質問は見つかりませんでした。シルバーライトに関連するものもいくつかありましたが(ビューモデルはまったく別のものです)、レールに関するもの(おそらく多少は関係しますが、同じではないかもしれません)。 DRYは、MVCがモデル化された、レールの主な目標の1つであるため、私はこれを尋ねます。 MVCは、時には価値がある原則について幾分漸化的であるようです。 –

+0

@ミスターマン - http://stackoverflow.com/search?q=viewmodels+DRY+[asp.net-mvc] – jfar

+0

おそらく結果を実際に読むべきです。いずれも適用されません。 –

2

ビューモデルを使用しないと、単一責任の原則に違反することになります。エンティティはUIの問題で汚染されてはいけません。

また、アプリケーションのバージョン1.0では、ビューモデルの実際の価値が必ずしも明らかにならないと思います。バックエンドがどのように機能しているかを完全に再考したが、それらの変更をビューレイヤーに持っていく必要はありません。

+0

SRPはモデルのコントローラよりもコントローラの問題の方が多いので、SRPに違反する方法は実際にはわかりません。 –

+0

SRPはどこのアプリケーションでも問題になります。これはおそらく最も重要なOOP原則である。 –

関連する問題