2011-02-15 91 views
1

我正在構建一個站點,並且正在考慮使用區域來覆蓋與我將要描述的類似的場景。ASP.NET MVC 3區域和DDD聚合根

我目前有4個部分網站,讓我們稱這些創建,管理,第3節和第4節

創建和管理是我的工作的域對象的行爲。域對象有許多與之相關的子對象的集合。這些也需要創建和管理。

我使用的產品爲例,以免給任何東西,但它並不完全符合同一個域 - 所以請不要說「你爲什麼不有一個產品部分」

我現在實現了具有像類別,類別操作一個ManageController,ProductsForCategory

我想我需要的地區,然而,一些網址需如此作用域我想

  • /管理/分類/ 8 /產品
  • /Manage/Category/8/Product/1

這是可能的使用區域?我是否需要設置新的路由規則?

我的類別控制器有兩個參數的行動,例如

public ActionResult Product(int categoryId, int productId) 
{ 
    //get category 
    var cat = GetCategory(categoryId); 

    //get product 
    var product = cat.Products.SingleOrDefault(x=>x.Id == productId); 

    if(product == null) 
     return RedirectToAction("Index","Manage"); 

    return View(product); 
} 

然後,我會有一個路由規則,在類別ID傳遞?

我的想法是否正確?

回答

1

這是可能的地區..雖然這是我的理解,主要是建議將區域結構化爲有意義的文件夾結構來處理大型MVC應用程序,而它看起來像你想用它來實現嵌套路線?

要將嵌套的路線圖,以/Manage/Category/8/Product/1您可以創建你的「管理」區域,然後添加一個路徑,像這樣:

context.MapRoute(null, 
     "Manage/{controller}/{categoryId}/{action}/{id}", 
     new 
     { 
      action = "Product", 
      id = "1", 
      categoryId = "2" 
     }); 

然後,您可以創建一個操作方法接受這些PARAMS:

public ActionResult Product(string categoryId, string id) 

但是,您的問題涉及聚合DDD根,所以我懷疑我只回答了部分問題?