2010-06-19 2 views
2

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

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

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

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

ответ

2

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

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

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

+0

Я считаю, что это последнее, что я, возможно, сделал классы Business Logic Layer слишком подробными. Я собираюсь пересмотреть классы Business Logic Layer, чтобы инкапсулировать некоторые из связанных функций Business Entities. Проблема в том, что моя модель домена велика вместе с множеством несвязанных объектов. Мне все еще любопытно, есть ли хорошие статьи с некоторыми указаниями о том, как создать контейнер, который будет использоваться через разные уровни вашего приложения? – JustinMichaels

+0

После того, как вы посоветовали реорганизовать классы Business Logic Layer для группировки функциональности. Я упростил свои зависимости и реализовал конструктор для каждого из моих контроллеров и классов BLL, у которых есть свои зависимости, введенные Unity. Я очень ценю помощь и руководство. – JustinMichaels

+0

Я рад, что смог помочь, особенно если это помогло вам прийти к более простому решению. – ckramer

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

  • Нет связанных вопросов^_^