Я хотел бы ответить с акцентом на использование интерфейсов в приложениях .NET. Полиморфизм в .NET может быть достигнут с помощью виртуальных или абстрактных методов или интерфейсов.
Во всех случаях существует сигнатура метода без реализации или реализации, которая может быть переопределена.
«Контракт» функции (или даже свойства) определен, но как метод реализован, логические возможности метода могут отличаться во время выполнения, определяемые тем, какой подкласс создается и передается методу или конструктор, или набор для свойства (акт «инъекции»).
Официальные руководящие принципы проектирования шрифтов .NET рекомендуют использовать абстрактные базовые классы поверх интерфейсов, поскольку у них есть лучшие возможности для их развития после доставки, они могут включать удобные перегрузки и лучше самодокументироваться и сообщать правильное использование разработчикам.
Однако необходимо соблюдать осторожность, чтобы не добавлять никакой логики. Искушение сделать это сожгло людей в прошлом, поэтому многие люди используют интерфейсы - многие другие люди используют интерфейсы просто потому, что это делают программисты, сидящие вокруг них.
Интересно также отметить, что, хотя сам DI редко используется слишком часто, использование каркаса для выполнения инъекции довольно часто используется в ущерб повышенной сложности, однако цепная реакция может происходить там, где все больше и больше типы необходимы в контейнере, даже если они никогда не переключаются.
Платформы IoC следует использовать с осторожностью, обычно только тогда, когда вам нужно поменять объекты во время выполнения, в зависимости от среды или конфигурации. Обычно это означает переключение «швов» основных компонентов в приложении, таких как объекты репозитория, используемые для абстрагирования уровня данных.
Для меня реальная сила IoC-фреймворка - переключать реализацию в тех местах, где вы не можете контролировать создание. Например, в ASP.NET MVC создание класса контроллера выполняется средой ASP.NET, поэтому внедрение чего-либо невозможно. Фреймворк ASP.NET имеет несколько хуков, которые фреймворки IoC могут использовать для «промежуточного» процесса создания и выполнения своей магии.
Люк