Jakie jest uzasadnienie zasady segregacji interfejsów?

Zasada segregacji interfejsów (ISP) mówi, że wiele interfejsów specyficznych dla klienta jest lepszych niż jeden interfejs ogólnego przeznaczenia. Dlaczego to jest ważne?

Author: Steve Chambers, 2008-09-12

7 answers

ISP stwierdza, że:

Klienci nie powinni być zmuszani do polegania na metody, których nie używają.

ISP odnosi się do ważnych cech- spójności i sprzężenia .
Idealnie komponenty muszą być ściśle dopasowane. Poprawia to odporność i łatwość konserwacji kodu.

Egzekwowanie ISP daje następujące bonusy:

  • Wysoka spójność - lepsza zrozumiałość, solidność
  • niskie sprzęgło - lepsza konserwacja, wysoka odporność na zmiany

Jeśli chcesz dowiedzieć się więcej o zasadach projektowania oprogramowania, Pobierz kopię z zwinne tworzenie oprogramowania, Zasady, wzorce i praktyki książka.

 31
Author: aku,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-13 04:57:04

Segregacja interfejsu to " I " na zasadzie stałej, zanim przekopamy się zbyt głęboko z pierwszym, wyjaśnijmy, co oznacza to drugie.

SOLID można uznać za zbiór najlepszych praktyk i zaleceń ekspertów (co oznacza, że zostały one udowodnione wcześniej) w celu zapewnienia niezawodnej podstawy w projektowaniu aplikacji. Praktyki te mają na celu ułatwienie utrzymania, rozszerzenia, dostosowania i skalowania naszych aplikacji.

Dlaczego warto dbać o Solidne programowanie?

Po pierwsze, musisz zdać sobie sprawę, że nie będziesz na zawsze tam, gdzie jesteś. Jeśli korzystamy ze standardów i dobrze znanych architektur, możemy być pewni, że nasz kod będzie łatwy do utrzymania przez innych programistów, którzy nas ścigają, i jestem pewien, że nie chciałbyś zajmować się naprawianiem kodu, który nie stosował żadnej znanej metodologii, ponieważ byłoby to bardzo trudne do zrozumienia.

Zasada segregacji interfejsów.

Wiedz, że my wiesz, jakie są solidne zasady możemy uzyskać bardziej szczegółowe informacje na temat zasady segregacji interfejsu,ale co dokładnie mówi segregacja interfejsu?

"klienci nie powinni być zmuszani do wdrażania niepotrzebnych metod, które nie będą używać "

Oznacza to, że czasami mamy tendencję do tworzenia interfejsów z wieloma metodami, które mogą być do pewnego stopnia dobre, jednak może to być łatwo nadużywane, i możemy skończyć z klasami, które implementują puste lub bezużyteczne metody co oczywiście dodaje dodatkowy kod i obciążenie do naszych aplikacji. Wyobraź sobie, że deklarujesz wiele metod w jednym interfejsie, jeśli lubisz pomoce wizualne, klasa, która implementuje interfejs, ale naprawdę potrzebuje kilku metod, wyglądałaby tak:

Tutaj wpisz opis obrazka

Z drugiej strony, jeśli poprawnie zastosujesz segregację interfejsu i podzielisz interfejs na mniejsze podzbiory, możesz na pewno zaimplementować te, które są tylko potrzebne:

Tutaj wpisz opis obrazka

Zobacz! Jest sposób lepiej! Egzekwowanie tej zasady pozwoli Ci mieć niskie sprzęgło, co pomaga na lepszą konserwację i wysoką odporność na zmiany. Możesz więc naprawdę wykorzystać wykorzystanie interfejsów i implementację metod, kiedy naprawdę powinieneś. Teraz przejrzyjmy mniej abstrakcyjny przykład, powiedzmy, że zadeklarowałeś interfejs o nazwie Reportable

public interface Reportable {

        void printPDF();
        void printWord();
        void printExcel();
        void printPPT();
        void printHTML();


}

I masz klienta, który będzie eksportować tylko niektóre dane w formacie Excel, można zaimplementować interfejs, ale czy trzeba tylko wdrożyć metoda Excela? Odpowiedź brzmi nie, będziesz musiał kodować implementację dla wszystkich metod, nawet jeśli nie zamierzasz ich używać, może to spowodować wiele śmieci kodu, co utrudnia utrzymanie kodu..

Pamiętaj, aby to było proste i nie powtarzaj się, a przekonasz się, że już używasz tej zasady, nie wiedząc o tym.

 7
Author: isJustMe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-05 20:06:05

Upraszcza interfejs, który będzie używany przez jednego klienta i usuwa zależności, które w przeciwnym razie mogłyby rozwinąć się na częściach interfejsu, które nie są mu potrzebne.

 5
Author: Bill the Lizard,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-12 13:47:05

Jednym z powodów jest to, że posiadanie wielu interfejsów z minimalną ilością metod dla każdego z nich ułatwia implementację każdego interfejsu i ich poprawne wdrożenie. Duży interfejs może być niesforny. Ponadto, użycie interfejsu focused w scenariuszu sprawia, że kod jest bardziej konserwowalny, ponieważ możesz zobaczyć, który aspekt obiektu jest używany(np. interfejs IComparable pozwala Ci wiedzieć, że obiekt jest używany tylko do porównań w danym scenariuszu).

 3
Author: Mark Cidade,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-12 17:07:35

Zasada ta służy przede wszystkim celom bliźniaczym

  • Aby Kod był bardziej czytelny i łatwiejszy w zarządzaniu.

  • Promuje pojedynczą odpowiedzialność za zajęcia ( wysoka spójność ). Oczywiście dlaczego klasa powinna mieć metodę, która nie ma wpływu na zachowanie? Dlaczego po prostu go nie usuniesz. Na tym polega ISP

Jest kilka pytań, które projektant musi zadać z obawy do ISP

  • co można osiągnąć z ISP
  • Jak analizować już istniejący kod dla wszelkich naruszeń ISP

Aby kontynuować tę dyskusję, muszę również dodać, że zasada ta nie jest "zasadą" w ścisłym tego słowa znaczeniu, ponieważ w pewnych okolicznościach zastosowanie ISP do projektu, zamiast promowania czytelności, może sprawić, że struktura obiektu będzie nieczytelna i zagracona niepotrzebnym kodem. Można to zaobserwować na jawie.awt.pakiet zdarzeń

Więcej na moim blogu: http://design-principle-pattern.blogspot.in/2013/12/interface-segregation-principle.html

 3
Author: aknon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-13 12:03:13

ISP jest ważne.

Podstawowa idea ISP: Klient nie powinien być zmuszony do polegania na metodach, których nie używa.

Zasada ta wydaje się być bardziej logiczna. Idealnie klient nie powinien wdrażać metod, które nie są używane przez Klienta.

Patrz poniżej pytanie SE Dla przykładu kodu:

Zasada segregacji interfejsu-Program do interfejsu

Zalety:

  1. Elastyczność : W przypadku braku ISP, masz jeden ogólny interfejs FAT i wiele klas implementujących go. Załóżmy, że masz 1 interfejs i 50 klas. Jeśli nastąpi zmiana interfejsu, wszystkie 50 klas musi zmienić swoją implementację.

    Z ISP, można podzielić ogólny interfejs FAT na drobnoziarniste małe interfejsy. Jeśli nastąpi zmiana w małym granularnym interfejsie, tylko klasy implementujące ten interfejs będą miały wpływ.

  2. Łatwość konserwacji i obsługi: od zmian są ograniczone do drobno ziarnistego interfejsu zamiast ogólnego interfejsu faktów, konserwacja kodu jest łatwiejsza. Niepowiązany kod nie jest już częścią klas implementacji.

 1
Author: Ravindra babu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:00:31

Aby uniknąć regresji, gdy tylko jeden klient-specyficzne zmiany lub jeden zachowanie-specyficzne. Jeśli połączyłeś wszystkie metody zachowania w jednym dużym interfejsie, zastanów się, jak skończysz testując wszystkie fragmenty kodu, gdzie wszystko, o czym wspomniałeś, to ten interfejs, nawet jeśli zaszły tylko małe zmiany.

Aby uzyskać bardziej szczegółowe wyjaśnienie, zapoznaj się z artykułem zasada segregacji interfejsu

 0
Author: Ranganatha,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-30 17:38:57