MVVMCross je rámec napříč platformami, který usnadňuje vývoj aplikací pomocí vzorce modelu-view-viewModel (MVVM). Umožňuje vývojářům volně spojené, udržovatelné a testovatelné mobilní řešení rozdělit logiku aplikací do dvou hlavních částí: hlavní projekt a projekt uživatelského rozhraní.
Core Project
Hlavním projektem je obvykle standardní knihovna .NET, která obsahuje veškerý sdílený kód, včetně:- ViewModels: Jsou zodpovědné za manipulaci s interakcemi uživatelů a obchodní logiku.
- Modely: Reprezentují datové struktury použité v celé aplikaci.
- Služby: Poskytovat přístup k datům, webovým službám nebo jiným externím zdrojům.
- Převodníky: Používá se pro konverze typu dat.
- Třída aplikace: Toto je zodpovědné za inicializaci obchodní logiky a zobrazení aplikací. Zabývá se také registrací vlastních objektů při inverzi kontejneru ovládání (IOC).
- AppStart: Volitelně se používá k určení, který model zobrazení se prezentovat jako první, když se aplikace spustí.
UI Project
Projekt UI je specifický pro platformu a obsahuje prvky uživatelského rozhraní a kód specifický pro platformu. Pro každou cílovou platformu (např. IOS, Android) existuje samostatný projekt uživatelského rozhraní. Tyto projekty zahrnují:- Zobrazení: Každý pohled je zodpovědný za prezentaci odpovídajícího modelu pohledu. Zobrazení jsou navrženy pomocí nástrojů nativní platformy (např. XAML pro Xamarin.Forms, AXML pro Android).
- Nativní popisovač aplikací: Toto zpracovává nativní události životního cyklu. Například na Androidu by to byla třída „mainActivity“ nebo `mainApplication`, zatímco na iOS by to byla třída„ AppDelegate “.
- Třída nastavení: Je to zodpovědné za bootstrapping MVVMCross a registraci služeb specifických pro platformu. Inicializuje rámec MVVMCross a nastaví kontejner IOC s implementacemi specifickými pro platformu.
Interakce mezi projekty Core a UI
Interakce mezi projekty Core a UI v MVVMCrossu je usnadněna vzorem MVVM a kontejnerem IOC rámce. Takto interagují:- ViewModel Binding: Projekty UI používají MVVMCross k vázání pohledu k zobrazení modelů. To se obvykle provádí pomocí pojmenovacích úmluvy nebo zdobení pohledy s atributy jako `[MVXViewFor (typeof (HomeviewModel))]`.
- Injekce služby: Základní projekt definuje rozhraní pro služby, které jsou implementovány odlišně na každé platformě. Tyto služby jsou registrovány v kontejneru IOC a vstřikovány do modelů zobrazení, což umožňuje funkčnost specifické pro platformu bez duplikace kódu.
- Navigace a prezentace: MVVMCross poskytuje mechanismy pro navigaci mezi modely pohledu a prezentaci pohledu. Framework používá přednášející (např. `IMVXIOSVIEWPRESENTER`,` IMVXAndroidViewPresenter`) ke správě toho, jak jsou zobrazení zobrazeny na každé platformě.
Oddělením logiky aplikace do projektů Core a UI umožňuje MVVMCross vývojářům maximalizovat opětovné použití kódu napříč platformami a přitom umožňuje přizpůsobení a optimalizaci specifické pro platformu [1] [3] [5].
Citace:[1] https://www.mvvmcross.com/documentation/getting-started/mvvmcross-overview
[2] https://canbilgin.wordpress.com/tag/mvvmcross/
[3] https://leaware.com/creating-cross-platform-xamarin-applications-using-the-mvvmcross-framework/
[4] https://www.mvvmcross.com/documentation/advanced/customizing-using-app-and-setup
[5] https://www.suneco.nl/blogs/boost-your-xamarin-projects-with-mvvmcross/
[6] https://learn.microsoft.com/en-us/archive/msdn-magazine/2014/august/windows-phone-build-mvvm-apps-with-xamarin-and-mvvmcross
[7] https://www.mvvmcross.com/documentation/tutorials/tipcalc/the-core-project
[8] https://canbilgin.wordpress.com/2017/03/26/xamarin-forms-application-with-mvvmcross/