Я читаю его книгу Инъекция зависимостей в сети.
1) Здесь он говорит, что Bastard Injection
происходит только тогда, когда мы используем Foreign Default
.
Но в его книге иллюстрация на стр. 148 показывает, что Bastard Injection
возникает, когда реализация по умолчанию зависимостей - это Foreign Default
или Local Default
:
Таким образом, анти-шаблон Bastard Injection также возникает, когда по умолчанию реализация зависимостей - это Local Default
?
2) Here (а также в его книге) он отмечает, что для класса достаточно иметь дополнительную зависимость, при условии, что стандартная реализация этого зависимость хорошая Local Default
:
Но в следующем article он, похоже, возражает против наличия необязательных зависимостей вообще, даже если реализация по умолчанию - это Local Default
:
private readonly ILog log; public MyConsumer(ILog log) { this.log = log ??LogManager.GetLogger("My"); }
В терминах инкапсуляции основной проблемой такого подхода является что, похоже, класс MyConsumer не может реально решить независимо от того, контролирует ли он создание своей зависимости от журнала. В то время как это упрощенный пример, это может стать проблемой, если ILog экземпляр, возвращаемый LogManager, обертывает неуправляемый ресурс, который должен быть удален, когда он больше не нужен.
Являются ли его аргументы в приведенном выше отрывке также действительными, когда стандартная реализация зависимости является локальной? Если это так, следует также избегать необязательных зависимостей с локальными значениями по умолчанию?
3) Pg. 147:
Основная проблема с Bastard Injection заключается в том, что она использует FOREIGN DEFAULT..., мы больше не можем свободно повторно использовать класс, потому что он перетаскивает по зависимости, которую мы не можем хотеть. Также становится труднее сделать параллельное развитие, потому что класс сильно зависит от его ЗАВИСИМОСТЬ.
Foreign Default - это реализация зависимости, которая используется по умолчанию и определена в другой сборке, чем ее потребитель. Таким образом, с помощью Foreign Default, сборка пользователя также будет тянуть за сборку зависимостей.
Он также подразумевает, что Foreign Default делает параллельную разработку более сложной, а Local Default - нет? Если это так, то это не имеет смысла, так как я бы предположил, что сложность параллельного развития затруднена, так это то, что сбор потребителя имеет жесткую ссылку на сборку зависимостей, а скорее тот факт, что потребительский класс зависит от конкретной реализации зависимость?
спасибо