Как получить количество просмотров в телеграммах с помощью API

Это означает, что объекты должны иметь только столько зависимостей, сколько необходимо для выполнения своей работы, а зависимости должны быть немногочисленными. Кроме того, зависимости объекта должны быть от интерфейсов, а не от «конкретных» объектов, когда это возможно. (Конкретный объект - это любой объект, созданный с ключевым словом new.) Свободная связь способствует большей возможности повторного использования, упрощает ремонтопригодность и позволяет вам легко создавать «макетные» объекты вместо дорогостоящих услуг.

«Инъекция зависимостей «(DI) также известен как« инверсия контроля »(IoC), может использоваться как способ поощрения этой свободной связи.

Существует два основных подхода к реализации DI:

  1. Инъектор конструктора
  2. Узел установки

Инъектор конструктора

Это метод передачи зависимостей объектов с его конструктором.

Обратите внимание, что конструктор принимает интерфейс, а не конкретный объект. Также обратите внимание, что исключение вызывается, если параметр orderDao имеет значение NULL. Это подчеркивает важность получения действительной зависимости. Constructor Injection - это, на мой взгляд, предпочтительный механизм предоставления объекту его зависимостей. Это понятно разработчику при вызове объекта, которые должны быть привязаны к объекту «Person» для правильного выполнения.

Setter Injection

Но рассмотрим следующий пример ... Предположим, вы иметь класс с десятью методами, которые не имеют зависимостей, но вы добавляете новый метод, который имеет зависимость от IDAO. Вы можете изменить конструктор для использования Constructor Injection, но это может заставить вас внести изменения во все вызовы конструктора по всему месту. Кроме того, вы можете просто добавить новый конструктор, который принимает зависимость, но тогда как разработчик легко знает, когда использовать один конструктор над другим. Наконец, если зависимость очень дорога для создания, почему она должна быть создана и передана конструктору, когда ее можно использовать редко? «Setter Injection» - это еще один метод DI, который можно использовать в таких ситуациях.

Setter Injection не приводит к передаче зависимостей конструктору. Вместо этого зависимости устанавливаются на публичные свойства, которые подвергаются объекту, который в этом нуждается. Как предполагалось ранее, основными мотиваторами для этого являются:

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

Вот пример того, как выглядел бы следующий код:

public class Person {
    public Person() {}

    public IDAO Address {
        set { addressdao = value; }
        get {
            if (addressdao == null)
              throw new MemberAccessException("addressdao" +
                             " has not been initialized");
            return addressdao;
        }
    }

    public Address GetAddress() {
       // ... code that uses the addressdao object
       // to fetch address details from the datasource ...
    }

    // Should not be called directly;
    // use the public property instead
    private IDAO addressdao;
0
задан Roman Pokrovskij 17 January 2019 в 00:43
поделиться