Как мне структурировать приложение mvc 3 в этой ситуации? - PullRequest
0 голосов
/ 21 марта 2012

Я пытаюсь сделать простой сайт, используя mvc, но меня немного смущает, как все структурировать.Есть ли какие-либо рекомендации для такого рода вещей?

С чем я сталкиваюсь, так это со знанием того, как обращаться со многими вложенными страницами и как использовать ViewModels, или, скорее, , когда

Раньше я создавал сайт в MVC, но это было невероятно просто: всего было около 5 страниц, поэтому создать его было несложно.В моей нынешней ситуации я пытаюсь создать сайт с несколькими вложенными страницами, и мне интересно, как я это структурирую.

Например, если бы у меня была такая структура:

                                        Home
                                          |
                        About -------- Contact---------- Products
                          |
                          |
           The Board -- What we do
             |
             |
 person1 -- person2 -- person3

Как мне настроить структуру моего сайта?

У меня такое чувство, что я должен иметьAboutController, ContactController и ProductsController.После этого у меня было бы два ActionResults, называемых «TheBoard» и «WhatWeDo» в AboutController, но как мне тогда обрабатывать вложенные страницы «TheBoard»?Что если бы под этим было вложено еще больше страниц?Будут ли у меня вложенные контроллеры?

Кроме того, даже если этот фиктивный сайт не требует этого, что если я захочу поделиться ViewModels?Я предполагаю, что ViewModel может быть разделен между страницами (при условии, что требуется та же функциональность).Или это плохая практика?Нужно ли создавать новую ViewModel для каждой страницы?

Извинения, если я не очень хорошо объяснил это.В основном, я ищу любые ресурсы о том, как структурировать веб-приложение MVC 3, которое содержит много страниц.Существуют ли основные принципы, которым нужно следовать?Я следовал большинству учебных пособий на сайте asp.net, но на самом деле не было никаких руководств по передовым методам.

Есть идеи?

Спасибо

РЕДАКТИРОВАТЬ:Просто чтобы уточнить, если бы я создавал этот сайт с использованием веб-форм, у меня, вероятно, была бы страница default.aspx с папками About, Contact, Products и любыми вложенными страницами / папками внутри.Я полагаю, я пытаюсь понять, как я это сделаю в MVC?

Ответы [ 2 ]

2 голосов
/ 21 марта 2012

Я согласен с Дариным в том, что вам нужно описать функционал сайта. Если все, что вы пытаетесь сделать, это управлять контентом, то вам лучше использовать готовую CMS, такую ​​как Orchard. Вы можете использовать CMS для создания любой произвольной структуры связанных страниц.

Ваш комментарий "Но что, если я захочу пойти еще на один уровень дальше?" Звучит так, будто требования к этому проекту еще не ясны. Вы всегда можете расширить и рефакторинг позже. А пока просто реализуйте требования, установленные вашим заказчиком.

Сначала убедитесь, что вы «строите правильное», прежде чем обращать свое внимание на «построение правильного».

Ответ на комментарий

Похоже, вы беспокоитесь о навигации и структуре URL. В MVC ваша структура URL может быть полностью независимой от организации вашего контроллера. В MVC нет понятия «контроль». Есть HTML-помощники, но нет элементов управления в смысле веб-форм управления сервером.

Если, например, если вы хотите, чтобы / board / members / jim / bio / resume / company1 / edit, это вполне возможно. Не имеет значения, в каком контроллере находится действие ResumeCompanyEdit, потому что вы можете определить собственные маршруты, чтобы связать URL-адрес, который вы хотите с этим действием.

Что касается хлебных крошек, вы можете создать их вручную или написать собственный HtmlHelper, который будет отображать для вас хлебные крошки на основе вашей пользовательской схемы URL.

1 голос
/ 21 марта 2012

Я хотел бы иметь AboutController, ContactController, ProductController, как вы упомянули

AboutController может иметь Action Person.

Установить маршрут в global.asax следующим образом:

        routes.MapRoute(
            "AboutPerson", // Route name
            "about/board/{personName}", // URL with parameters
            new { controller = "About", action = "Person"} 
        );

Действие Person должно выглядеть следующим образом:

    public ActionResult Person(string personName) {
         // Code to get person data from DB - if required
         var person = db.GetPerson(personName);
         return View(person);
}

Если страницы статичны, просто используйте разные представления и проверьте personName и верните соответствующее представление: например,

return View("BoardMember1");

Где BoardMember1.cshtml / aspx - это представление в представлениях / в каталоге

...