【问题标题】:ASP.NET MVC 3 areas and DDD aggregate rootsASP.NET MVC 3 领域和 DDD 聚合根
【发布时间】:2011-02-15 17:05:26
【问题描述】:

我正在建立一个站点,并且正在考虑使用区域来涵盖与我将要描述的场景类似的场景。

我目前有一个包含 4 个部分的站点,我们将它们称为 Create、Manage、Section 3 和 Section 4

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

我以产品为例,以免泄露任何东西,但它不太适合同一个域 - 所以请不要说“你为什么没有产品部分”

我当前的实现有一个 ManageController,它具有类别、类别、ProductsForCategory 等操作

我想我需要区域,但是,一些 URL 需要限定范围,所以我想要

  • /Manage/Category/8/Products
  • /Manage/Category/8/Product/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 中传递的路由规则?

我的想法对吗?

【问题讨论】:

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


    【解决方案1】:

    这可以通过 Areas 实现。尽管据我了解,主要建议将 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 根,所以我怀疑我只回答了部分问题?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-11
      • 1970-01-01
      • 2010-11-30
      • 2016-03-21
      • 2016-11-05
      • 2011-04-25
      • 1970-01-01
      • 2010-11-01
      相关资源
      最近更新 更多