МОК, AOP и многое другое
-
09-09-2019 - |
Вопрос
Что такое контейнер IOC?
Что такое IOC/DI Framework?
Зачем нам нужна структура для IOC/DI?
Есть ли связь между МОК/DI и AOP?
Что такое Spring.net/ninject по отношению к МОК и AOP?
Решение
JMSA,
Джеймс Ковач написал фантастическую статью, которая охватывает многие из ваших вопросов, я бы порекомендовал прочитать ее Здесь
Spring.net, Ninject, Unity, Castle Windsor, Autofac - все контейнеры IOC, которые настраиваются по -разному, многие из них также поддерживают AOP.
Фреймворки для IOC / DI полезны, поскольку они предоставляют стандартные механизмы, например, если вы нанимаете нового разработчика, мы гораздо проще сказать, мы используем эту структуру и передаем им ссылки в руководство по руководству / справочнику. В то же время эти рамки опробованы и протестированы крупным сообществом / компаниями.
Дайте мне знать, если какой -либо из ваших вопросов останется без ответа после прочтения статьи, и приведенное выше отвечает, и я сделаю все возможное, чтобы оказать дополнительную помощь.
Другие советы
С точки зрения семантики ...
Сама инъекция зависимости подразумевает зависимость, т.е. что -то, что есть требуется для строительства/использования («Основные проблемы» приложения). Например, автомобиль не является автомобилем без двигателя.
Аспекты описываются как перекрестные проблемы с основными проблемами приложения. Это означает, что как отдельно, так и не являются основными к основным проблемам (вы можете думать о них как о «хороших до ударах»). Поскольку приложение может работать без аспектов, действительно ли они зависимы? Например, машина все еще является автомобилем, даже без иммобилайзер.
(Конечно, это с теоретической точки зрения. В реальном мире такие вопросы, как безопасность, часто столь же важны для существования рыночного продукта, как и сами основной.
Таким образом, в то время как на практике DI можно использовать для реализации аспектов, я бы не назвал этот процесс True Di. Это исходит от того, кто использует исключительно инъекцию конструктора.
Мартин Фаулер имеет хорошую статью здесь о значении инверсии контроля и инъекции зависимости.
Использование Spring.net AOP подробно описано здесь. Анкет Я более знаком с версией Spring на базе Java, поэтому я не могу с уверенностью сказать, что Spring.net в настоящее время поддерживает только прокси-сервер AOP.
То есть класс, который должен быть рекомендован, должен реализовать интерфейс. Spring создаст динамический прокси, который реализует этот интерфейс и делегирует в исходный целевой экземпляр.
Хотя в нем говорится:
В будущем выпуске мы будем реализовать прокси, используя наследование, которое также позволит вам провести классы без интерфейсов и удалит некоторые из оставшихся необработанных справочных проблем, которые не могут быть решены с использованием прокси на основе композиции.