niedziela, 2 grudnia 2012

Antywzorzec Obiektowy Manager-Helper

Przy okazji przygotowań do Coderetreat mam po raz chyba już siódmy w życiu to uczucie kiedy wydaje mi się, że w końcu zrozumiałem o co chodzi w programowaniu obiektowym. A jak to ktoś tam mawiał, jeśli coś rozumiesz to powinieneś być w stanie wytłumaczyć to małemu dziecku. No To spróbujmy.

(anty)Wzorzec Manager-Helper

Nie chce mi się znowu wrzucać co, kto, gdzie i kiedy dlatego napiszę jedynie, że kiedyś miałem okazję pracować w projekcie sprowadzającym programowanie obiektowe do następujących kroków :

  1. Stworz klasę CostamManager
  2. Gdy klasa CostamManager zacznie oscylować wokół 8 tys linii zacznij przenosić część kodu do klasy CostamHelper
  3. A jeśli jesteś naprawdę bystry to dodaj jeszcze CostamControler - wiesz, żeby było tak bardziej obiektowo.

Dlaczego wzorzec Manager-Helper to zły pomysł?

Wyjaśnienie dla dzieci

Wyjaśnimy to używając wiernej kopii Feliksa co to wszyscy pisali na fejsie, że wylądował.
Jeśli tak zdekomponujemy Feliksa to możemy mu wymienić niezależnie rączki na bardziej rakietowe, i nóżki na bardziej rakietowe i może główkę na bardziej rakietową.
Tutaj drogie dzieci nie jest tak łatwo wymienić główkę bo będziemy musieli wymienić też i jedną rączkę ( a może nie chcemy!) i kawałek drugiej. I jak teraz Feliks będzie miał część rączki rakietowej a część nierakietowej to się nam posypie. Oj trzeba zmienić wszystko :(
Tak też nie jest dobrze.
I Kontroler tak naprawdę niewiele tu zmienia

Nie dla dzieci

NA koniec polecam jedną z lepszych książek o Obiektówce jakie czytałem : Object thinking

1 komentarz:

  1. To przypomina mi historię jeszcze z czasów studiów. Koledze z zespołu przypadło zadanie zrefaktorowania kodu tak, aby żadna klasa nie przekraczała bodajże 400 linii (takie twarde ograniczenie samo w sobie jest chybione, ale nie o tym).

    Jedna klasa budziła postrach całego zespołu: DocumentOperations - taki gigantyczny, zaplątany niczym spaghetti super-helper.

    Efekt refaktoringu zasmucił wszystkich. Z monumentalnej, wielkiej klasy DocumentOperations powstały dwie: DocumentOperations1 i DocumentOperations2... Ale obie poniżej 400 linii!

    OdpowiedzUsuń