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