2011-02-15 81 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根,所以我怀疑我只回答了部分问题?