Czy ortodoksyjne wdrażanie MVVM jest bezcelowe? Tworzę nową aplikację i rozważałem Windows Forms i WPF. Wybrałem WPF, ponieważ jest przyszłościowy i zapewnia dużą elastyczność. Jest mniej kodu i łatwiej jest wprowadzać istotne zmiany w interfejsie użytkownika przy użyciu języka XAML.
Ponieważ wybór WPF jest oczywisty, doszedłem do wniosku, że równie dobrze mogę przejść całą drogę, używając MVVM jako mojej architektury aplikacji, ponieważ oferuje ona mieszalność, problemy z separacją i testowalność jednostkową. Teoretycznie wydaje się piękny jak Święty Graal programowania interfejsu użytkownika. Ta krótka przygoda; jednak zamienił się w prawdziwy ból głowy. Zgodnie z oczekiwaniami w praktyce stwierdzam, że zamieniłem jeden problem na inny. Mam tendencję do bycia programistą obsesyjnym, ponieważ chcę robić rzeczy we właściwy sposób, aby uzyskać właściwe wyniki i być może zostać lepszym programistą. Wzorzec MVVM właśnie oblał mój test produktywności i właśnie zmienił się w wielki ohydny hack!
Jasnym przykładem jest dodanie obsługi modalnego okna dialogowego. Prawidłowym sposobem jest wyświetlenie okna dialogowego i powiązanie go z modelem widoku. Uruchomienie tego jest trudne. Aby skorzystać z wzorca MVVM, musisz rozprowadzić kod w kilku miejscach w warstwach aplikacji. Musisz także używać ezoterycznych konstrukcji programistycznych, takich jak szablony i wyrażenia lamba. Rzeczy, które sprawiają, że gapisz się na ekran drapiąc się po głowie. To sprawia, że konserwacja i debugowanie są koszmarem czekającym, jak niedawno odkryłem. Miałem okno około działające dobrze, dopóki nie dostałem wyjątku przy drugim wywołaniu, mówiąc, że nie może ponownie wyświetlić okna dialogowego po zamknięciu. Musiałem dodać procedurę obsługi zdarzeń dla funkcji zamykania okna dialogowego, inny w implementacji IDialogView i wreszcie inny w IDialogViewModel. Myślałem, że MVVM uratuje nas przed tak ekstrawaganckim hakowaniem!
Jest kilka osób z konkurencyjnymi rozwiązaniami tego problemu i wszystkie są hackami i nie zapewniają czystego, łatwego do ponownego użycia, eleganckiego rozwiązania. Większość zestawów narzędzi MVVM prześwietla okna dialogowe, a kiedy je rozwiązują, są po prostu oknami ostrzegawczymi, które nie wymagają niestandardowych interfejsów ani modeli widoku.
Planuję zrezygnować z wzorca widoku MVVM, a przynajmniej jego ortodoksyjnej implementacji. Co myślisz? Czy warto było, gdybyś miał jakieś kłopoty? Czy jestem tylko niekompetentnym programistą, czy też MVVM nie jest tym, czym ma być?