Я, як правило, стикався з набагато більшими проблемами обслуговування, пов'язаними з чистими інтерфейсами, ніж з ABC, навіть з ABC, які використовуються з багатократним успадкуванням. YMMV - не знаю, можливо, наша команда просто використала їх недостатньо.
Це означає, що якщо ми використовуємо реальну світову аналогію, то як багато застосовують чисті інтерфейси, повністю позбавлені функціональності та стану? Якщо я використовую USB як приклад, це досить стабільний інтерфейс (я думаю, ми зараз на USB 3.2, але він також підтримував зворотну сумісність).
Але це не інтерфейс без громадянства. Він не позбавлений функціональності. Це більше схоже на абстрактний базовий клас, ніж на чистий інтерфейс. Це насправді ближче до конкретного класу з дуже специфічними функціональними та державними вимогами, і лише абстракція полягає в тому, що пробки до порту є єдиною замінною частиною.
Інакше це просто "дірка" у вашому комп’ютері зі стандартизованим форм-фактором та значно слабкішими функціональними вимогами, які б нічого не зробили самостійно, поки кожен виробник не придумав власне обладнання, щоб змусити цю дірку щось робити, і в цей момент він стає набагато слабшим стандартом і не що інше, як «дірка» та конкретизація того, що він повинен робити, але немає центрального положення про те, як це зробити. Тим часом у нас може з’явитися 200 різних способів зробити це після того, як всі виробники обладнання спробують придумати власні способи приєднати функціональність та стан до цієї «дірки».
І тоді ми можемо мати певних виробників, які впроваджують різні проблеми в порівнянні з іншими. Якщо нам потрібно оновити специфікацію, у нас може бути 200 різних конкретних реалізацій USB-портів із абсолютно різними способами вирішення специфікації, що потребує оновлення та тестування. Деякі виробники можуть розробити фактичні стандартні реалізації, якими вони діляться між собою (ваш аналогічний базовий клас, що реалізує цей інтерфейс), але не всі. Деякі версії можуть бути повільнішими, ніж інші. Деякі можуть мати кращу пропускну здатність, але гірші затримки або навпаки. Деякі можуть використовувати більше енергії акумулятора, ніж інші. Деякі можуть відшаровуватися і не працювати з усім обладнанням, яке повинно працювати з портами USB. Деяким може знадобитися приєднання ядерного реактора для роботи, який має тенденцію піддавати користувачам радіаційне отруєння.
І саме це я знайшов, особисто, з чистими інтерфейсами. Можливо, є деякі випадки, коли вони мають сенс, як-от просто моделювати форм-фактор материнської плати щодо корпусу процесора. Аналогії форм-фактора дійсно є майже бездержавними і позбавленими функціоналу, як у аналогічної "дірки". Але я часто вважаю величезною помилкою команд вважати, що вони якимось чином вищі у всіх випадках, навіть не близьких.
Навпаки, я думаю, що набагато більше випадків було б вирішено краще ABC, ніж інтерфейси, якщо це два варіанти, якщо ваша команда не є настільки гігантською, що фактично бажано мати аналогічний вище еквівалент 200 конкуруючих реалізацій USB, а не один центральний стандарт підтримувати. У колишній команді, в якій я був, я фактично мусив боротися, просто послабити стандарт кодування, щоб дозволити ABC та багаторазове успадкування, і, головним чином, у відповідь на ці проблеми з технічним обслуговуванням, описані вище.