Po 2 latach wciąż walczę z MVVM jako praktyczną metodą tworzenia działającego oprogramowania. W niektórych przypadkach jest świetnie. Zrobiłem wielowątkową aplikację, która kontrolowała małą linię montażową, która byłaby koszmarem bez koncepcji MVVM. Oderwanie od fizycznej linii montażowej było prawie bez zastanowienia.
Jednak moja kariera koncentruje się głównie na wewnętrznej linii aplikacji biznesowych - formalizując i optymalizując działalność firmy. W takich aplikacjach istnieje ogólnie teir biznesu, który obraca się wokół CRUD i operacji złożonych. W LOB moje modele widoków kończą się bardzo prostymi zbiorami funkcji owijania jednej linii metod klasy biznesowej, a na koniec komplikują najprostsze zadania, takie jak wyświetlanie okna komunikatu lub otwieranie okna. Czy nikomu innemu nie jest to dziwne, gdy ludzie przechodzą w długie opisy „wstrzykiwania zależności” i „dostawców wiadomości” dla wywołania Window.ShowDialog, które istnieje już od dziesięcioleci? Ile jeszcze pytań dotyczy przepełnienia stosu, prosząc o radę w przypadku zadań, które były niezwykle proste w winformach?
Nie zrozumcie mnie źle - dostaję MVVM i to, jak może być nieocenione dla dużych zespołów zajmujących się horyzontalnym opracowywaniem pakowanego i sprzedawanego oprogramowania. Jednostki testujące modele widoku mogłyby zaoszczędzić miliony, unikając poważnego błędu RTM, a dedykowani programiści interfejsu użytkownika mogliby zapewnić bogate doświadczenie. Ale kiedy koszt ponownej instalacji jest minimalny, a wszystko, za co firma musi zapłacić, to proste działające oprogramowanie, dlaczego miałbym spędzać czas na testowaniu prostej maszyny wirtualnej, gdy moja logika biznesowa jest już testowana jednostkowo? Ile czasu naprawdę pozwoli mi spędzić biznes na uroczych animacjach i schematach kolorów? Czy jest coś do zrobienia dla młodszego programisty (wyśledzenie błędu w funkcji składowania używanej do przeglądania „Save_Click”,
Trzeba przyznać, że bardzo podoba mi się wiązanie danych WPF. Aby z tego skorzystać, ustawiam kontekst danych na samo okno, w którym ma on dostęp do klasy biznesowej, a także wszelkich innych obserwowalnych właściwości. Tak, łamię prawie każdą „zasadę” MVVM, robiąc to. Ale przynajmniej mam prosty kod sterowany zdarzeniami, który jest łatwy do odczytania ORAZ mogę skorzystać z nowego wiązania danych i sprawdzania poprawności. Problem tkwi w projektantach - których nie używam aż tak wiele, ale mam nadzieję, że do tej pory będą lepiej zintegrowane w 2012 roku - projektant pokazuje setki właściwości okna i jego podstawowych klas.
Dla tych, którzy mogą się odnosić, możesz wskazać mi zasoby, książki, a nawet tylko zmiany perspektywy, które ułatwiłyby to przełknięcie. Dam MVVM kolejny zastrzyk, ale ostatnim razem czułem się dość głupio, że martwiłem się o wstrzyknięcie zależności tylko po to, aby wyświetlić okno komunikatu z maszyny wirtualnej, nie miałem zamiaru testować jednostki. Nawet jeśli przeprowadziłem test jednostkowy, czy naprawdę uzyskujemy lepszą jakość, handlując testami wykonawczymi w poszukiwaniu błędów czasu kompilacji tych przerażających „ściśle powiązanych” aplikacji?
Zdaję sobie sprawę, że jedną odpowiedzią jest pozostanie w winformach. Ale jako jeden z ostatnich zwolenników WebForms (mam taką samą krytykę trendu tworzenia stron internetowych), poczułem się trochę jak dinozaur, kiedy to odkryłem, że nie ma już WebFormów na ścieżkach certyfikacyjnych Microsoft. Poruszanie się do przodu jest jedyną opcją, nawet jeśli mi się nie podoba.