«Когда ты ищешь в холодильнике, чем бы полакомиться, могут случиться непредвиденные и неприятные вещи. Ты можешь забыть закрыть дверь холодильника, можешь взять из него то, что не разрешают брать мама с папой. Можешь даже наткнуться на просроченные продукты.
Когда в следующий раз ты чего-то захочешь, просто скажи: “Я хочу после обеда съесть что-то сладкое”. Когда ты сядешь за стол, мы дадим тебе все, что нужно».
для предоставления необходимых служб сотрудничающие классы (пятилетний ребенок) должны зависеть от инфраструктуры (родителей).
Внедрение зависимостей представляет собой набор принципов и приемов проектирования программных продуктов, позволяющий разрабатывать слабосвязанный код.
Корень композиции не является частью уровня пользовательского интерфейса, даже притом, что он может быть помещен в ту же самую сборку
Сборки являются артефактами разработки: код делится на несколько сборок, чтобы его можно было развертывать по отдельности
Безусловно, самыми значимыми паттернами проектирования являются внедрение через конструктор (Constructor Injection) и корень композиции (Composition Root), а все остальные паттерны следует рассматривать как дополнительные, которые можно применять при особых обстоятельствах
Безусловно, самыми значимыми паттернами проектирования являются внедрение через конструктор (Constructor Injection) и корень композиции (Composition Root), а все остальные паттерны следует рассматривать как дополнительные, которые можно применять при особых обстоятельствах.
Корень композиции является единственным логическим местом в приложении, где модули составлены вместе
Однако при создании многократно используемых библиотек вопрос приобретает не столь однозначную оценку, поскольку здесь уже приходится иметь дело с обратной совместимостью. В этом свете абстрактные классы могут иметь больше смысла, поскольку неабстрактные компоненты могут быть добавлены позже, а вот добавление компонентов к интерфейсу является критическим изменением. Именно поэтому в руководстве по проектированию в среде .NET предпочтение отдается абстрактным классам
В конкретных классах могут быть реализованы несколько интерфейсов, тогда как в среде .NET они могут быть производными только от одного базового класса. Использование интерфейсов в качестве средств абстракции представляется более гибким приемом