3

I'm new to ASP.NET MVC and inherited a project that uses the technology.

Such Web project contains three folders: Views, Controllers and Model. As I understand it, the Model contains in fact your domain / business logic and is called by your controllers. The controllers themselves act as delegators between Views and Model.

Now, in a typical layered architecture, there should be no references in any project to the Web/UI project.

これは非常に紛らわしいと思います:
-> UI にはモデルが含まれています。これは、理想的な世界では、「ドメイン駆動設計」の原則に基づいています。
-> UI の上のレイヤー (サービスとデータアクセス) は、UI への参照を持つことができません

モデルを知らない場合、効率的なサービスとデータ アクセス レイヤーを作成するにはどうすればよいでしょうか?

ここで何が欠けていますか?Web.Model は "DDD" とは異なりますか? また、別の BL プロジェクトを作成する必要がありますか? その場合、Web.Model には何が含まれているはずですか?

4

3 に答える 3

10

私はモデルを概念として見ています。ドメイン(エンティティ、サービスなど)を含む完全に別のプロジェクトを作成し、「UI」プロジェクトでそれを参照できます。このシナリオでは、これが「モデル」になります。これは私が通常行っていることです。Models フォルダーには、Binding/Validation (UI 用) に使用する"ViewModels"を保持しています。たとえば、従業員がいるが、そのすべてのプロパティ (または別のプロパティ) を使用する必要がない場合、必要に応じてEmployeeViewModel調整を作成し、検証を追加します (必要な場合)。ビューに渡します。

これは決して「正しい方法」/「唯一の方法」ではありませんが、過去に私にとってはうまくいきました.そうでない場合、または説明が必要な場合に備えて、意味があります-お知らせください)。

于 2013-02-07T10:59:23.677 に答える
1

モデルを同じプロジェクトに含める必要は必ずしもありません。もちろん、それらを異なるレイヤーに含めることができます。

これは私が通常プロジェクトをセットアップする方法です

1) UI プロジェクト- これは MVC Web アプリケーション タイプのプロジェクトで、コントローラーとそのビューおよびその他の UI 関連のものを使用します。

2) ビジネス エンティティ- これは、ドメイン オブジェクト (例: 顧客) を定義するクラス ライブラリ タイプのプロジェクトになります。これは、私の DB スキーマがどのように見えるかにほとんど似ています。これらは通常、私のドメイン モーダルを表す単なる POCO です (これを CodeFirst データベースの生成に使用します)。

3) データ アクセス- これは、データ アクセス クラスを持つ別のクラス ライブラリ タイプのプロジェクトです。通常、リポジトリ クラス/インターフェイス、DBContext クラス、およびその他のデータ アクセス クラスは、このプロジェクトに含まれます。

4) テスト- プロジェクトの単体テスト

ここに画像の説明を入力

ビジネス エンティティ プロジェクトがデータ アクセス プロジェクトへの参照として追加され、データ アクセス コードでこれらのクラスを使用できるようになりました。

ビジネス エンティティとデータ アクセス プロジェクトは、UI プロジェクトの参照として追加されます。Controllers/Service クラスからデータ アクセス メソッドを呼び出します。

必要に応じて、コントローラーとデータ アクセス レイヤーの間にサービス/ビジネス ロジック レイヤーを追加することもできます。

UI プロジェクトの ViewModels フォルダー内にもいくつかの ViewModel クラスがあります。複数のドメイン オブジェクトからのデータを表示する必要があるいくつかの画面でこれを使用します。ドメイン オブジェクトをビュー モデル オブジェクトにマップするマッピング/サービス クラスがあります。あなたのプロジェクトがbifgの場合、これを同じソリューションの下のserperateプロジェクトとして保持することができます

于 2013-02-07T10:58:22.170 に答える
0
  • ビューには HTML レイアウトが含まれます
  • コントローラーは、モデルまたはモデル自体からデータを取得してビューに渡すという面倒な作業を行います。
  • モデルは、BL のアクションを実行したり、データを取得したりするために使用されます。

ヒント : EntityFramework (使い始めるのが簡単なのでお勧めします) を使用してデータを取得できます。セットアップが非常に簡単なため、DAL が不要になり、すべてを自分で作成する時間を節約できます。

Services : DB から取得したデータを XML/JSON に変換し、ビューの代わりにそれを返すことにより、XML/JSON (他の形式?) を返すコントローラーを使用できます。詳細については、MVC 4 WebApi をご覧ください。mvc 3 でもほぼ同じことができることに注意してください。

また、開始するためのチュートリアルについては、 asp.net/mvcサイトを参照してください。これらは非常に便利です。

于 2013-02-07T10:48:32.393 に答える