0

最近、C# で Web 開発を始めましたが、MVP パターンとドメイン駆動設計の概念について混乱しています。

アプリケーションが 5 つの異なるレイヤーに分かれていると先輩の 1 人から言われました。階層構造は、View、Presenter、Service、Repository、Entity のようなものです。

これらの異なるレイヤーについての私の理解は次のとおりです。

View:クライアントに配信されるデータの表現

Presenter:コードビハインド。クライアントのリクエストを処理し、情報をサービスに送信します

Serivce:ビジネス ロジック層。データを操作します。

Repo: それが何をするのか正確にはわかりません。

Entity:ドメイン内の一意のオブジェクト。同じ ID (属性) を持たない限り、2 つのオブジェクトが同じになることはありません。

それで、私の説明は正しいですか?誰かがそれについて詳しく説明できますか?また、レポ層は何をしますか? データベーストランザクションを処理しますか?

これは純粋な MVP パターンではないかもしれませんが、これがアプリケーションの状態であるように思われ、私はこれらすべての概念に不慣れです。誰かが私にそれをより簡単な言葉で説明できるなら、それは素晴らしいことです. ありがとう。

4

2 に答える 2

2

私の経験では、衝突がありました。

  • ビュー - データをレンダリングする実際のページ。コード ビハインドは、ビューに必要なインターフェイスを実装します。
  • プレゼンター - いいえ、コード ビハインドではありません。コード ビハインドはプレゼンターをインスタンス化します。コード ビハインドは View インターフェイスを実装し、次のように Presenter をインスタンス化します (通常はそれ自体を渡します)。

    public class CodeBehindPage : System.Web.UI.Page, IViewInterface {
        private Presenter myPresenter;
    
        public CodeBehindPage() {
            myPresenter = new Presenter(this); // Presenter will require IViewInterface
        }
    }
    
  • サービス - 正しい。

  • リポジトリ - 正解です。データベース トランザクション (ロード/保存など) を処理します。
  • エンティティ - 正解。エンティティはデータベース オブジェクトです。
于 2013-04-03T01:41:10.023 に答える
1

MVP デザイン パターンを N 層アーキテクチャと組み合わせることは好みません。あなたが説明したことは、N層アーキテクチャに関する可能性が高いです。N-Tier は、ロジック間に階層を作成するアーキテクチャです。

主に、プレゼンテーション ロジック (コントロールの高さや幅の計算などの UI 固有のロジック)、ビジネス ロジック (データ操作、検証など)、およびデータ アクセス (CRUD 操作) の 3 つのロジックがあります。

MVP デザイン パターン自体は、Model、View、Presenter のみで構成されます。N 層アーキテクチャのビューとプレゼンターは、プレゼンテーション ロジックと見なされます。モデルは N 層では一般的すぎます。ビジネス ロジックとデータ アクセスの両方を含めることができます。MVP は、ビューがイベント ドリブンを介してコード ビハインドと通信する設計です。例として、Asp.Net と C# Winform があります。もう 1 つの優れた設計パターンは、ASP.Net MVC で使用される MVC です。

レイヤーの理解について言えば:

  • ビューはUIです。Asp.Net では .aspx ファイルです。N 層のプレゼンテーション ロジック層と見なされます。
  • プレゼンターはコードビハインドです。Asp.Net では .aspx.cs ファイルです。N 層のプレゼンテーション ロジック層と見なされます。
  • サービスは良好で、N 層のビジネス ロジック レイヤーと見なされます
  • リポジトリはデータアクセスです。その主な目的は、データ ストレージと通信することです。Xml、フラットファイル、CSV、または一般的なデータベースです。N 層のデータ アクセス層と見なされます。
  • エンティティはオブジェクトであり、その目的はデータをモデリングすることであり、レイヤー間で渡されます。POCO の原則もあり、エンティティはできる限り単純にする必要があります (プロパティのみで構成されます)。その主な目的は、エンティティをあらゆる種類のレイヤーで使用できるようにすることです。

ドメイン駆動設計自体は別の概念です。ビジネスプロセス要件に関するアプリケーションを設計する概念です。ほとんどのプログラマーが通常行うデータに基づいていません。

于 2013-04-03T01:59:40.680 に答える