Я очень осведомлен о том, что такой вопрос, вероятно, уже был опубликован. Тем не менее с участием IoC в этом случае и большого количества кода я видел коллегу в компании, в которой я новичок, поставил этот вопрос.Каждый интерфейс явно реализован? (Задействован IoC)
Сценарий:
В кодовых одного продукта этот коллега построить каждый интерфейс реализован в явном виде. Все приложение строится с помощью структурной карты, но в некоторых местах используются конкретные типы и отливать, как этот
((IInterface)concreteClass).SomeMethod()
Справочная информация:
что коллега объяснил мне, после выяснения того, что речь идет о явном внедряя все интерфейсы, которые недавно представили StructureMap, и многие люди все равно будут использовать конкретные типы. Таким образом, по сути, это средство «воспитывать» людей в компании.
Мои центах по этому вопросу:
Прежде всего, переход на StructureMap было сделано несколько лет назад и в то время как это, своего рода, заставляет использовать интерфейсы более, на мой взгляд, это не правильно. То, как я это вижу, люди, которые знают о конкретном типе, могут увидеть реализацию и легко понять то, что я показал выше ... просто бросьте ее. Четкие соглашения об обмене или кодировании сделают это намного лучше. Если используется IoC и нет конкретного класса, то явно имплицирование интерфейса совершенно бесполезно.
Я также слышал, что это действительно может испортить наследование, но не знаю примера. Я также видел Jon Skeet отчасти не рекомендуется использовать его так, как это было упомянуто выше, а скорее способом, которым он предназначался использовать, например, с IEnumerable <> и другими столкновениями имен.
Может ли кто-нибудь пролить свет на этот вопрос для меня. Плюсы и минусы (хотя я очень предвзятый, чтобы не делать этого, следовательно, мой пост здесь) и особенно причины, почему тот или другой.
Спасибо!
Редактировать: Я очень хорошо знаю, что это не вопрос правильного или неправильного, и нет реального ответа. Это больше вопрос, чтобы научиться знать дефицит каждого подхода. Почему я должен использовать один сценарий по другому?
Я уже читал это. Проблема заключается в том, что вы можете аргументировать то же самое против него. Лично я использовал бы только явную реализацию интерфейса, когда это действительно необходимо, так как это может испортить ситуацию, и вы действительно не имеете никакой пользы от ее использования при нормальной реализации. Но я бы очень хотел услышать больше двух сторон. Зачем препятствовать этому или почему его поощрять. Что, на ваш взгляд, заставляет его использовать и что вы получаете от этого? Спасибо! –
@Qudeid Лично я использую явные реализации, когда интерфейс, как правило, используется не столь прозрачными механизмами структуры. Типичным примером будет «IConvertible». Я не видел столько кода, напрямую вызывающего метод этого интерфейса, он обычно используется через System.Convert. Тем не менее, я не уверен, что есть правильный или неправильный способ сделать это, это скорее стиль кодирования I Угадай. – InBetween
Нет правильного пути. Мне будет больше обсуждать, какие проблемы вы можете столкнуться, когда идете так или иначе. Проблема, которую я вижу с вышеприведенным сообщением, заключается в том, что кто-то излагает причину использования HIS, но он тоже опускает много вещей. Он очень похож на проповедь, учитывая комментарии ниже. Возможно, мне следует отредактировать мой вопрос, что это должно быть скорее обсуждение, чем вопрос. –