Tak, powinieneś kodować interfejsy zamiast znanych implementacji i tak, powinieneś najpierw zbudować interfejsy, a nie wymyślać je z własnego kodu.
Przyczyny obu zaleceń są w dużej mierze takie same: programowanie komputerowe dotyczy głównie czynników ludzkich. Wielu uważa to za zaskakujące, ale zastanów się: istnieje prawie nieskończona liczba różnych sposobów rozwiązania tego samego problemu komputerowego, które działają równie dobrze. Prawie wszystkie z nich są całkowicie niemożliwe do zrozumienia dla każdego, kto ich nie napisał (lub w rzeczywistości autorowi wkrótce).
Wynika z tego, że dobra inżynieria oprogramowania polega w dużej mierze na tym, jak osiągnąć pożądany efekt (poprawne obliczenia z rozsądną wydajnością) w sposób, który pozwala na późniejszą obróbkę kodu źródłowego. Interfejsy i interfejsy API są kluczową częścią tej dyscypliny: pozwalają myśleć o problemie na jednym poziomie opisu na raz. Jest to o wiele łatwiejsze niż jednoczesne myślenie o regułach spójności biznesowej i implementacjach list połączonych, dlatego wymuszenie takiego oddzielenia obaw jest lepsze niż pozwolenie programistom klienckim na użycie twojego kodu w dowolny sposób.
Trudno w to uwierzyć wielu kowbojskim programistom, którzy są przekonani, że rozumieją wszystko, co piszą, są znacznie lepsi niż przeciętni myśliciele i potrafią poradzić sobie z całą złożonością, która sprawia kłopoty „mniejszym” programistom. Nieznajomość własnych ograniczeń poznawczych jest niezwykle powszechnym zjawiskiem - dlatego najlepsze praktyki w organizacji kodu są tak niezwykle ważne (i tak często ignorowane).
Powtarzając, interfejsy i bariery API są w dużej mierze dobre , nawet jeśli współpracujesz tylko ze sobą. Jeśli chodzi o biblioteki zewnętrzne, jeśli mają ze sobą dobrze przemyślany interfejs API, nie widzę problemu w korzystaniu z niego, ponieważ jest tak długo, jak długo nie przewiduje się zamiany tej biblioteki na inną. W przeciwnym razie owijka lub warstwa antykorupcyjna może być bardzo dobrym pomysłem.