4

私の ASP.NET MVC Web アプリケーションには、次のものがあります。

  • LINQ to SQL によって作成されたドメイン モデル

  • などのリポジトリ

    UserRepositoryOrderRepository

  • などの IQueryable 拡張メソッドとしての IQueryable Fluents

    public IQueryable<Order> GetNewOrders(this IQueryable<Order>)

  • などのサービス

    UserServiceOrderService

  • などのユーティリティ クラスと拡張メソッド

    CryptoUtility(ハッシュなどを行う)および文字列などの拡張機能

  • MVC View ごとに特別な ViewModels

  • ASP.NET MVC プロジェクト自体 (コントローラー、ビュー)

私のケースに最適なプロジェクト構造/組織を探しています。特に、異なるアセンブリに分離し、これらのレイヤー間で依存関係がどのように見えるかを探しています。残念ながら、Web リソースはこれについて詳しく説明していません。

1 つのヒント: 現在、リポジトリ、サービス、IQueryable Fluents などは、ドメイン モデルの実装に対して直接動作します。それらのインターフェイス定義はありません。不要だと思っていたのですが、これは疎結合に必要なのでしょうか?私のサービスにはインターフェース (IOrderService など) があり、私のリポジトリは IRepository<T> を実装しています。

これを簡潔な方法で整理すること、特にどの層が何とアセンブリの組織に依存するべきかについてのあなたの意見に感謝します。ありがとうございました!

4

3 に答える 3

8

ここで、Onion Architecture に関する Jeffrey Palermo の記事を参照してください。この基本的なアーキテクチャはどのプロジェクトでもうまく機能し、コア プロジェクト (ドメイン層、永続性など) を Web プロジェクトから分離することができます。

これを MVC/StructureMap/FluentNHibernate で使用し、大きな成功を収めています。

最終的には、以下のような構造になります。

> trunk
  + build (build scripts)
  + lib (external libraries)
  > src (source code)    
   >> Organization.App (solution name)
     >> Organization.App.Core (code library)
        + Config
        > Domain
          > Model
          > Persistence
          > Queries
          > Services
        > Persistence
        > Services
     >> Organization.App.Web (mvc web app)
        > Assets
          + Images
          + Scripts
          + Stylesheets
        + Controllers
        + Views
        + ViewModels

それが基本的な考え方です。Web アプリは、リポジトリ/作業単位のドメイン エンティティのコア アプリを参照します。同様の例については、Google コードのこの古いプロジェクトを確認してください。これの素晴らしい点は、新しい「UI」プロジェクト タイプを同じソリューションに追加し、コア プロジェクトを意図したとおりに再利用できることです。コンソール アプリや 2 番目の Web アプリなど、必要なものは何でも。

于 2009-09-02T22:24:46.043 に答える
3

いくつかの異なるプロジェクトがこれについてより詳細に説明しています (ただし、すべての異なる部分がどのように連携するかを実際に理解するには、ある程度の努力が必要です)。

于 2009-08-28T22:24:28.650 に答える
0

s#arp アーキテクチャをチェックして、それらがどのように構造化されているかを確認してください。NHibernate を使用しており、それらのリポジトリは直接関連付けられているため、変更する必要があります。

于 2009-08-28T22:18:19.723 に答える