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)?

Author: Community, 2012-05-29

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 .

 46
Author: devdigital,
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

 15
Author: Jasper,
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.

 12
Author: pfeds,
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.)

 0
Author: StayOnTarget,
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