2009-08-28 38 views
3

在我的ASP.NET MVC的Web應用程序,我有:ASP.NET MVC(域模型庫,流利,服務 - 結構爲我的項目)

  • 域模型,通過創建LINQ到SQL

  • 庫如

    UserRepositoryOrderRepository

  • 的IQueryable Fluents如IQueryable的擴展法如

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

  • 服務如

    UserServiceOrderService

  • 實用工具類和擴展方法,如

    CryptoUtility(做散列等),字符串等。擴展

  • 的ViewModels這是特別爲每個MVC視圖

  • 的ASP.NET MVC項目本身(控制器,查看)

我正在尋找最好的項目結構/組織對我的情況下,特別是分離成不同的組件以及這些層之間的依賴關係應該如何。遺憾的是,Web資源並沒有詳細描述這一點。

一個提示:目前資源庫,服務,IQueryable的Fluents等直接對着幹的領域模型實現,我沒有爲他們的接口定義。我認爲這是不必要的,但也許這是鬆散耦合所需要的?我的服務有一個接口(例如IOrderService),和我的庫實現IRepository < T>。

欣賞上以簡明的方式組織這次你的輸入,尤其是哪些層應該依靠什麼&裝配組織。謝謝!

回答

0

你可能想看看s#arp architecture,看看他們如何組織的事情。它使用NHibernate和他們的回購有點直接綁定到他們,所以你需要修改它。

8

我會看文章由傑弗裏·巴勒莫Ø n洋蔥建築here。這個基礎架構在任何項目中都能很好地工作,並且可以讓您從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應用程序引用了我們的存儲庫/工作單元的域實體的核心應用程序。查看this older project on google code也可以看到類似的例子。關於這一點的重要部分是我們能夠將新的「UI」項目類型添加到相同的解決方案中,並按預期重新使用我們的核心項目。就像一個控制檯應用程序或第二個Web應用程序,或任何你需要的。

+0

你在哪裏提供服務?在Core項目中? – Alex 2009-09-02 22:28:15

+0

你可以。我喜歡將我們需要構建的dll的數量保持在最低限度。但是你可以把它放在一個單獨的項目中。我把它加到了你的樹上。我們也有域服務的概念,所以這些都會在域文件夾/命名空間下進行。這將是一項僅適用於域名實體的服務。您在該項目下看到的services文件夾將是一個「應用程序」服務,因爲它可能會注入存儲庫以及其他應用程序服務來執行工作。這取決於。 :) – 2009-09-02 22:35:04

+2

看起來像fsu-isys-489-spring-09-group-2已被取消。我找不到它去了哪裏。另外,域名下的持久性和服務與核心項目的根源之間有什麼區別? – 2011-05-11 20:15:50