2015-10-13 2 views
1

Я думал об этом в последнее время. До сих пор я всегда подписались на рекомендации Джона папиной которые можно увидеть здесь:Угловые контроллеры: 1 за просмотр - это имеет смысл?

https://github.com/johnpapa/angular-styleguide#controllers

Define a controller for a view, and try not to reuse the controller for other views. Instead, move reusable logic to factories and keep the controller simple and focused on its view. 

Он дает причину, по которой я не понимаю, но для меня это было прежде всего мотивировано простота -Работа/ремонтопригодность. В основном, при работе с большими приложениями, это действительно отстой, чтобы прийти на раздутый контроллер, который отвечает за несколько разрозненных просмотров. Если разработчик хочет очистить контроллер, он/она должен перейти к каждому виду и определить, что используется и почему (чтобы методы могли быть консолидированы, если они очень похожи), что является большой работой. Обычно (особенно, если они находятся под временными ограничениями), они предпочитают просто добавлять любую функциональность, которая им нужна для модели, и «вернуться к ней позже», и именно так она взлетела в первую очередь. Кроме того, я всегда использовал контроллер/директиву как указание на то, повторяется ли логика во многих представлениях или нет (т. Е. Если другой разработчик подходит к контроллеру, который я написал, он/она может быть уверен, что я использовал его только с один взгляд, потому что в противном случае это было бы директивным).

Это аналогичная проблема с проблемой конечных точек, в которой в основном есть люди, добавляющие конечные точки на основе потребности, и в конечном итоге из-за того, что новые люди не знают о старых конечных точках или просто забывчивости, API становится супер раздутым и повторяющимся.

Однако, как я уже говорил, недавно я думал, что этот контроллер 1-1 для просмотра отношений действительно работает против всего шаблона MVC, поскольку он соединяет модель с представлением и разрушает разделение проблем. Я имею в виду, что до тех пор, пока контроллер остается сфокусированным (т. Е. Мы имеем EditUserCtrl, чье задание состоит в том, чтобы редактировать пользователя и т. Д.), То почему два представления не должны использовать этот контроллер? Я имею в виду, если бизнес решит, что ему нужен новый вид в другом месте с той же функцией, почему бы мне просто не написать новое представление и не подключить его к старому контроллеру? Я предполагаю, что я говорю, что у меня проблемы с согласованием конвенции, которая идет вразрез с основами структуры.

Хотел бы услышать другие мысли об этом. Заранее спасибо.

ответ

0

Как вы сказали сами. Если контроллер отвечает за несколько видов, любой разработчик может подойти к нему, что-то изменить в надежде на добавление новых функциональных возможностей в вид A и даже не зная, что он нарушает вид B. Я думаю, что главная цель состояла бы в том, чтобы держать контроллеры чистыми и аккуратными. Таким образом, лучше всего иметь два контроллера почти одинаковыми, но только с 2 ~ 3 строками, чем с файлами, на которые ссылается множество других файлов, которые никто не контролирует.

С одной стороны, вы должны изменить 2 контроллера, если что-то резко меняется в вид на и вид B, но если это сложная задача, вы, вероятно, контроллеры, требующие своего рода шлюз и это может означать, что вам не придется вообще менять какой-либо контроллер (хороший результат). С другой стороны, если у вас есть 10 разных представлений, повторяющих те же 2 ~ 3 строки кода, возможно, пришло время отвлечь функциональность контроллера.

0

Это не пара модели, потому что лучше всего иметь бизнес-логику в сервисах и логику просмотра в директивах и не иметь реальной логики в контроллерах. Таким образом, вы можете использовать один контроллер для просмотра, но этот контроллер должен быть очень тощим. Лично мне нравится использовать контроллеры для назначения и передачи переменных между службами и директивами.Если вы хотите повторно использовать код контроллера, что мешает вам использовать эту логику в директивах и службах?

Практически ни один из контроллеров, которые я пишу (и для моей работы я пишу большое корпоративное приложение в угловом), в них есть логика. Конечно, логика в контроллерах неизбежно, но старайтесь держаться как можно меньше.

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

Смежные вопросы