Разговор о инъекции зависимостей
В объектно-ориентированном программировании проблема, с которой мы часто сталкиваемся, заключается в развязке. Чем ниже соединение программы указывает на читаемость и обслуживание программы. Инверсия управления (инверсия управления или МОК) является широко используемым принципом дизайна объектно-ориентированного программирования. Используя этот принцип, мы можем уменьшить связь. Среди них инъекция зависимостей является наиболее часто используемой реализацией контрольной инверсии.
Что такое зависимость
Зависимость является распространенным явлением в программах. Например, энергия экземпляра класса газосирга используется в классной машине. Обычная практика состоит в том, чтобы явно создать экземпляр класса газендерства в классе автомобиля и назначить его энергии. Как показано в следующем коде
Интерфейс энергия {} класс Gasenergy реализует энергию {} класс CAR {Energy Energy = new GasEnergy ();}Есть проблемы
Классовые автомобили берут на себя ненужные обязанности и несут ответственность за создание энергетических объектов, которые неизбежно имеют серьезную связь. Чтобы привести реалистичный пример, автомобиль несет ответственность за использование энергии, которую автомобиль использует не зависит от автомобиля, а от производителя автомобиля.
Масштабируемость. Предполагая, что мы хотим изменить энергию на электроэнергию, мы должны изменить класс автомобиля, что, очевидно, не соответствует принципу открытого закрытия.
Не способствует модульным тестированию.
Инъекция зависимости
Инъекция зависимости является таким поведением. В классном автомобиле объект Gasenergy не создается активно, но зависимость устанавливается путем передачи его в объект Gasenergy образуется внешне. Существует три общих метода инъекции зависимости.
Инъекция конструктора
Передайте необходимую зависимость в качестве параметров конструктора для завершения введения зависимости.
Class Car {Energy Menergy; Public Car (Energy Energy) {Menergy = Energy; }}Инъекция метода сеттера
Добавьте метод сеттера, параметр - это зависимость, которую необходимо ввести, и инъекция зависимостей может быть завершена.
Class Car {Energy Menergy; public void setenergy (энергия энергии) {menergy = энергия; }}Внедрение интерфейса
Инъекция интерфейса является самоочевидным, он должен создать набор интерфейсов для введения зависимости, а зависимость передается в виде параметров, а инъекция зависимости в конкретной реализации завершается путем вызова единого интерфейса.
Интерфейс EnergyConsumerInterface {public void setEnergy (Energy Energy);} Class Car реализует EnergyConsumerInterface {Energy Menergy; public void setenergy (энергия энергии) {menergy = энергия; }}Инъекция интерфейса аналогична инъекции метода сеттера, разница состоит в том, что инъекция интерфейса использует унифицированный метод для завершения инъекции, в то время как имя метода впрыска метода сеттера относительно случайно.
Рамочные компромиссы
Есть много рамок для инъекции зависимостей, наиболее известным является Guice. Конечно, Spring также поддерживает инъекцию зависимости. Guice использует аннотации чтения времени выполнения, генерирует зависимости и внедряет их посредством размышлений. Эта форма не очень подходит для мобильных устройств Android. В конце концов, эти операции обрабатываются во время выполнения и имеют высокопроизводительные требования.
Кинжал является подходящей библиотекой впрыскивания зависимостей для разработки Android. Он также использует форму классовых аннотаций. Разница в том, что он генерирует вспомогательные классы во время компиляции и ожидает, пока генерируемые вспомогательные классы не будут использованы для завершения впрыскивания зависимости во время выполнения.
Использовать или нет
На самом деле, использовать или не использовать структуру, является проблемой. Если вы используете структуру, все в команде должны следовать инструкциям для написания кода для решения инъекции зависимости. Эти рамки нелегко начать, и коэффициенты обучения относительно сложны и трудно освоить, что также является проблемой, которую необходимо учитывать.
Мое личное мнение заключается в том, что мы не рекомендуем и не выступаем против использования этих рамок, но я чувствую, что иногда мы надеемся на рамки, поэтому лучше обратить внимание на эти проблемы в нашей повседневной жизни. Разве искусственное избегание также не является основным требованием для себя?
Поиск зависимости
Поиск зависимостей - это конкретная реализация принципа инверсии управления, в отличие от пассивного принятия инъекции зависимостей, поиск зависимостей является активным запросом. При необходимости объект получается путем вызова методов, предоставленных рамками. При получении соответствующие пути файла конфигурации, ключи и другую информацию требуются для определения состояния полученного объекта.
Выше приведено подробное введение в информацию о инъекции зависимости. Мы будем продолжать добавлять соответствующую информацию в будущем. Спасибо за вашу поддержку на этом сайте!