Problem
Ostatnio dużo czytałem o tym, że Singletony są złe i jak lepsze jest wstrzykiwanie zależności (które rozumiem jako „używanie interfejsów”). Kiedy zaimplementowałem część tego z wywołaniami zwrotnymi / interfejsami / DI i przestrzegając zasady segregacji interfejsu, skończyło się to dość bałaganem.
Zależności rodzica interfejsu użytkownika były w zasadzie połączone ze wszystkimi jego elementami potomnymi, więc im wyżej w hierarchii był element interfejsu użytkownika, tym bardziej rozdęty był jego konstruktor.
Na szczycie hierarchii interfejsu użytkownika znajdowała się klasa aplikacji, zawierająca informacje o bieżącym wyborze i odniesienie do modelu 3d, który musi odzwierciedlać zmiany. Klasa aplikacji wdrożyła 8 interfejsów, a to dopiero około jedna piąta nadchodzących produktów (/ interfejsów)!
Obecnie pracuję z singletonem zawierającym bieżący wybór i elementy interfejsu mające funkcję aktualizacji. Ta funkcja spływa po drzewie interfejsu użytkownika i elementach interfejsu użytkownika, a następnie w razie potrzeby uzyskuje dostęp do bieżącego singletonu wyboru. W ten sposób kod wydaje mi się czystszy.
Pytanie
Czy singleton może być odpowiedni dla tego projektu?
Jeśli nie, to czy jest jakaś podstawowa wada w moim myśleniu i / lub implementacji DI, co czyni ją tak uciążliwą?
Dodatkowe informacje o projekcie
Typ: Koszyk na zakupy do mieszkań, z dzwonkami i gwizdkami
Rozmiar: 2 osobo-miesiące na kod i interfejs użytkownika
Utrzymanie: Brak bieżących aktualizacji, ale może później „wersja 2.0”
Środowisko: Używanie C # w Unity, który używa encji System elementów
W prawie wszystkich przypadkach interakcja użytkownika wyzwala kilka działań. Na przykład, gdy użytkownik wybierze element
- część interfejsu użytkownika pokazująca ten element i jego opis musi zostać zaktualizowana. W tym celu musi również uzyskać informacje z modelu 3d w celu obliczenia ceny.
- w dalszej części interfejsu należy zaktualizować ogólną cenę całkowitą
- należy wywołać odpowiednią funkcję w klasie na modelu 3d, aby wyświetlić tam zmiany