Инициирование против инъекций

Я пытаюсь лучше понять плюсы и минусы создания экземпляров и инъекций в разработке типа веб-приложения.

  1. Каковы плюсы и недостатки? минус для каждого?
  2. Когда они должны использоваться (какой сценарий мы смотрим)?
3 голоса | спросил Aeseir 6 WedEurope/Moscow2017-12-06T02:36:12+03:00Europe/Moscow12bEurope/MoscowWed, 06 Dec 2017 02:36:12 +0300 2017, 02:36:12

1 ответ


3

1. профи: , внешняя конфигурация для реализации клиента, а не реализация «в коде» (подумайте, если /else, если для каждого нового клиента). логика абстрагируется.

минус добавляет сложность, логика абстрагируется

2. Вы должны вводить «поведенческие» реализации, которые могут иметь отклонения на основе реализации или среды. Вещи, которые не изменяются, могут быть созданы

Долгосрочный ответ: Инъекция дает вам максимальную гибкость конфигурации конкретных реализаций /экземпляров. Это слой абстракции, который позволяет вам определить «поведение» реализаций (входы /выходы), чтобы вы могли построить свое приложение вокруг ожиданий. Тогда «исполнители» этих ожиданий могут быть настроены.

Клиент A использует базу данных SQL, клиент B использует базу данных Oracle.

Клиент A вызывает метод: public User GetUserByID (int id)

Клиент B вызывает метод: public User GetUserByID (int id)

, если мы создадим интерфейс, который содержит что-то вроде:

public interface IUserServices{
     User GetUserByID(int id)
}

Мы можем использовать инжектор, чтобы настроить, какую реализацию использовать. что-то вроде этого при запуске приложения для клиента A:

Bind<ClientA_UserServices>.To<IUserServices>(); 

и для клиента B:

Bind<ClientB_UserServices>.To<IUserServices>(); 

и в приложении:

public class DoSomethingWithUserService{
      IUserServices _svc;

      public DoSomethingWithUserService(IUserServices svc)
      {
            _svc = svc;
      }

      public void doSomething()
      {
            User theUser = _svc.GetUserByID(User.ID);
      }
}

теперь, кроме того, теперь вы можете выполнить модульный тест DoSomethingWithUserService и передать в тестовую реализацию IUserServices, которая может использовать статические тестовые данные или данные Mock.

ответил hanzolo 6 WedEurope/Moscow2017-12-06T03:30:50+03:00Europe/Moscow12bEurope/MoscowWed, 06 Dec 2017 03:30:50 +0300 2017, 03:30:50

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132