Istnieje kilka problemów z pojedynczych. Opiszę je poniżej, a następnie zaproponuję alternatywne rozwiązania. Nie jestem "Nigdy nie używaj singletona, albo jesteś typem kolesia", jak sądzę, że mają swoje zastosowania. Ale te zastosowania są rzadkie.
Bezpieczeństwo nici. Jeśli masz globalny statyczny Singleton, to musi być bezpieczny dla wątków, ponieważ wszystko może uzyskać do niego dostęp w dowolnym momencie. To dodatkowy koszt.
Testowanie jednostek jest trudniejsze w przypadku Singletonów.
Jest to tani zamiennik zmiennych globalnych (to znaczy, że jest to singleton na koniec dnia, chociaż może mieć metody i inne wymyślne rzeczy).
See, to nie tak, że Singleton to „obrzydliwe obrzydliwości” per-se, ale że jest to pierwszy wzorzec projektowy wielu nowych programistów dostać do czynienia i jego wygoda zaciemnia jego pułapek (Wystarczy trzymać jakieś biegi na to i nazwijcie to parowym punkiem).
W twoim przypadku odnosisz się do modeli i zawsze są to "instancje", ponieważ w naturalny sposób odzwierciedlają dane. Być może martwisz się kosztem uzyskania tych instancji. Uwierzcie mi, że powinny być pomijalne (oczywiście w odniesieniu do projektowania dostępu do danych).
więc alternatywy? Przekaż model do miejsc, które tego wymagają. To sprawia, że testowanie jednostek jest łatwiejsze i pozwala wymieniać podstawy tego modelu w rytmie serca. Oznacza to również, że możesz chcieć spojrzeć na interfejsy - oznaczają one kontrakt. Możesz wtedy tworzyć konkretne obiekty, które implementują te interfejsy i voila - Twój kod jest łatwy do testowania jednostkowego i modyfikowalny.
W świecie singleton, pojedyncza zmiana na singleton może całkowicie złamać wszystko w bazie kodu. To nie jest dobra rzecz.
Tworzenie "MODELS" Static? Nie, nie bardzo. Ani trochę. To jest nawet gorsze niż [parsowanie HTML z RegEx] (http://stackoverflow.com/a/1732454/643085) –
Heh. Nie mogłem się oprzeć, widzę. – sircodesalot
Jeśli korzystasz z DI, zamiast uczynić go statycznym, zarejestruj go w kontenerze za pomocą ContainerControlledLifetimeManager. Statyczne, masz większy problem z bezpieczeństwem wątków. –