2009-04-02 8 views
5

SRP (PDF wersja; HTML wersja) stwierdza, że ​​Kiedy naruszasz SRP (Zasada Jednej Reponsibility)?

Nigdy nie powinno być więcej niż jeden powód klasą zmienić

Gdy przyjrzeć Outlook, okno Kalendarz wydarzeń , ma "Zapisz i Zamknij".

alt text

Więc kiedy funkcjonalności jednego lub obu Zapisz lub Zamknij zmiany, który przycisk należy zmienić. To oczywiście narusza SRP.
Ta funkcja oszczędza czas i jest wygodna, ponieważ większość użytkowników oczekuje, że zrobi to po zapisaniu terminu w kalendarzu.

Ale teraz moje pytanie brzmi, kiedy inny czy naruszają SRP inny niż gdy funkcja musi być usuable w Outlook?

+0

Co? Jak zmienia się przycisk, gdy zmienia się zapis lub zamknięcie? Jak myślisz, która klasa implementuje Zapisz i zamknij? W jaki sposób zmiana tych funkcji ma wpływ na przycisk? –

+0

To, co miałem na myśli przez "zmianę", to to, że podstawowa realizacja zmiany "zapisz" lub "zamknij"; Nie, gdy interfejs użytkownika przycisku musi się zmienić. – Sung

+0

Zły przykład. Funkcja z kodem przycisku posiada _sekwencję_ dwóch akcji: "Zapisz()" i "Zamknij()". To nie narusza niczego. Dowolna funkcja może być sekwencją, iteracją lub wyborem. –

Odpowiedz

19

Aplikacja SRP nie ma zastosowania do interfejsów użytkownika. Pamiętaj, że pomimo tego, że przycisk nazywa się "Zapisz i zamknij", bez wątpienia mogą istnieć dwie oddzielne metody lub typy do obsługi funkcji zapisywania i zamykania. Przycisk łączy te dwie oddzielne części funkcjonalne.

Jeśli czujesz potrzebę naruszenia SRP, musisz ponownie ocenić swoje podejście. Każde naruszenie SRP może zostać refakturowane na nową metodę lub typ, który ujawnia złożoną funkcjonalność za pomocą kompozycji dwóch elementów.

+1

W rzeczywistości dotyczy to również interfejsu użytkownika. Ale ten przykład pokazuje obiekt interfejsu użytkownika, który jest implementowany przez niektóre elementy sterowania i/lub modelowania pod maską. Pytanie łączy zmiany interfejsu użytkownika ze zmianami modelu/kontroli; co nie ma większego sensu - każdy został zbudowany po SRP. –

+0

Tak, zgadzam się z tobą. Po ponownym przeczytaniu mojego pierwszego zdania zdałem sobie sprawę, że jestem w rzeczywistości niepoprawny. Myślę, że zostawię to tam, ponieważ twój komentarz nie ma większego sensu, jeśli go usunę. Doceniam Twój wyrazisty komentarz i nie chcę, aby pojawiał się poza kontekstem.:) –

+0

@Andrew: Według twojego komentarza masz na myśli, że SRP nie powinien nigdy (tak zły wybór słowa) zostać naruszony, a jeśli miałoby to zostać naruszone, struktura kodu musi się zmienić? – Sung

Powiązane problemy