Я спробую знайти, чому з моєї точки зору МОК може бути корисним.
Як і у всьому іншому, контейнер 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 страждає тим же синдромом. Вважається, що вам потрібно реалізувати це для того, щоб ваше програмне забезпечення було хорошим. Нещодавнє інтерв'ю EvErY мене запитали, чи впроваджую IOC2 та автоматизацію. Це ознака моди: компанія мала частину коду, написаного в MFC, який вони не відмовляються.
Вам потрібно вивчити IOC2, як і будь-яку іншу концепцію програмного забезпечення. Рішення про необхідність використання IOC2 - це команда та компанія. Однак принаймні ВСІ вище наведені аргументи повинні бути згадані перед прийняттям рішення. Тільки якщо ви бачите, що плюс сторони переважає негативну сторону, ви можете прийняти позитивне рішення.
У IOC2 немає нічого поганого, окрім того, що він вирішує лише проблеми, які він вирішує, і вводить проблеми, які він вводить. Більш нічого. Однак піти проти моди дуже важко, у них пітніють рот, послідовники чого завгодно. Дивно, як ніхто з них не виникає, коли проблема їх фантазії стає очевидною. Багато концепцій в галузі індустрії програм було захищено, оскільки вони приносять прибуток, пишуться книги, проводяться конференції, виробляються нові продукти. Це мода, як правило, недовговічна. Як тільки люди знаходять щось інше, вони повністю відмовляються від цього. IOC2 корисний, але він показує ті ж ознаки, що і багато інших зниклих концепцій, які я бачив. Я не знаю, чи виживе. Для цього немає правила. Ви думаєте, якщо це корисно, воно виживе. Ні, це не йде таким шляхом. Однієї великої багатої компанії достатньо, і концепція може загинути протягом декількох тижнів. Побачимо. NHibernate вижив, EF вийшов другим. Можливо, IOC2 теж виживе. Не забувайте, що більшість понять у розробці програмного забезпечення - це ні про що особливе, вони дуже логічні, прості і очевидні, а іноді складніше запам’ятати діючу конвенцію про іменування, ніж зрозуміти саму концепцію. Чи знання IOC2 робить розробника кращим розробником? Ні, тому що якщо розробник не зміг придумати концепцію, подібну за своєю суттю до IOC2, йому буде складно зрозуміти, яку проблему вирішує IOC2, використовуючи її, вона виглядатиме штучно, і він або вона може почати її використовувати заради того, щоб бути якоюсь політично коректною. Не забувайте, що більшість понять у розробці програмного забезпечення - це ні про що особливе, вони дуже логічні, прості і очевидні, а іноді складніше запам’ятати діючу конвенцію про іменування, ніж зрозуміти саму концепцію. Чи знання IOC2 робить розробника кращим розробником? Ні, тому що якщо розробник не зміг придумати концепцію, подібну за своєю суттю до IOC2, йому буде складно зрозуміти, яку проблему вирішує IOC2, використовуючи її, вона виглядатиме штучно, і він або вона може почати її використовувати заради того, щоб бути якоюсь політично коректною. Не забувайте, що більшість понять у розробці програмного забезпечення - це ні про що особливе, вони дуже логічні, прості і очевидні, а іноді складніше запам’ятати діючу конвенцію про іменування, ніж зрозуміти саму концепцію. Чи знання IOC2 робить розробника кращим розробником? Ні, тому що якщо розробник не зміг придумати концепцію, подібну за своєю суттю до IOC2, йому буде складно зрозуміти, яку проблему вирішує IOC2, використовуючи її, вона виглядатиме штучно, і він або вона може почати її використовувати заради того, щоб бути якоюсь політично коректною. Чи знання IOC2 робить розробника кращим розробником? Ні, тому що якщо розробник не зміг придумати концепцію, подібну за своєю суттю до IOC2, йому буде складно зрозуміти, яку проблему вирішує IOC2, використовуючи її, вона виглядатиме штучно, і він або вона може почати її використовувати заради того, щоб бути якоюсь політично коректною. Чи знання IOC2 робить розробника кращим розробником? Ні, тому що якщо розробник не зміг придумати концепцію, подібну за своєю суттю до IOC2, йому буде складно зрозуміти, яку проблему вирішує IOC2, використовуючи її, вона виглядатиме штучно, і він або вона може почати її використовувати заради того, щоб бути якоюсь політично коректною.