fbpx

Jak ja stosuje się do SRP – tylko jedna metoda

Opublikowane przez Jerzy Wickowski w dniu

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?



Czy to był wartościowy artykuł? Zapisz się, a wyślę Ci dwa ebooki o czystym kodzie oraz będę informował Cię o nowych postach

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 […]

Dodaj komentarz

Twój adres email nie zostanie opublikowany.

This site uses Akismet to reduce spam. Learn how your comment data is processed.


Zapisz się

Wyślę Ci dwa dokumenty mówiące o jakości kodu. Dodatkowo będę Cię informował o nowych postach i nowościach.