Jak ja stosuje się do SRP – tylko jedna metoda

Akronim SRP jest bardzo popularny. Jednak jak wiele członków programistyczengo świata tak naprawdę go rozumie i stosuje? A jaka jego część tworzy kod według tych zasad? Czy jesteś w stanie opisać jak według Ciebie powinna wyglądać klasa spełniajca tę zasadę? Poniżej opisałem jak ja stosuje się do Single Responsibility Principle i dlaczego lubię, gdy klasa ma tylko jedną metodę.
Defnicja
Single Responsibility Principle możemy przetłumaczyć jako Zasada Pojedynczej Odpowiedzialności. Ale czym jest ta reguła w świecie programowania? Przez lata przeczytałem, bądź usłyszałem wiele interpretacji tej zasady. Te najczęściej powtarzane to:
- Taka klasa robi tylko jedną rzecz.
- Istnieje tylko jeden powód, aby zmodyfikować tę klasę.
- Taką klasę można opisać jednym, prostym, krótkim zdaniem.
Co ponad definicją?
Powyższe punkty są one zbyt ogólne, przynajmniej dla mnie. Ponieważ można na ich podstawie każdą klasę określić jako zgodą z tą zasadą. Przykładowo klasa UsersManager, którą mogę opisać jednym zdaniem: „Ona zarządza użytkownikami”. Zatem, kiedy zanurzamy się w szczegóły. Okazuje się że, dobrze by było ustanowić konkretniejsze wytyczne, aby stały się one bardziej jednoznaczne. Dlatego w mojej głowie urodziło mi się jeszcze kilka warunków, abym mógł z czystym sumieniem powiedzieć, że ma ona pojedynczą odpowiedzialność.
Najważniejszym z nich są wytyczne dotyczące nazywania klas.
- Nazwa nie powinna zawierać słów, które mogą znaczyć wszystko i nic, takich jak „Manager”, „Service”, „Helpers”, bo takie podejście grozi rozlaniem się tęczowej breii.
- Nazwa powinna jednoznacznie określać po co dana klasa została stworzona. Przykładowo „UserUpdater”, czy „SalaryCalculator”
Jedna metoda
Naturalną konsekwencją nadawania takich nazw jest tworzenie klas z tylko jedną publiczną metodą, bo przecież taki UserUpdater może tylko mieć metodę UpdateUser. W przeciwnym wypadku nazwa klasy nie będzie zgodna z tym co dana klasa robi.
Część osób może powiedzieć, że wtedy będę miał starsznie dużo klas i będzie to nieczytelne. Z czym oczywiście się zgadzam, pomimo tego wolę mieć ogrom małych klas niż kilka olbrzymów.
Oczywiście zdarzają się sytucje, gdy tak purystyczne podejście staje się uciążliwe i niepraktyczne, jakby było wciśnięte na siłę. W taim sytuacjach świadomie podejmuję decyzję, że wyjątkowo ta klasa będzie miała więcej niż jedna metodę. Ponieważ uważam, że nie należy popadać z patologii w patologię, o czym już pisałem, ale w innym kontekście.
Czy według Ciebie takie podejście ma sens? Czy może masz jakieś inne wyznaczniki, kiedy Twoja klasa spełnia SRP?
1 Komentarz
Aspekty w .NET | Jerzy Wickowski · 2019-12-12 o 14:00
[…] własne aspekty. Co daje olbrzymie pole do popisu. Dodatkowo może ułatwić stosowanie zasady SRP, a może nawet być jednym z kroków […]