Я очень хорошо осведомлен о том факте, что такой вопрос, вероятно, уже был опубликован. Тем не менее, с участием IoC в этом случае и большим количеством кода, который я видел, коллега в компании, в которой я новичок, поднял этот вопрос.
Сценарий:
В кодовой базе одного продукта этого коллеги билд каждый интерфейс реализован явно. Все приложение построено с помощью карты структуры, но в некоторых местах используются конкретные типы и приводятся вот так.
((IInterface)concreteClass).SomeMethod()
Предыстория:
Этот коллега объяснил мне после того, как спросил, что это за явная реализация всех интерфейсов, что они недавно представили StructureMap, и многие люди до сих пор просто используют конкретные типы. Так что по сути это средство «обучения» людей в компании.
Мои центы по этому поводу:
Во-первых, переход на StructureMap был сделан несколько лет назад, и хотя это как бы вынуждает больше использовать интерфейсы, на мой взгляд, это неправильный путь. Как я это вижу, люди, которые знают о конкретном типе, могут увидеть реализацию и легко сделать то, что я показал выше... просто приведите его. Четкое общение или соглашения о кодировании сделали бы это намного лучше. Если используется IoC и нет конкретного класса, то явное внедрение интерфейса совершенно бесполезно.
Я также слышал, что это может действительно испортить наследование, но не знаю примера. Я также видел, как Jon Skeet как бы отговаривал его от использования упомянутым выше способом, а скорее так, как он был предназначен для использования, например, с IEnumerable‹> и другими конфликтами имен.
Может ли кто-нибудь пролить свет на этот вопрос для меня. Плюсы и минусы (хотя я очень склонен этого не делать, поэтому мой пост здесь) и особенно причины того или иного.
Спасибо!
Редактировать: я очень хорошо знаю, что это не вопрос правильного или неправильного, и нет реального ответа. Это скорее вопрос, чтобы научиться знать недостатки каждого подхода. Почему я должен использовать в одном сценарии один подход над другим?