Много сервисов MVC делают конструктор контроллера очень большим.

StackOverflow https://stackoverflow.com/questions/333188

  •  22-07-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

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

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

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

Другие советы

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top