我通常構建我的MVC解決方案,在某種程度上類似於如下:
- X.Core
- X 。域
個
- X.Domain.Services
- X.Application.Core
- 應用邏輯(初始化(路線註冊,IoC配置等),Web特定的擴展,MVC過濾器,控制器基類,視圖引擎等)
- X.Application.Models
- X.Application.Services
- 服務類,可以通過訪問周圍倉庫或域名服務,以及其他方式進行更新
- 返回的ViewModels X.Application。網絡
有些可以合併,但有它們分開使得它更容易找到的東西,以確保您層邊界得到尊重。
表示對製品車的典型控制器的動作可能是這樣的:
public virtual ActionResult ProductCart()
{
var applicationService = <obtain or create appropriate service instance>
var userID = <obtain user ID or similar from session state>
var viewModel = applicationService.GetProductCartModel(userID);
return View("Cart", viewModel);
}
一個典型的控制器行動將產品添加到購物車因此可能是這個樣子:
public virtual ActionResult AddProductToCart(int productID)
{
var domainService = <obtain or create appropriate service instance>
var userID = <obtain user ID or similar from session state>
var response = domainService.AddProductToCart(userID, productID);
return Json(new { Success = response.Success, Message = response.Message });
}
一個很好的答案 - 你可能會添加一個你的項目結構的插圖嗎? – flesh 2011-04-02 20:48:03
我決定做類似如下的事情:1)創建一個具有存儲庫和實體成員變量的「服務」類。實體成員變量只是我正在建模的對象(POCO ??)的屬性。控制器將實例化服務並設置其存儲庫和實體值。然後它會調用服務的Add()方法。而且我正在使用Ninject也處理依賴關係。在重做我的應用程序以像這樣工作之前,有什麼想法? – user660734 2011-04-02 21:10:23
在我看來,您應該有一個productService類,它包含對產品存儲庫和作爲私有成員的購物車的引用。 這些存儲庫的實例可以通過依賴注入來提供。 此類還應包含以產品和(目標)購物車爲參數的方法,查詢此產品是否在任何其他購物車中使用,並最終將產品添加到目標購物車。 – Frank 2015-11-06 10:31:26