Temat: Kto jest odpowiedzialny za tworzenie?
Sebastian M.:
Pewnie większość (o ile nie wszyscy:) członkowie grupy czytają blog Jarka Żelińskiego na bieżąco:), jednak gdyby komuś umknęło, to polecam jego ostatni wpis.
Ja chyba to dzisiaj przedrukuję i dam każdej osobie w teamie do poczytania, ponieważ pytania: "Jak to? Nie mogę używać słowa kluczowego new? Nie mogę tworzyć obiektów?" również słyszę dość często, a część programistów, z którymi pracuję odczuwa irracjonalny strach, gdy widzi jakąś fabrykę w projekcie:(
To najczęściej jest racjonalny strach ponieważ mało kto wie do czego dany wzorzec służy, a źle użyty wzorzec oznacza s** w projekcie aplikacji.
Do czego służy fabryka ? A właściwie fabryka abstrakcyjna bo to chyba na nią Pan Arkadiusz powołuje.
http://pl.wikipedia.org/wiki/Fabryka_abstrakcyjna_%28w...
Otóż fabryka służy do tworzenia, dla zadanego interfejsu, odpowiednich obiektów.
Takie uproszczone Inversion of control.
Fabryka ma wiedzieć, jakiej klasy obiekt ma zwrócić, a nie jak dany obiekt inicjalizować.
Używanie fabryki jest bez sensu jeśli wiemy jakiej klasy obiektu potrzebujemy.
Inicjalizacja obiektu powinna być zaimplementowana w konstruktorze, bo do tego konstruktor służy.
Z resztą ...
"No właściwie to nie. Jeżeli chcesz w klasie tworzyć obiekty to to już jest odpowiedzialność.
Tworzenie obiektów to odpowiedzialność...
"Wiec klasa nic poza tworzeniem obiektów nie powinna robić."
Więc jeśli w klasie tworzymy obiekty to klasa nie powinna niczego innego robić...
"Ale przecież klasa która nie robi nic poza tworzeniem obiektów to fabryka. "
Ale przecież klasa która nie robi nic poza tworzeniem obiektów to fabryka... Odsyłam do definicji.
"Wszystko jak najbardziej się zgadza. Fabryka – wzorzec kreacyjny (hm… a może znacie jakieś bardziej odpowiednie słowo) gangu czterech."
.. ja nie znam; fabryka abstrakcyjna jest wzorcem kreacyjnym. No chyba że chodzi o jakąś inną fabrykę.
BTW: Nie wiem czy czytałeś artykuł który cytujesz, ale jego autor implementuje metodę "Save" na obiekcie domeny. Ciekawe, nie ?
Ten post został edytowany przez Autora dnia 29.10.13 o godzinie 08:46