Single responsibility principle rubrika: Návrh

12 Kit
položil/-a 27.12.2014

Narazil jsem v jednom diskuzním fóru na problém, co je a co už není SRP. Na jedné straně byly názory, že třída by měla držet data nebo metody, ale ne obojí. To je podle mne porušením zapouzdření objektů a vlastně degradací celého OOP.

Můj názor je ten, že třída by měla obsahovat minimum instančních proměnných, ale měla by k nim mít všechny potřebné metody tak, aby instanční proměnné zůstaly privátní a přitom pokud možno nebyly potřebné gettery, settery ani predikáty.

Praktikuji to tak už nějakou dobu. Výsledkem jsou třídy, které mají obvykle 2-4 atributy a 2-6 metod. Jejich délka mi běžně vychází na 20-60 řádek, názvy proměnných a metod jsou zpravidla jednoslovní. Přesto si někteří troufají tvrdit, že porušuji SRP.

Jaký na to máte názor? Jak má podle vás vypadat třída splňující SRP?

Komentáře

  • Vašek Ch. : Možná víš, možná tě minulo; možná souvisí, možná je zcela mimo: http://devel.cz/otazka/porusuje-observer-single-responsibility-princip 28.12.2014
  • Kit : Nějak mě to minulo. Zřejmě jsem přestal číst, když jsem narazil na název třídy LoadingStatus, který IMHO porušuje pravidla pojmenovávání tříd. A možná to dorazily názvy metod setItemCount()/getItemCount(), ze kterých se osypávám. 28.12.2014
  • Taco : @Kit: Tvé pravidla pojmenovávání. Jen a pouze tvé. 22.4.2016
  • Kit : @Taco: Když někdo neumí používat namespace, musí lepit slova. Jak prosté. 22.4.2016
odkaz
2 Tharos
odpověděl/-a 28.12.2014

Přístup, který jsi popsal, je podle mě „v duchu OOP“ a se SRP se nijak nevylučuje.

Rád bych v této záležitosti odkázal na jeden postarší názor od René Steina, který považuji za velmi dobrý: http://blog.renestein.net/CommentView,guid,59132463-8265-453d-b94a-d44bc...

Komentáře

  • Kit : Díky za zajímavý odkaz. Princip “tell, don't ask”, uvedený na konci, je přesně cestou, kterou jsem se vydal. 28.12.2014

Pro plný přístup na Devel.cz se prosím přihlaste:

Rychlé přihlášení přes sociální sítě:

Nebo se přihlaste jménem a heslem:

Zadejte prosím svou e-mailovou adresu.
Zadejte své heslo.