Według SOLID, nie tylko należy utworzyć interfejs, i nie tylko powinien on znajdować się w innym pliku, powinien znajdować się w innym zestawie.
Czemu? Ponieważ każda zmiana pliku źródłowego, który kompiluje się w zestawie, wymaga ponownej kompilacji zestawu, a każda zmiana w zestawie wymaga ponownej kompilacji dowolnego zestawu zależnego. Tak więc, jeśli twoim celem, opartym na SOLID, jest możliwość zastąpienia implementacji A implementacją B, podczas gdy klasa C zależna od interfejsu I nie musi znać różnicy, musisz upewnić się, że zestaw z I nie zmienia się, chroniąc w ten sposób zwyczaje.
„Ale to tylko rekompilacja”. Słyszę, że protestujesz. Może i tak, ale w aplikacji na smartfony, co jest łatwiejsze w przypadku przepustowości danych użytkowników; pobieranie jednego pliku binarnego, który się zmienił, czy pobieranie tego pliku binarnego i pięciu innych z zależnym od niego kodem? Nie każdy program jest napisany do użytku przez komputery stacjonarne w sieci LAN. Nawet w takim przypadku, gdy przepustowość i pamięć są tanie, mniejsze wydania poprawek mogą mieć wartość, ponieważ są trywialne w przekazywaniu do całej sieci LAN za pośrednictwem Active Directory lub podobnych warstw zarządzania domeną; Twoi użytkownicy będą czekać tylko kilka sekund, aż zostanie zastosowany przy następnym logowaniu, zamiast kilku minut, aby cała instalacja została ponownie zainstalowana. Nie wspominając o tym, że im mniej zestawów należy ponownie skompilować podczas budowania projektu, tym szybciej będzie on budował,
Zastrzeżenie: Nie zawsze jest to możliwe lub wykonalne. Najłatwiej to zrobić, tworząc scentralizowany projekt „interfejsów”. Ma to swoje wady; kod staje się mniej przydatny, ponieważ do projektu interfejsu ORAZ do projektu implementacji należy odwoływać się w innych aplikacjach, ponownie wykorzystując warstwę trwałości lub inne kluczowe komponenty aplikacji. Możesz rozwiązać ten problem, dzieląc interfejsy na bardziej ciasno połączone zespoły, ale wtedy masz więcej projektów w swojej aplikacji, co sprawia, że pełna kompilacja jest bardzo bolesna. Kluczem jest równowaga i utrzymanie luźno sprzężonej konstrukcji; zazwyczaj możesz przenosić pliki w razie potrzeby, więc gdy zobaczysz, że klasa będzie wymagała wielu zmian, lub że nowe implementacje interfejsu będą potrzebne regularnie (być może do połączenia z nowo obsługiwanymi wersjami innego oprogramowania,