Использование единства для отделения уровня бизнес-логики от уровня доступа к данным - PullRequest
2 голосов
/ 19 июня 2010

Я реализовал Unity в своем проекте Asp.Net MVC2. В настоящее время я регистрирую свои типы BLL при запуске приложения.

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

Моя следующая мысль состоит в том, чтобы удалить мои зависимости, содержащиеся в моих классах BLL, которые связаны с конкретной реализацией классов слоя DAL. Я также хотел бы иметь возможность делать это через внедрение свойства вместо внедрения конструктора, поскольку я ссылаюсь на несколько классов в моих методах класса Bll.

Я надеялся получить какое-нибудь руководство по каким-либо решениям, которые решают именно эту проблему, или это полностью излишне?

1 Ответ

2 голосов
/ 19 июня 2010

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

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

Вы упомянули использование внедрения свойств из-за количества зависимостей в ваших классах BLL.Хотя я понимаю это, я думаю, что все еще важно следовать правилу required = constructor.Если в итоге вы получите конструктор, имеющий слишком много зависимостей, то это запах кода, указывающий на проблему где-то в вашем проекте.Может случиться так, что класс принимает на себя слишком много обязанностей (обычно это происходит, если вы обнаружите, что некоторые методы требуют одну группу зависимостей, а другая группа требует другого набора).Возможно также, что работа, выполняемая с зависимостями, является слишком гранулированной и может быть заключена в другой объект, который может координировать работу зависимых классов.

...