Size: a a a

2021 January 28

AT

Alexey Tkachenko in pro.net
Denis Petukhov
Я про то что не все обязательно инстанциировать с помощью DI
то есть ты лапами управляешь зависимостями?
источник

DP

Denis Petukhov in pro.net
Alexey Tkachenko
то есть ты лапами управляешь зависимостями?
Иногда можно
источник

DP

Denis Petukhov in pro.net
На то фактори и есть :}
источник

AT

Alexey Tkachenko in pro.net
Denis Petukhov
Иногда можно
здесь могла быть шутка про один раз
источник

DP

Denis Petukhov in pro.net
Смотря что считать зависимостью
источник

DP

Denis Petukhov in pro.net
Например я хочу написать pure business logic класс, в конструктор инжектируются данные
источник

DP

Denis Petukhov in pro.net
Вот эти данные придется гдето собрать например по сервисам и бдшкам а потом инстанциировать этот класс
источник

DP

Denis Petukhov in pro.net
Получается что мы руками зависимости собрали
источник

AT

Alexey Tkachenko in pro.net
Короче, если ты делаешь внедрение зависимостей, значит тебе это надо. Если некоторые зависимости имеют вид "это другое", то ещё раз подумай про архитектуру. После нескольких попыток так сделать ты получишь хрупкого монстра, и не дай бгг код будет "сопровождать его будет склонный к насилию психопат, который знает, где вы живёте" (с)
источник

DP

Denis Petukhov in pro.net
Но зато на логику легко юнит тесты написать и моков нет
источник

AT

Alexey Tkachenko in pro.net
Denis Petukhov
Например я хочу написать pure business logic класс, в конструктор инжектируются данные
тогда тебе не нужно прятать логику за интерфейс, либо подсовывай единственную реализацию
источник

DP

Denis Petukhov in pro.net
Так я и не прячу
источник

VS

Vasily Shapenko in pro.net
Denis Petukhov
Но зато на логику легко юнит тесты написать и моков нет
LOL
источник

DP

Denis Petukhov in pro.net
Ну а шо лол то
источник

DP

Denis Petukhov in pro.net
Можно делать и без конструктора конешно, просто pure function
источник

DP

Denis Petukhov in pro.net
Еще читается логика легко
источник

DP

Denis Petukhov in pro.net
Если есть возражения против такого то милости прошу
источник

IC

Ilya Chernoudov in pro.net
Denis Petukhov
Если есть возражения против такого то милости прошу
Может быть мы тебя неправильно понимаем, скинь минимальный  пример кода
источник

RI

Roman Ivasyk in pro.net
IdiocyAcceptance
А почему нельзя инжектить дефолтную реализацию точно так же, через параметр?
твоя правда
источник

DP

Denis Petukhov in pro.net
Ilya Chernoudov
Может быть мы тебя неправильно понимаем, скинь минимальный  пример кода
Просто не смешиваешь инфраструктуру и бизнес-логику. Есть класс с логикой который работает только с данными. Там нет async await, только данные принимаются в параметрах метода или когда нужно в конструкторе.
Собирает данные и прокидывает в конструктор/метод класса логики другой инфраструктруный класс. Например
public class InfraClass {
   public InfraClass(Dep1 dep1, Dep2 edp) {
       присваивание филдам
   }
   public async Task<Result> DoLogicAsync(param1, param2) {
       var data1 = await dep1.GetDataAsync(param1);
       var data2 = await dep2.GetDataAsync(param2);
       var logic = new LogicClass(data1, data2);
       return logic.GetResult();
   }
}

public class LogicClass {
   public LogicClass(Data1 data1, Data2 data2) {
       присваивание филдам.
   }
   
   public Result GetResult() {
       // logic using data1 and data2 here
   }
}
источник