Buduję aplikację WPF przy użyciu wzorca MVVM. W tej chwili moje viewmodels wywołuje warstwę usługi, aby pobrać modele (co nie ma znaczenia dla viewmodel) i przekonwertować je na viewmodels. Używam iniekcji konstruktora, aby przekazać wymaganą usługę do modelu viewmodel.
Jest łatwy do przetestowania i działa dobrze w modelach view z kilkoma zależnościami, ale gdy tylko próbuję utworzyć viewModels dla złożonych modeli, mam konstruktora z dużą ilością usług wstrzykniętych do niego (jedna do pobierania każdej zależności i listy wszystkich dostępnych wartości powiązanie na przykład z itemSource). Zastanawiam się, jak obsługiwać wiele takich usług i nadal mam model widoku, który mogę z łatwością testować jednostkowo.
Mam na myśli kilka rozwiązań:
Tworzenie singletonu usług (IServices) zawierającego wszystkie dostępne usługi jako interfejsy. Przykład: Services.Current.XXXService.Retrieve (), Services.Current.YYYService.Retrieve (). W ten sposób nie mam wielkiego konstruktora z mnóstwem parametrów usług.
Tworzenie fasady dla usług używanych przez viewModel i przekazywanie tego obiektu w ctor mojego viewmodela. Ale potem będę musiał stworzyć fasadę dla każdego z moich złożonych modeli widoków i może to być trochę dużo ...
Jak myślisz, jaki jest „właściwy” sposób wdrożenia tego rodzaju architektury?
new
do tworzenia innych modeli widoków, ale myślę o czymś tak prostym jak aplikacja MDI, w której kliknięcie przycisku lub menu „nowego dokumentu” doda nową kartę lub otworzy nowe okno. Powłoka / przewodnik musi być w stanie tworzyć nowe wystąpienia czegoś , nawet jeśli jest ukryty za jedną lub kilkoma warstwami pośredniczącymi.