3

かなりの時間からasp.netMVCに取り組んでいますが、今日は 、MSDNのサンプルコードを通過
する理論上の問題に固執しています。 私はこのようなものを読みました


public class SomeController()
{
 public ActionResult SomeAction(SomeModel model)
 {
   var dataContext = new SomeDataContext();
   //basic CRUD operations on data context
   //
 }
}

ここで、データベースは明らかにコントローラーを介してアクセスされており、理論的には正しくありませ
ん。この例またはモデルとコントローラーの定義に何か問題があります
。更新:-
またはどこでも可能性があります。 MSDNModelsViewModels同等と見なされます

4

3 に答える 3

4

イントロ

MVCデザインパターンはかなり古いものです。「web」が大学間でpingを送信する2人の男だったとき、元々はSmalltalk-80アプリケーション用に定義されていました。それ以来、それはかなり進化してきました。

MVCデザインパターンの背後にある中心的な原則は、関心の分離です。このパターンは、プレゼンテーションをビジネスロジックから分離します。プレゼンテーション層には主にビュー、コントローラー、テンプレート、ビューモデル、プレゼンターが含まれ(使用するMVCに触発されたパターンのフレーバーによって異なります)、ビジネスロジックはモデル層で終了します。

モデルレイヤーは、パターンで厳密に定義されていませんが、ASP.NET MVCでは、サービスと、サービスで使用されるすべての構造(ドメインオブジェクトとしてよく知られているモデルオブジェクトを含む)で構成されています。

質問に関して

DataContext基本的なMVCチュートリアルを探している場合、コントローラーでの使用法を確認することは非常に一般的です。MVCアーキテクチャは大規模なアプリケーションを対象としており、Hello-Worldの例では、完全に実現されたMVCアーキテクチャは単なる肥大化のように見えます。

例では、簡単にするためにコードの分離を犠牲にしています。との相互作用DataContextは基本的にストレージロジックであり、モデルレイヤーが処理するタスクの1つです。コントローラで使用すると、モデル層がプレゼンテーション層でリークし始め、「ファットコントローラ、スキニーモデル」の問題が発生することを意味します。

実際のアプリケーションでは、DataContextはモデルレイヤー内の永続性を処理する構造の一部になります。おそらくデータマッパーの一部として、手動で書き込むことを選択した場合。

「更新」について

モデル(この場合はドメイン/モデルオブジェクトを意味していると思います)は、ViewModelとはまったく異なるアプリケーション層からのものです。

名前が示すように、MVVMパターンでは、ViewModelsがコントローラーに置き換わります。ViewModelは、モデルレイヤーからデータを取得し、Viewで使用できるように変換します。

このパターンは、ビューやモデルレイヤーの動作を完全に制御できない状況で(実際にMVVMを使用している場合)最適に使用されます。たとえば、SAPの代替フロントエンドを構築するために雇われた場合、またはビューが実際には特定のタイプの入力を期待する何らかの形式のハードウェアデバイスである場合。

于 2013-01-22T15:44:47.040 に答える
0

MVCはGUIパターンであり、MVPMVVMと同様に、データアクセスや永続性とは何の関係もありません。確かに、多くの単純なCRUDアプリケーションは、MVCと基盤となるデータベースほどではありませんが、より複雑なアプリケーションでは、MVCがプレゼンテーション層の一部になります。

O / RMとしてはDataContext、GUIではなくインフラストラクチャレイヤーに属します。MVCでは、モデルはViewModelとして理解できます。

それでも、コントローラーはDataContextまたはその他の手段を使用して、基になるデータストアからこのモデルを取得できます。

于 2013-01-22T13:20:31.070 に答える
0

モデルは通常、データクラス(データベーステーブルを表す)です。ビューモデルは通常、プレゼンテーションの目的でビューで使用するために作成されたクラスと呼ばれます。

DataContext上記の場合、ビューモデルでを使用することはできませんが、上記のモデルクラス(DTOクラスとも呼ばれます)で完全に使用できます

于 2013-01-22T13:22:07.347 に答える