Кращі практики архітектури MVC [закрито]


28

Моє запитання більше про те, як архітектуру програми MVC. Наприклад, нам рекомендується використовувати DI із шаблоном репозиторію, щоб відключити доступ до даних від контролера, однак про те, як зробити це спеціально для MVC, сказано дуже мало. Де ми розмістимо, наприклад, класи репозиторію? Вони, здається, не пов'язані конкретно з моделлю, оскільки модель також повинна бути відносно відокремлена від реальних технологій доступу до даних.

Друге питання передбачає, як структурувати шари або яруси. Більшість прикладних програм (Nerd вечеря, Музичний магазин тощо), схоже, використовують однорівневий, двошаровий підхід (не рахуючи тестів), який, як правило, має контролери, що безпосередньо викликають код L2S або EF.

Якщо я хочу створити багаторівневу / шарову програму, які є найкращі практики щодо MVC?

Відповіді:


5

DI виконується в ASP MVC з використанням заводу контролерів. Ця фабрика використовується для вирішення залежностей вашого контролера.

У MvcContrib є кілька реалізацій Controller Facotry, які ви можете використовувати поза коробкою. Я використовую їх реалізацію Castle Windsor, і вона працює добре. Також пропонуємо перевірити їх клас TestHelper. Він має дуже цікавий функціонал для глузування HTTPContext контролерів, сеансів тощо. MVCContrib

Особисто мені подобається надавати моїм моделям екземпляр сховища для роботи. Модель виставляє api до сховища (CRUD). Залежність контролера від конкретної моделі вводиться при створенні (конструкторі), який вводиться через фабрику контролерів. Це моя точка вступу до об’єктного графіка, яким керує мій контейнер IoC.


2

Де ми розмістимо, наприклад, класи репозиторію?

Вони належать до моделі; вони вбудована модель.

Як структурувати шари? Якщо я хочу створити багаторівневу / шарову програму, які є найкращі практики щодо MVC?

Рівні представляють фізичні розділення коду. Шари представляють логічні розділення. Шари (як зараз) добре працюють для MVC. Залежно від обсягу ділової логіки, він може бути розміщений у вашому контролері, або він може бути поміщений в окрему збірку і може використовуватися контролером під час циклу запитів.


Отже, ви пропонуєте, що вони повинні брати участь у багатокористувацькому застосуванні Проекту інтерфейсу?
Ерік Функенбуш

@Mystere Man Якщо це не гігантські, то вони повинні зайнятися проектом, який розміщує вашу програму MVC. Зокрема, бізнес-логіка перейде в контролер, і кожна дія матиме свою логіку. MVC - це не лише шаблон інтерфейсу користувача; тому я не погоджуюся з вашим твердженням, що це "проект інтерфейсу". Це не так. Це проект MVC, який є Viewрозділом (є ваш інтерфейс користувача).
Джордж Стокер

Гаразд, можливо, я це погано сформулював. Однак ви не згодні з тим, що шар перегляду не повинен маніпулювати базою даних? І якщо ви кладете в модель класи репозиторію, то перегляд може це зробити.
Ерік Функенбуш

у малому додатку MVC користувальницький інтерфейс "Шар" - це просто папка, яка містить перегляди. У більшому застосуванні це може бути власний проект. Якщо це власний проект, він координується з контролером, і контролер може підключитися до BusinessLayer за потребою. Нікому поза контролером навіть не потрібно було б знати, що існує бізнес-рівень. Я думаю, ти автоматично думаєш, що це є в окремих проектах, але вони не повинні бути.
Джордж Стокер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.