Nano Hash - криптовалюты, майнинг, программирование

Дизайн — решение ада зависимостей?

Мы используем архитектуру MVC с моделью, состоящей из BLL и DAL.

Итак, мы разрабатываем «модули» для нашей системы, и тот, который я реализую, использует множество одних и тех же зависимостей. В частности, один класс имеет 20 зависимостей. В настоящее время конструктор по умолчанию создает конкретную реализацию по умолчанию, и у нас также есть второй конструктор [который использует первый], который позволяет внедрять собственные зависимости (т.е. тестирование).

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

Контейнер IoC кажется естественным решением этой проблемы, но проблема в том, как далеко я зайду? Включаю ли я зависимости DAL и зависимости BLL? А как насчет зависимостей «помощник» или «сервис»? Кажется, что в какой-то момент я просто воссоздаю структуру «пространства имен» с возможностью ссылаться на свои классы, как на статические классы, и в этот момент я задаюсь вопросом, что я на самом деле получаю.

У меня проблемы с обдумыванием этого. У кого-нибудь есть элегантное решение или совет?


  • У меня проблемы с обдумыванием этого. Ознакомьтесь с этим руководством: github.com/ninject/ninject/wiki 28.10.2011
  • По касательной: вот ответ, который я написал на другой вопрос об уменьшении количества зависимостей, которые принимает класс. stackoverflow.com/questions/5601920/ 28.10.2011

Ответы:


1

Если вы пойдете по маршруту IoC (который я рекомендую), я бы включил все ваши зависимости в контейнер.

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

например, ClassA принимает 4 других класса в своем конструкторе, каждый из которых принимает два других в своем, и каждый из них принимает по крайней мере ссылку DAL.

В этом случае вам просто нужно сослаться на IoC на уровне самого высокого уровня («корне композиции»), который может быть вашим пользовательским интерфейсом, и сказать «дайте мне экземпляр объекта A», а затем IoC автоматически создаст другие 20 экземпляров для различных зависимостей, необходимых для построения графа объектов.

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

Я также хотел бы отметить, что 20 зависимостей в одном классе — это определенный запах кода, даже если вы используете IoC. Обычно это указывает на то, что класс выполняет слишком много работы и нарушает принцип единой ответственности.

27.10.2011
  • +1 - Полностью согласен с тем, что IoC - это очевидный путь (извините за каламбур MVC), а также за то, что вы автоматически используете этот термин. 28.10.2011
  • +1 за упоминание о нарушении SRP. Определенно хорошая идея, чтобы посмотреть на дизайн. 28.10.2011
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

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

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..