ASP.NET MVC 3区域和DDD聚合根

时间:2011-02-15 17:05:27

标签: asp.net-mvc-3 asp.net-mvc-routing asp.net-mvc-areas

我正在建立一个网站,我正在考虑使用区域来涵盖与我即将描述的方案相似的场景。

我目前有一个包含4个部分的网站,我们称之为创建,管理,第3部分和第4部分

创建和管理是我正在使用的域对象上的操作。域对象具有许多与其相关的子对象集合。这些也需要创建和管理。

我使用产品作为示例,以便不给任何东西,但它不完全适合相同的域 - 所以请不要说“你为什么没有产品部分”

我当前的实现有一个ManageController,其中包含类别,类别,ProductsForCategory

等操作

我认为我需要区域,但是,某些网址需要作用域,所以我想要

  • /管理/分类/ 8 /产品
  • /管理/分类/ 8 /产品/ 1

使用区域可以吗?我是否需要设置新的路由规则?

我的CategoryController是否会在操作上有2个参数,例如

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 个答案:

答案 0 :(得分:1)

这可以使用Areas ..虽然我的理解是主要建议将区域结构化为有意义的文件夹结构来处理大型MVC应用程序,而看起来你想用它来实现嵌套路由?

要将嵌套路线映射到/Manage/Category/8/Product/1,您可以创建“管理”区域,然后添加如下路线:

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

然后创建一个动作方法来接受这些参数:

  public ActionResult Product(string categoryId, string id)

但是,你的问题是关于DDD的总体根源,所以我怀疑我只回答了部分问题?