Много сервисов MVC делают конструктор контроллера очень большим. - PullRequest
2 голосов
/ 02 декабря 2008

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

Ответы [ 4 ]

2 голосов
/ 02 декабря 2008

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

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

Я действительно думаю, что количество услуг, которые вы потребляете, является проблемой здесь. Контейнеры IoC могут каким-то образом решить, каким образом вы привязываете типы к параметрам инъекции и т. Д., Но я думаю, что проблема заключается в вашей архитектуре на данный момент.

1 голос
/ 02 декабря 2008

Хотя я не знаю твоих настроек. 20, кажется, немного, я думаю, что вы идете против SRP (принцип единой ответственности). Но так как я не вижу ваш код, сказать невозможно. Если вам действительно нужны все эти сервисы в одном классе модели, то, возможно, вам нужно поместить их в фабричный класс и использовать их в качестве параметра.

Трудно дать хороший ответ на этот вопрос, так как мы не знаем ваш домен.

1 голос
/ 02 декабря 2008

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

0 голосов
/ 02 декабря 2008

Как сказал @Matt, здесь может помочь внедрение зависимостей, и sprint.NET - хороший пример, и есть несколько других.

Учитывая, что вы упомянули MVP, в частности, вы должны хотя бы взглянуть на Ent Lib 4.1 , который теперь имеет Unity , взятие Microsoft на DI. Их сайт codeplex , вероятно, является хорошим местом для начала, если он новый.

Существуют также фабрики программного обеспечения , которые интегрируются с Visual Studio и предоставляют вам инструменты для создания MVP для веб-сайтов в виде связанных или веб-сервисов. Они тоже происходят от паттернов и практик.

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