2012-08-07 4 views

Odpowiedz

13

Nie powiedziałbym sam. Klasa może mieć jedną odpowiedzialność, ale robić wiele rzeczy w procesie i wdrożyć jeden interfejs dla każdego zestawu rzeczy, które musi wykonać, aby wypełnić swoją odpowiedzialność.

Ponadto, interfejsy w Javie mogą być używane do mówienia o właściwościach klasy (na przykład Comparable i Serializable), ale nie mówią nic o odpowiedzialności klasy.

Jeśli jednak klasa implementuje wiele interfejsów, z których każdy odpowiada jednej odpowiedzialności, to , a następnie, co byłoby naruszeniem tej zasady.

0

"Pojedyncza odpowiedzialność" zależy od poziomu abstrakcji. Na przykład złożony system, biorąc pod uwagę go na poziomie systemu, może ponosić jedną odpowiedzialność. Na przykład, odpowiedzialność systemu telewizyjnego polega na pokazywaniu obrazu wideo. Na następnym, niższym poziomie, ten system składa się z podsystemów, monitora, jednostki napędowej itd. Na tym poziomie każda z tych jednostek ma własną odpowiedzialność.

W ten sam sposób klasa na jednym poziomie może być uważana za jedną odpowiedzialność. Ale na niższym poziomie może mieć inne moduły składowe (klasy, interfejsy itp.), Które wykonują części swojej pracy. Na przykład obowiązkiem klasy ucznia jest reprezentowanie abstrakcji studenckiej. Może jednak mieć inną jednostkę (klasę), która reprezentuje adres studenta.

W ten sposób korzystanie z wielu interfejsów samo w sobie nie narusza zasad obiektowych.

1

Może, ale niekoniecznie.

Interfejs nie jest odpowiedzialny. There's a very powerful mode of architecture, który wyświetla interfejsy definiujące obiekt, który może odtwarzać obiekt w aplikacji.

Pomyśl o tym, co to oznacza. Można mieć Person klasę ze wszystkimi rodzajami interfejsów (użyjmy konwencję nazewnictwa dla .net)

class Person : IAmAStudent, IDrawSocialSecurity, IAmACitizen { 
    public SocialSecurityNumber getSocialSecurityNumber() { 
     return this.ssn; 
    } 
    private SocialSecurityNumber ssn; 
    public Person(SocialSecurityNumber ssn) { this.ssn = ssn; } 
} 

Teraz oczywiście nie może to naruszać SRP. Wyraźnie ma on jeden numer tylko jeden powód zmiany - jeśli zmienia się relacja między ludźmi a numerami ubezpieczenia społecznego. Jednak obiekt implementuje wiele interfejsów i odgrywa kilka ról w aplikacji.

Teraz, jeśli implementujesz wiele interfejsów, które eksponują różne funkcje możesz naruszać SRP, ale może to być również trochę osądu, jak również. Zasada odpowiedzialności pojedynczej jest świetną zasadą dla osiągnięcia luźnego sprzężenia, ale nie jest to jedyny ideał w mieście. Istnieje również wysoka spójność, która stwierdza, że ​​powiązany kod powinien żyć razem. Obaj są zasadniczo w sprzeczności (choć często istnieją sposoby na osiągnięcie dobrej równowagi).Więc możesz rozsądnie dokonać wyboru w kierunku jednego nad drugim i świadomie zdecydować się na naruszenie SRP.

Ostatecznie, SRP i wszystkie reguły SOLID bardziej skupiają się na tym, aby myśleć pewnymi liniami, a nie, że ślepo za nimi podążasz.