O ile widzę, istnieją dwie główne zasady, jak radzić sobie z obiektami odgrywającymi rolę w całej aplikacji, takimi jak obiekt modelu głównego (w kontekście MVC):

  1. utwórz obiekt i przekaż go przez drzewo obiektów (np. w konstruktorze)
  2. podać go jako singleton lub inną technikę zmiennej globalnej

Pierwsze podejście wydaje się być czystsze, ponieważ zależności są lepiej widoczne, ale jest dużo dodatkowej pracy do wykonania (parametry, zmienne klas,...).

Co wolisz?

Edytuj: pierwsza technika również wykorzystuje tylko jedną instancję, ale jest zapewniana przez przekazanie obiektu, a nie przez funkcję statyczną

1
Dominik 22 luty 2012, 18:26

3 odpowiedzi

Najlepsza odpowiedź

Jako parametr konstruktora wolę uruchomić metodę singletonów getInstance() - upiecz dwie pieczenie na jednym ogniu ;)

2
IProblemFactory 22 luty 2012, 18:32

W tym miejscu może pomóc wstrzyknięcie zależności. Konieczność wyraźnego ręcznego przekazywania wszystkich poprawnych zależności do obiektu za każdym razem, gdy go tworzysz, może być uciążliwa i być może nieco podatna na błędy. Przyzwoity kontener do wstrzykiwania zależności może pomóc zautomatyzować ten proces i jest w rzeczywistości łatwiejszy w użyciu niż singletony.

Framework Symfony2 jest nowoczesnym przykładem:

http://symfony.com/doc/current/book/service_container.html

1
Cerad 22 luty 2012, 18:49

Myślę, że przekazywanie jako parametr jest trochę bardziej wydajne pod względem pamięci, łatwiejsze do debugowania, ale wymaga dodatkowej pracy.

Wolę używać singletonów tylko wtedy, gdy naprawdę tego potrzebuję (np. sesje bazy danych, zapis do pliku itp.).

To naprawdę zależy od typu projektu, języka, budżetu, wielkości projektu itp. Nie ma "uniwersalnej" odpowiedzi.

0
Kamil 22 luty 2012, 18:35