внедрение зависимости: какой из них должен быть сделан первым? атрибуты (поля) или зависимость? - PullRequest
2 голосов
/ 01 апреля 2020

Я новичок ie в внедрении зависимости, и у меня есть некоторые проблемы.

Прежде всего я знаю это:

Из книги Кристоффера Норинга, книги Пабло Дилемана «Обучение Angular» - Второе издание »:

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

Затем в одном из обучающих видеороликов инструктор сказал, что мы хотим использовать службу Tires в классе Car, поэтому мы внедрим ее в Класс автомобиля и затем мы создадим атрибут (шины) для его сохранения:

public class Car {

    private Tires tires; 

    public Car(Tires tires){
        this.tires = tires;
    }
}

Я не согласен с этим определением, и оно меня смущает, потому что я думаю, что это определение (определение инструктора) контрастирует с другое определение.

В большей части статьи о DI (так же, как и о Angular) говорится, что из-за необходимости использования экземпляров других объектов класса в нашем классе у нас есть некоторый класс зависимостей. но в этом определении говорится, что у нас есть объекты из другого класса, которые мы хотим внедрить в ваш класс, и вы должны создать некоторые переменные для сохранения этих значений.

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

1 Ответ

3 голосов
/ 01 апреля 2020

Я думаю, что сначала мы создадим атрибут

Я думаю, вы могли бы путать OOP концепции с инъекцией.

Вы Car служба * Класс 1009 * (не имеет ничего общего с OOP), требуется доступ к классу Tires service , поэтому экземпляр Car ожидает, что экземпляр Tires будет введен во время построения, и ему требуется чтобы сохранить его для дальнейшего использования, он сохраняет ссылку в поле (не атрибут 1 ).

Поле определено (объявлено, «создано») когда мы решим, что нам нужно сохранить введенную ссылку на потом.

Я думаю, вы могли бы сказать, что мы определяем ("создаем") поле, когда мы понимаем , нам нужна ссылка на Tire service, а затем go добавьте его как конструктор в качестве зависимости, но это всего лишь семантика c о том, когда вы пишете код, т.е. смотрите ли вы в будущее и создаете ли зависимость, прежде чем писать код, который в ней нуждается, или вы создаете зависимости на лету, когда пишете Код.

1) Слово «атрибут» используется, когда у нас есть методы getter (и setter) для использования внешним классом. Внедренная ссылка, только для внутреннего использования, не считается «атрибутом» класса.

...