MVVM, Unity, Prism, MEF, Caliburn - czego powinienem użyć?
Proszę o pomoc-gubię się!
Piszę małą aplikację desktopową, która ma kilka kontrolek i trochę ekranu. Należy to później zintegrować z małą stroną internetową, również posiadającą kilka ekranów. Chodzi o to, aby pozwolić użytkownikowi edytować filmy i wybierać obrazy, a następnie udostępniać ich wyniki znajomym.
Aplikacja desktopowa korzysta z C# WPF, strona www-ASP.Net MVC.
Czytałem, że rozbudowanie aplikacji o kilka ekranów byłoby łatwiejsze przy użyciu MVVM. Więc zacząłem szukać i odkryłem Caliburn.Mikro i MVVM.Światło. Ściągnąłem kilka samouczków, ale gdy przygotowywałem się do głębokiego zanurzenia się w materiale, znalazłem tutaj na S. o . że jest też Prism, MEF, Unity, ReactiveUI - to staje się zbyt wiele!
Jestem okropny w uczeniu się nowych rzeczy - wieki zajmuje mi studiowanie WPF i ASP.Net MVC. Nie chcę studiować wielu nowych materiałów, tylko po to, by później się przekonać, że to nieistotne. I nie mam architekt, który mnie pouczy.
Więc moje pytanie brzmi: Czy mógłbyś umieścić te ramy i technologie w perspektywie, i zasugerować, które powinienem skupić się na studiowaniu i użyciu (esp. co można później wykorzystać w systemie Windows 8)?
4 answers
Jeśli chcesz zbudować aplikację MVVM (co prawdopodobnie robisz dla różnych korzyści), to chcesz framework MVVM.
Polecam Caliburn.Micro, ponieważ jest to proste do zaimplementowania zgodnie z przykładami na temat Caliburn.Strona dokumentacji mikro. Ma również bardzo przekonującą konwencję w stosunku do mechanizmu konfiguracji i używa systemu akcji do wywoływania czasowników (metod) na modelach widoku z widoku. To jest potężniejsze niż jakiekolwiek inny mechanizm, jaki widziałem.
Prism jest dość ciężkim frameworkiem, który zawiera elementy projektu MVVM, aby pomóc w implementacji, a także jest szczególnie dostosowany do budowania aplikacji kompozytowych (aplikacji, które są zbudowane z odsprzęgniętych komponentów w powłoce hostingowej).
MEF jest przydatny dla tego typu aplikacji, które wymagają wykrycia wtyczek lub rozszerzeń do aplikacji (nawet po uruchomieniu aplikacji) i może być używany wraz z Framework MVVM, taki jak Caliburn.Mikro. MEF może być również używany do implementacji inwersji sterowania, ale nie zapewnia niektórych podstawowych funkcji znalezionych w innych inwersji kontenerów sterowania, więc możesz zdecydować się używać go tylko do implementacji funkcjonalności wtyczki.
Unity jest kontenerem IoC I będzie używany do implementacji dependency injection dla ogólnej infrastruktury aplikacji. W przestrzeni. NET jest jednak wiele kontenerów IoC, z których niektóre oferują ulepszone wydajność, dodatkowe funkcje lub bardziej przyjazny interfejs API.
Nie znam się na ReactiveUI, bo go nie używałem.
Jeśli mówisz o maksymalizacji ponownego użycia kodu dla ruchu do WinRT, to MVVM jest świetnym wyborem .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-29 18:51:23
PRISM już zawiera logikę MEF i MVVM:)
Ok trochę wyjaśnienia tutaj:
MVVM oznacza logikę w Twojej aplikacji. Właściwie sprytny sposób oddzielenia widoku, widoku-modelu i modelu. Nie znam się najlepiej (?) framework do tego-możesz sprawdzić Catel jeśli chcesz lub MVVM Light, ale to tylko tony kodu od kogoś, kto rozumie logikę MVVM i ułatwia jej implementację. Możesz spróbować napisać swój własny MVVM framework i zobacz, że "nie ma tajnego składnika" - tylko ten sam powtarzający się kod i te same klasy itp... W rzeczywistości nie potrzebujesz żadnego frameworka MVVM do implementacji MVVM.
Gdy już się nauczysz i napiszesz MVVM, od razu wpadniesz w pytanie - Jak przetestować go w sposób odsprzęgający (nie jest to trywialny problem np. w Silverlight) - więc tutaj w grę wchodzą wszystkie frameworki IOC/Inject. Na przykład MEF. Rozważ poniższy przykład, aby zrozumieć ogólny obraz wstrzykiwania framework:
Projekt 'Shared', napisany w 'least delimiter' (na przykład Portable Library)
public interface IAmSharedInterface
{
string SayHello();
}
Projekt "główny", tylko odniesienia "Wspólny" Projekt
public class IAmMainClass
{
[ImportingConstructor]
public IAmMainClass(IAmSharedInterface SharedInterface)
{
SharedInterface.SayHello();
}
}
Project 'Implementor', reference only' Shared ' project
[Export(IAmSharedInterface)]
public class IAmImplementor: IAmSharedInterface
{
public string SayHello()
{
return "Hello from implementator class to whoever using it";
}
}
Widzisz-nie ma bezpośredniego odniesienia między projektami "Main" i "Implementator" - cała "magia" dzieje się w procesie budowania/rozwiązywania MEF/Unity. Więc można łatwo uruchomić NUnit test na Main bez użycia projektu 'Implementor' i 'Implementor' z "Main" Istnieje również scenariusz, w którym inny projekt mógłby zaimplementować i wyeksportować "IAmSharedInterface" specjalnie do celów testowych.
Więc powrót do pryzmatu-to wszystko (!) to. Wiem, że framework nie jest łatwy do zrozumienia od razu i nie nadaje się do prostych programów typu "Hello World", ale gdy się go nauczysz - nie ma odwrotu. Po prostu skleja wszystkie części razem i daje dużą swobodę w używaniu dowolnej struktury moq (na przykład Rhino ).
Prism rozwijany w Microsofcie, więc (mam nadzieję) będzie obsługiwany nie tylko w Windows 8, ale w Windows 9 i we wszystkich przyszłych wersjach.
Cokolwiek poprosiłeś, wszystko jest w środku: MVVM, Inject, decouple/plug-ins, easy to read and test
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-31 09:18:10
Aby zapisać dodawanie do szczegółowych informacji powyżej, postaram się ułatwić Ci życie.
1) na razie zapomnij o architekturze IOC / Dependency Injection / Plugin. Mówisz, że tworzysz prostą aplikację, więc zapomnij o tym na razie. Zachowaj porządek w kodzie i możesz zaimplementować go później, jeśli to konieczne (to dobra rzecz).
2) z frameworków, które wymieniłeś, sugerowałbym Caliburn.Mikro. Jest stosunkowo prosty i lekki. Nie zajmie ci to długo. ruszajcie się.
3) Utwórz swój model w osobnym zestawie, którego możesz użyć zarówno w aplikacji windows, jak i w witrynie MVC.
Zachowaj prostotę i nie zagłębiaj się w wszystkie technologie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-02 08:23:13
Ta odpowiedź odtwarza kilka skróconych fragmentów artykułu na blogu Rockforda Lhotki " Użycie wzorca MVVM wymaga frameworka" która została przytoczona w innej odpowiedzi .
Jest to rodzaj meta-odpowiedzi na to pytanie (choć zawiera konkretne zalecenie), ale wydaje się bardzo przydatne, aby wyjaśnić rolę frameworku w MVVM w pierwszej kolejności.
Są trzy sprawiedliwe popularne wzorce projektowe warstwy prezentacji, które I / align = "left" / wzorce "M": MVC, MVP i MVVM. To dlatego, że wszystkie one mają "M "oznacza " Model", plus kilka innych konstrukcji.
Rzecz z tymi wszystkimi wzorami " M " jest taka, że dla typowych Programiści wzorce są bezużyteczne bez frameworka . Korzystanie z wzorce bez ram prawie zawsze prowadzi do nieporozumień, komplikacje, wysokie koszty, frustracja i ostatecznie rozpacz.
To przecież tylko wzorce, nie wdrożenia. I są duże, złożone wzory, które zawierają sporo pojęć, które muszą działać razem prawidłowo, aby umożliwić sukces.
...
próba zrobienia czegoś takiego jak MVVM bez frameworka to ogromna ilość pracy . Tony zduplikowanego kodu, wymyślanie koła na nowo i przekwalifikowanie ludzie myślą inaczej.
Przynajmniej z frameworkiem unikasz duplikatu kodu i mam nadzieję, że nie musisz odkrywać koła na nowo-pozwalając ci skupienie się na przekwalifikowaniu osób. Część przekwalifikowania jest na ogół nieunikniona, ale ramy zapewnia kod i strukturę hydrauliki, ułatwiając proces.
Można zadać sobie pytanie, dlaczego wzorzec MVC stał się popularny tylko w ASP.NET kilka lat temu...
O dziwo, MVC dopiero zaczął być głównym nurtem w Microsofcie świat kiedy ASP.NET pojawił się MVC. Jest to kompleksowe ramy z oprzyrządowaniem zintegrowanym z Visual Studio. W rezultacie. typowe programiści mogą po prostu tworzyć modele, widoki i kontrolery. Przed ten punkt musieli również zbudować wszystko, co robi Framework MVC – co jest dużo kodu. I nie tylko dużo kodu, ale kod, który ma absolutnie nic wspólnego z wartością biznesową , A odnosi się tylko do implementacja samego wzoru.
...
Typowi deweloperzy naprawdę chcą skupić się na budowaniu modeli, widoków, i viewmodels. Nie chcą budować słabych oparte na odniesieniach routery zdarzeń, Modele nawigacji, abstrakcje widoku i wszystkie inne rzeczy, które muszą zrobić ramy.
...
W międzyczasie Caliburn Micro wydaje się być najlepszym frameworkiem MVVM tam-na pewno najczęściej używane [stan na 2012]...
(tekst skopiowany w wierszu ze względów zachowania.)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-20 16:09:08