Почему все ставят контроллеры в одной папке и представления в другой?

Я'м готов взять плюнуть АСП и в рамках MVC, asp.net MVC или Нэнси. Куда бы я ни поехал, я вижу папки для контроллеров/modules и папки для представлений. Это просто Павловский рефлекс, уборка вещей по типу, или есть какой-то более глубокий вид мудрости? У меня есть небольшое доказательство концепции проекта, где я хранения файлов, я'м скорее всего, откроют вместе, значительный комфорт. Так как эти файлы также могут звонить друг другу, они могут сделать это с более короткими, менее ломкими, относительные ссылки. Этот шаблон оспаривается в MVC, потому что путь к папке не автоматически соответствует URL-адрес, и, в asp.net в MVC, шаблонов проектов и маршрутизации применять контроллеры\ вид\ раскол.

Этот Майкрософт вводит понятие зоны. Это можно прочитать как признание, как неповоротливые большие приложения стали из-за этого искусственного разделения.

Люди будут возражать, что "разделение", но разделение достигается уже при наличии исходных файлов. Там's нет конкретной выгоды, как мне кажется, от этих исходных файлов, которые тесно связаны между собой, и направив их в противоположные концы структуру папок?

Кто-нибудь борется с этим? Какие-либо советы?

Комментарии к вопросу (16)
Решение

Я'd, как, чтобы сказать Это'ы [культ карго программирования][грузов], но есть технические причины для этого структуры. Asp.Net в MVC принял Конвенцию по подхода к конфигурации почти все. По умолчанию, вид двигателя бритвы поисков папку views для того, чтобы решить, какой вид вернуть из контроллера. Однако, есть несколько хаки, чтобы получить различные структуры проекта Microsoft и даже позволяет в MVC называется [территории][территории], чтобы позволить нам создать более вменяемую структуру проекта. Вы также могли выполнить свой собственный вид двигателя для того, чтобы указать, где искать вид.

Почему я говорю, что это'ы культ карго программирования и что вы'вновь правильно об этом? [Дядя Вася убедил меня][unclebob], что проект'структура директории должны'т скажи мне, что это'с MVC-приложения. Она должна сказать мне, что это'ы магазин, или отгулы системе запрос, или любой другой. Высокий уровень структуры и архитектуры должны рассказать о чем это не как это было реализовано.

Короче, я верю, что вы'вновь прямо об этом, но любое другое структура каталогов будет просто борьба против рамок и поверьте мне, когда я говорю, что вы Don'т хотите, чтобы попытаться сделать Asp.Net фреймворка сделать что-то, это было'т разработан, чтобы сделать. Это's, жаль, что она's не больше настраивается на самом деле.

[области]:https://msdn.microsoft.com/en-us/library/ee671793(в=против 100).аспн


Чтобы быстро решить архитектурные вопросы, я по-прежнему считаю, что бизнес-модели (бизнес, а не смотреть) и ООО должны жить в отдельном проекте/библиотека, которая вызывается из приложения MVC.

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

Комментарии (12)

Независимо от причины, это плохая практика. Это очень анти-ОО, потому что пакеты или папки (как хотите называйте их), должны иметь слабую взаимозависимость. Классы (или файлы) внутри них должны иметь сильную взаимозависимость.

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

Представление и контроллер-это две половинки одного целого и должны принадлежать друг другу. Вы бы'т иметь один кухонный шкаф ничья за левый носок, а другой рисовать с правой стороны носки.

Комментарии (0)

Чтобы ответить на ваши 'Почему все...?' вопрос: Вот несколько возможных причин, хотя я'м не совсем уверен, какой из них является реальной причиной, так как это на самом деле вопрос субъективный

  • Воспроизвести логическую архитектуру (Модель, Вид, Контроллер) с соответствующей папки и пространства имен структуру

  • Из &амп конвенции; удобство придерживаться шаблона проекта ASP.net в MVC

  • В группу имен, поскольку папка контроллеры/ приведет к `.Пространство имен контроллеров

  • Возможно, использовать некоторые сценарии, в ДИ/МОК, где регулятор классы только запросы/сканировали пространство имен, которое содержит/концы-с 'контроллеры' (в этом могу ошибаться)

  • Чтобы разрешить шаблонов T4 для сканирования и эшафот модели & контроллеры для создания представления

Вы всегда можете создать и следовать своему конвенции, если это имеет смысл для вашего проекта, никто не может остановить вас. Но имейте в виду, что если ты работаешь в большом проекте и/или большом коллективе, то по умолчанию конвенции, которые, как известно, каждый может быть лучшим выбором (не обязательно правильный, однако!)

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

Комментарии (0)

Одна из причин, чтобы держать взгляды и контроллеры в отдельных каталогах-это когда у вас перед End и back end разработчиков, работающих над проектом. Вы можете предотвратить разработчики от доступа к задней части кода (например, для оказания помощи в соответствие требованиям PCI, ограничить, кто имеет доступ к конфиденциальным кодом).

Еще одна причина, чтобы сделать его легче иметь с "темы" и перейти из всех шаблоны, внеся незначительные изменения, чтобы по пути посмотреть.

Третья причина-это простой шаблон каталога при указании взгляды в платформе MVC. Легче указать директорию и файл, а не длинный путь для каждого представления.

Единственный на "связь" и должно быть:

  1. Переменные, переданные в вид контроллера.
  2. Форма полей или действия в представлении, отправили обратно в контроллер.

Я использую универсальный контроллер и попытаться сохранить имена переменных в представлении универсального, так что многие взгляды могут использовать один и тот же контроллер, и многие контроллеры могут использовать тот же вид. По этой причине я предпочитаю держать мнение совершенно отдельно. Модель, где вы можете отличались друг от друга на "вещь" в приложении - они могут быть объектами со списком свойств и методов для доступа/изменения этих свойств.

Для сильносвязанной код, подход, который мог бы работать для вас, сохраняя все файлы, которые входят в пакет или "модуля" вместе в пространстве имен каталогов. Затем вы можете использовать скрипт для копирования или "сборка" и исходные шаблоны в Главное "Вид" и каталог. Например: в <предварительно><код> Либ/мой-имен/мой-пакет/ -> контроллеры/ -> модели/ -> <б>вид/</б> -> тема/ -> шаблон-ФИО1 приложение/<б>compiled_views</б>/тема/ -> URL-адрес/путь/шаблон-ФИО1

</пре></код>

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

Считаю, что мнения-это просто способ форматирования данных, будь то JSON или XML, CSV или HTML-код. Особенно это помогает, если вы хотите, чтобы ваше приложение также работает в качестве API. Попробуйте отделить представление от данных, с помощью родовые имена переменных, так что вы можете использовать тот же шаблон для нескольких контроллеров или моделей (или используйте включает чтобы свести к минимуму объем кода, который нужно поддерживать).

Комментарии (0)

Помните, это'ы Майкрософт рекомендовали way, чтобы сохранить контроллеры и представления в другую папку, столько и будет следовать рекомендуемой структуры,

  1. Одной из причин может быть контроллеры всегда не один на один с видом, особенно частичный вид могут быть разделены между контроллерами.
  2. Другой причиной может быть, когда ваш проект растет, вы, возможно, захотите, чтобы вытащить контроллеров и модульных тестов в другой проект(ы), но это'ы довольно трудно сделать то же самое для вид и вид/и js/css не принадлежим друг другу, как они относятся друг к другу.

Сказав, что есть много постов об этом пути, такие, как это.

Комментарии (2)

Не обязательно все это. Например в Python'рамки с Джанго есть концепция приложения, где суб-модулей вашего приложения живут в своих собственных каталогах, с их моделями и видами и шаблоны(вид-то, что Джанго звонки контроллеры по сути). Я предпочитаю, что способ делать вещи, потому что это означает, что можно легко упаковать "в приложении" и использовать его в разных проектах, просто включая его в список приложений в мои проекты настройки. Это's также легче выяснить, где разные части. Если я смотрю на файл urls.py и увидеть что-то вроде URL-адрес(Р&#39; пользователей^/&#39;, включают в себя(&#39;my_site.пользователей.URL-адреса&#39;)), я знаю, что my_site модуль.пользователей содержит весь код, который обрабатывает пользователей. Я знаю, чтобы посмотреть на my_site модулей.пользователей.видиmy_site.пользователей.модели, когда я хочу посмотреть, как пользователи создаются и проверяются на подлинность. Я знаю, что все мои маршруты, определенные вmy_site.пользователей.URL-адрес`.

Также, если это's достаточно универсальные, я, вероятно, может использовать этот модуль на других сайтах только при изменении конфигурации или пакет его в качестве библиотеки и опубликовать его в качестве ОС.

Комментарии (0)

Для записи

почему я говорю, что это'ы культ карго программирования и что вы'вновь правильно об этом? Дядя Вася убедил меня, что проект'структура директории должны'т скажи мне, что это'ы MVC-приложения. Она должна сказать мне, что это'ы магазин, или отгулы системе запрос, или любой другой. Высокий уровень структуры и архитектуры должны рассказать нам о том, что эта вещь, а не как это было реализовано.

Вопрос: кто имеет доступ к коду?. Программисты. У конечных пользователей интересует код?. Нет. И, что делает программист, код. Или, более конкретно, классы, основанные на видах (контроллеры, услуги, модели и так далее). Так что есть смысл и это's легкий для того чтобы отлаживать код, если вы не смогли найти код в зависимости от типа кода, а не в поведении кода. Плюс, давайте'ы сказать, командного проекта, Один отвечает за контроллер, другой модели, другой из Дао и другое мнение. Это's легко разбить проект на части. Хороший код-это код, который легко отладить, не сахар синтаксиса. Дядя Вася снова ошибся.

Пытаясь имитировать поведение проекта (магазин) - это культ карго.

Комментарии (5)