Jak rozumieć SRP?

0

Jak rozróżnić "funkcjonalności" w aplikacji? Co znaczy że klasa ma mieć jedną odpowiedzialność? Co znaczy że "Nigdy nie powinno być więcej niż jednego powodu do modyfikacji klasy"?

Niby proste pytanie ale wszystko da się praktycznie ująć jako pojedynczą funkcjonalność albo rozbić na wiele. "Powód" tak samo można dowolnie rozbijać na mniejsze powody lub ogólnikowo opisać wiele powodów jako jeden

Przykładowo mamy klasę która czyta i zapisuje do bazy danych - czy spełnia SRP?

Tak, bo klasa zajmuje się dostępem do bazy danych (jedna odpowiedzialność)
Czy może
Nie, bo klasa zajmuje się zapisem i odczytem z bazy (dwie odpowiedzialności)

Załóżmy że klasa tylko odczytuje z bazy, czy spełnia SRP?

Tak, bo tylko zajmuje się odczytem?
Czy może
Nie, bo odczytuje z kilku tabel / Nie, bo jest odpowiedzialna za odczyt pojedynczego rekordu lub listy rekordów / Nie, bo zajmuje się pobieraniem danych i ich agregacją?

Powód do zmiany jest:

Jeden - gdy zmieni się struktura bazy
Kilka - bo wymagana jest zmiana gdy zmieni się nazwa tabeli / nazwa kolumny lub silnik bazy danych?

Jak rozumieć "odpowiedzialność" i "powód"? Każdą odpowiedzialność można rozbić na nieskończenie mniejszych, tak samo z powodem

0
kamyk222 napisał(a):

Załóżmy że klasa tylko odczytuje z bazy, czy spełnia SRP?

Tak, bo tylko zajmuje się odczytem?
Czy może
Nie, bo odczytuje z kilku tabel / Nie, bo jest odpowiedzialna za odczyt pojedynczego rekordu lub listy rekordów / Nie, bo zajmuje się pobieraniem danych i ich agregacją?

Tak, bo zajmuje się tylko odczytem. Twoje argumenty na "nie" to tylko szczegóły implementacji.

Powód do zmiany jest:

Jeden - gdy zmieni się struktura bazy
Kilka - bo wymagana jest zmiana gdy zmieni się nazwa tabeli / nazwa kolumny lub silnik bazy danych?

Jeden - zmiana nazwy tabeli czy kolumny to właśnie zmiana struktury bazy. O silniku bazy nie wspominając.

Każdą odpowiedzialność można rozbić na nieskończenie mniejszych, tak samo z powodem

To rozbij sensownie:
a) pobranie danych klienta z bazy;
b) ich wyświetlanie na formularzu na nieskończenie wiele odpowiedzialności.

0

a) choćby: połączenie się z bazą danych, pobranie danych z bazy danych, ...
b) wyświetlenie imienia, nazwiska, adresu, ...

nie mówię że sensownie, ale się da
równie dobrze można iść w drugą stronę - pytanie kiedy się zatrzymać

0

Dużo zależy od poziomu abstrakcji na którym pracuje dana klasa. http://koziolekweb.pl/2009/02/26/solidne-programowanie-czesc-1-czyli-monogamia/

Z jednej strony klasa, która tylko czyta z bazy będzie OK, ale nad nią będzie klasa, która czyta i pisze, bo taki poziom abstrakcji jest na danym poziomie "zapewnia połączenie z bazą danych". Sztuka polega na niemieszaniu poziomów abstrakcji.

1 użytkowników online, w tym zalogowanych: 0, gości: 1