ASP.NET MVC 3 области и агрегированные корни DDD - PullRequest
1 голос
/ 15 февраля 2011

Я создаю сайт и рассматриваю возможность использования областей, чтобы охватить сценарий, аналогичный тому, который я собираюсь описать.

В настоящее время у меня есть сайт с 4 разделами, давайте назовем их Создать, Управление, Раздел 3 и Раздел 4

Создание и управление - это действия над доменным объектом, с которым я работаю. Доменный объект имеет ряд коллекций подобъектов, которые к нему относятся. Они также должны быть созданы и управляться.

Я использую Продукты в качестве примера, чтобы ничего не отдавать, но это не совсем соответствует тому же домену - поэтому, пожалуйста, не говорите «Почему у вас нет раздела Продукты»

Моя текущая реализация имеет ManageController, который имеет Действия, такие как Категории, Категория, ProductsForCategory

Я думаю, что мне нужны области, однако некоторые URL-адреса должны быть ограничены, поэтому я хочу

  • / Управление / Категория / 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);
}

Тогда у меня будет правило маршрутизации, переданное в идентификаторе категории?

Правильно ли я думаю об этом?

1 Ответ

1 голос
/ 21 февраля 2011

Это возможно с областями ... хотя я понимаю, что области в основном рекомендуются для структурирования вашего кода в значимую структуру папок для работы с приложениями 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, поэтому я подозреваю, что я ответил только на часть вопроса?

...