Zasadniczo napotykałem o wiele więcej problemów konserwacyjnych związanych z czystymi interfejsami niż ABC, nawet ABC używane z wielokrotnym dziedziczeniem. YMMV - nie wiem, może nasz zespół użył ich nieodpowiednio.
To powiedziawszy, jeśli użyjemy analogii ze świata rzeczywistego, ile jest wykorzystania czystych interfejsów całkowicie pozbawionych funkcjonalności i stanu? Jeśli użyję USB jako przykładu, jest to dość stabilny interfejs (myślę, że jesteśmy teraz na USB 3.2, ale zachował również kompatybilność wsteczną).
Jednak nie jest to interfejs bezstanowy. Nie jest pozbawiony funkcjonalności. To bardziej jak abstrakcyjna klasa bazowa niż czysty interfejs. W rzeczywistości jest bliżej konkretnej klasy o bardzo specyficznych wymaganiach funkcjonalnych i stanowych, a jedyną abstrakcją jest to, co podłącza się do portu i jest jedyną możliwą do zastąpienia częścią.
W przeciwnym razie byłby to po prostu „dziura” w komputerze o znormalizowanym formacie i o wiele luźniejszych wymaganiach funkcjonalnych, które nie zrobiłyby nic samodzielnie, dopóki każdy producent nie wymyślił własnego sprzętu, aby coś zrobić, w tym momencie staje się znacznie słabszym standardem i niczym więcej niż „dziurą” i specyfikacją tego, co należy zrobić, ale nie ma centralnego przepisu na to, jak to zrobić. Tymczasem możemy skończyć na 200 różnych sposobów, po tym jak wszyscy producenci sprzętu wymyślą własne sposoby na dołączenie funkcjonalności i stanu do tej „dziury”.
I w tym momencie możemy mieć niektórych producentów, którzy wprowadzają inne problemy niż inni. Jeśli potrzebujemy zaktualizować specyfikację, możemy mieć 200 różnych konkretnych implementacji portów USB, przy czym całkowicie różne sposoby radzenia sobie ze specyfikacją wymagają aktualizacji i przetestowania. Niektórzy producenci mogą opracowywać de facto standardowe implementacje, które dzielą między sobą (analogiczna klasa bazowa implementująca ten interfejs), ale nie wszyscy. Niektóre wersje mogą być wolniejsze niż inne. Niektóre mogą mieć lepszą przepustowość, ale gorsze opóźnienia lub odwrotnie. Niektóre mogą zużywać więcej energii baterii niż inne. Niektóre mogą się łuszczyć i nie działać z całym sprzętem, który powinien współpracować z portami USB. Niektóre mogą wymagać przyłączenia reaktora jądrowego do działania, który ma tendencję do zatrucia radiacyjnego użytkowników.
I to właśnie znalazłem osobiście z czystymi interfejsami. Mogą istnieć pewne przypadki, w których mają one sens, na przykład po prostu modelowanie kształtu płyty głównej na podstawie procesora. Analogie współczynników kształtu są w rzeczywistości prawie bezpaństwowe i pozbawione funkcjonalności, jak w przypadku analogicznej „dziury”. Ale często uważam za wielki błąd, gdy drużyny uważają, że jest to jakoś lepsze we wszystkich przypadkach, nawet nie w pobliżu.
Wręcz przeciwnie, uważam, że ABC może rozwiązać znacznie więcej przypadków niż interfejsów, jeśli są to dwie możliwości, chyba że twój zespół jest tak gigantyczny, że tak naprawdę pożądane jest posiadanie analogicznej powyżej równoważnej liczby 200 konkurencyjnych implementacji USB zamiast jednego centralnego standardu utrzymać. W poprzednim zespole, w którym pracowałem, faktycznie musiałem mocno walczyć, aby poluzować standard kodowania, aby umożliwić ABC i wielokrotne dziedziczenie, a przede wszystkim w odpowiedzi na opisane wyżej problemy konserwacyjne.