Я попытаюсь найти причину, по которой МОК может не понравиться с моей точки зрения.
Как и все остальное, контейнер IOC (или, как сказал Эйнштейн I = OC^2), представляет собой концепцию, которую вы должны решить самостоятельно, если вам это нужно или нет в вашем коде. Недавний модный протест в отношении МОК - это только мода. Не поддавайтесь моде, это прежде всего. Есть множество концепций, которые вы можете реализовать в своем коде. Прежде всего, я использую инъекцию зависимостей, так как я начал программировать, и узнал сам термин, когда он был популяризирован под этим именем. Контроль зависимостей - очень старая тема, и до сих пор она была рассмотрена триллионами способов, в зависимости от того, что отделялось от чего. Развязать все от всего - это вздор. Проблема с контейнером IOC заключается в том, что он пытается быть таким же полезным, как Entity Framework или NHibernate. При написании объектно-реляционного картографа просто необходимо, как только вам придется связывать любую базу данных с вашей системой, контейнер IOC не всегда необходим. Поэтому, когда контейнер МОК полезен:
- Когда у Вас есть ситуация со многими зависимостями, которые вы хотите организовать
- Если вы не заботитесь о сцеплении код с третьей стороной продуктом
- Когда ваши разработчики хотят научиться работать с новым инструментом
1: Это не так часто, что у вас так много зависимостей в вашем коде или что вы знаете о них в раннем дизайне. Абстрактное мышление полезно при абстрактном мышлении.
2: Совмещение кода с сторонним кодом является проблемой HuGe. Я работал с кодом, которому уже 10+ лет, и в то время это были фантастические и продвинутые концепции ATL, COM, COM + и т. Д. Теперь с этим кодом вы ничего не можете сделать. Я говорю, что продвинутая концепция дает очевидное преимущество, но это отменяется в долгосрочной перспективе с использованием самого устаревшего преимущества. Он просто сделал все это дороже.
3: Разработка программного обеспечения достаточно трудна. Вы можете расширить его до неузнаваемых уровней, если вы позволите некоторым расширенным понятиям обрезать ваш код. Проблема с IOC2. Хотя это развязка зависимостей, она также развязывает логический поток. Представьте, что вы нашли ошибку, и вам нужно установить перерыв, чтобы изучить ситуацию. IOC2, как и любая другая передовая концепция, затрудняет это. Исправление ошибки внутри концепции сложнее, чем исправление ошибки в более понятном коде, потому что, когда вы исправляете ошибку, концепция должна выполняться снова. (Чтобы дать вам пример, C++ .NET постоянно меняет синтаксис настолько, что вам нужно много думать, прежде чем реорганизовать какую-то более старую версию .NET.) Так в чем же проблема с IOC? Проблема заключается в разрешении зависимостей. Логика разрешения обычно скрыта в самой IOC2, написанной, может быть, необычным образом, что вам нужно учиться и поддерживать. Будет ли ваш сторонний продукт через 5 лет? Microsoft не было.
«Мы знаем, как синдром, написанный повсюду в отношении IOC2. Это похоже на тестирование автоматизации. Причудливый термин и идеальное решение на первый взгляд, вы просто ставите все свои тесты на ночь и видите результаты утром. Очень больно объяснять компании после компании, что на самом деле означает автоматическое тестирование. Автоматическое тестирование - это, безусловно, не быстрый способ уменьшить количество ошибок, которые вы можете ввести за одну ночь, чтобы повысить качество вашего продукта. Но мода делает это понятие досадно доминирующим. IOC2 страдает одним и тем же синдромом. Считается, что вам нужно реализовать его, чтобы ваше программное обеспечение было хорошим. Последнее интервью EvErY меня спросили, реализую ли я IOC2 и автоматизацию. Это признак моды: у компании была часть кода, написанная в MFC, которую они не оставят.
Вам необходимо изучить IOC2 как любую другую концепцию программного обеспечения. Решение, если IOC2 необходимо использовать, входит в состав команды и компании. Однако, прежде чем решение будет принято, следует упомянуть хотя бы ВСЕ приведенные выше аргументы. Только если вы видите, что плюсовая сторона перевешивает негативную сторону, вы можете принять положительное решение.
Нет ничего плохого в IOC2, за исключением того, что он решает только проблемы, которые он решает, и вводит проблемы, которые он представляет. Ничего больше. Однако идти против моды очень сложно, у них есть пот, последователи чего-либо. Странно, как никто из них не существует, когда проблема с их причудой становится очевидной. Многие концепции в индустрии программного обеспечения защищены, потому что они создают прибыль, книги написаны, проводятся конференции, выпускаются новые продукты. Это мода, обычно недолговечная. Как только люди находят что-то еще, они полностью отказываются от него. IOC2 полезен, но он показывает те же признаки, что и многие другие исчезнувшие концепции, которые я видел. Я не знаю, выживет ли он. Для этого нет правила. Вы думаете, что если это полезно, оно выживет. Нет, это не так. Одной большой богатой компании достаточно, и концепция может умереть в течение нескольких недель. Посмотрим. NHibernate выжил, EF занял второе место. Возможно, IOC2 тоже выживет. Не забывайте, что большинство концепций в разработке программного обеспечения ничего особенного не имеют, они очень логичны, просты и очевидны, и иногда сложнее запомнить текущее соглашение об именах, чем понимать саму концепцию. Знает ли IOC2 разработчика лучше разработчика? Нет, потому что, если разработчику не удалось придумать концепцию, похожую по характеру на IOC2, то ему или ей будет трудно понять, какая проблема IOC2 решает, используя ее будет выглядеть искусственно, и он или она может начать использовать ее ради того, чтобы быть каким-то политически правильным.
Хороший вопрос. Я отвечаю на это в комментариях, поскольку я очень новичок в идее МОК. Похоже на идею компонентов plug and play и развязки. Если у вас будет необходимость использовать какой-либо другой компонент вместо текущего, это необходимо. Использование МОК заключается в подготовке кода для такого изменения, если оно возникает в ИМО. – shahkalpesh
@shahkalpesh, но я могу достичь свободной связи с простым DI. Однако я вижу вашу точку зрения, если я использую файл конфигурации. Однако я не уверен, что мне нравится использовать конфигурационный файл. Файлы Config очень многословны, трудности с рефакторингом и переключение между несколькими файлами. – Vadim
просто добавляете комментарий, так как кажется, что вы ищете причины использовать IoC в основном; но что-то еще нужно сказать о вашей проблеме. Вы не можете написать свой код на уровень худшего человека в вашей команде или опасаться, что они не захотят учиться. У вас есть ответственность не только за то, чтобы быть профессионалом, но и за ваше будущее расти, и ваша команда не должна вас удерживать. –