Vag*_*lov 3 cross-platform mvvmcross
我考虑使用MvvmCross将我的应用程序移植到多个平台.我检查了一些使用MvvmCross的项目,该框架看起来非常有前途且易于采用.我想澄清一些概念,以确保我能正确移植.
据我所知,cross-platform业务逻辑应该在通过RegisterServiceInstance调用可用的服务中实现.
特定于平台的功能通过插件公开.我应该努力使用MvvmCross插件,但如果我找不到提供我需要的功能的插件,我可以编写自己的插件.我应该如何规划自定义插件的粒度?我应该避免在那里有任何业务逻辑,只提出特定于平台的东西吗?如果使用标准Mvvm插件需要在我的应用程序中进行大的代码更改,我是否仍然应该这样做以避免制作我自己的插件,或者我可以在插件设计决策中采取自由主义?
最后,我还没有完全弄清楚所谓的应用程序对象的目的,特别是为什么他们使用这个长后缀("ApplicationObject").什么是合格的applciation对象,为什么建议装饰它的名字?
提前致谢.
一般来说...... Mvvmcross实际上的目标是成为一个相当轻松的框架 - 它希望更接近mvvmlight而不是棱镜...它的目的是让你使用mvvm进行视图和查看模型 - 然后你如何编写你的业务逻辑(midels和服务)真的取决于你.
话虽如此,对于我写的样本,我一般都使用IoC和插件 - 所以这就是"我的做法" - 这是"最佳实践"无疑是值得商榷:)
- 据我所知,跨平台业务逻辑应该在通过RegisterServiceInstance调用可用的服务中实现.
是的,RegisterServiceInstance,RegisterServiceType和GetService一起提供了一个简单的IoC框架.
在我的应用程序中,我通常选择在"服务"层实现业务逻辑,应用程序在启动期间向IoC注册,以及vm在需要时消耗.
如果您希望直接在vm中编写业务逻辑代码,或者如果您想使用服务的直接编码(而不是IoC),那么您完全可以这样做.
- 特定于平台的功能通过插件公开.我应该努力使用MvvmCross插件,但如果我找不到提供我需要的功能的插件,我可以编写自己的插件.我应该如何规划自定义插件的粒度?我应该避免在那里有任何业务逻辑,只提出特定于平台的东西吗?如果使用标准的Mvvm插件需要在我的应用程序中进行大的代码更改,我是否仍然应该这样做以避免制作我自己的插件,或者我可以在插件设计决策中采取自由主义?
是的,要自由!
插件只是使用PCL进行IoC的正式方式.
在mvx树中,插件非常小并且是针对性的,因为它们被设计用于在许多项目中重用.
在mvx树中,插件不包含业务逻辑,因为mvx是通用的 - 它不了解您的业务.
如果你想为你的应用程序编写一个插件,它会注册50个接口实现,其中许多是业务对象,那么"是的,请做" - 根据业务需求构建代码.
最后,请注意插件是可选的 - 如果你有一些特定于平台的代码,你总能找到另一种方法将它注入你的虚拟机 - 例如你的视图可以注入实现,或者你可以编写使用文件或汇编链接的非PCL代码为每个应用平台选择正确的实现.
- 最后,我还没有完全弄清楚所谓的应用程序对象的目的,特别是为什么他们使用这个长后缀("ApplicationObject").什么是合格的applciation对象,为什么建议装饰它的名称
我同意这个名字并不完美 - 但我仍然想不出更好的名字.
MvxNotifyPropertyChanged对象了解Ui线程并提供inpc实现
MvxApplicationObject对象继承自MvxNotifyPropertyChanged,但也可以访问导航方法.
MvxViewModel对象继承自MvxApplicationObject,旨在与视图一起使用.
我现在经常使用MvxApplicationObject的唯一地方是起始对象 - 启动应用程序中第一个视图模型的"东西".我通常称之为StartApplicationObject,因为它描述了它是什么.如果你想把它称为其他东西,那么请做 - 我保证这不会对任何小猫造成任何伤害.
旁注:在第一个mvx项目中,起始对象最初是从MvxViewModel继承的......但是在代码审查中被抓住并受到批评......"这不是一个真正的视图模型 - 它更像是一个东西 - 你知道 - 它在ui应用程序中做了什么 - 它是......" - 那就是MvxApplicationObject诞生的时候......
如果您以后发现有其他对象需要请求导航,但这些对象不是视图模型,那么此基类也适合您.否则,不要觉得你必须使用它...
综上所述...
从您的问题来看,这听起来像您已经阅读了示例,并且对我如何构建应用程序的核心部分有了很好的理解.
我唯一强调的是我保持灵活性 - 我不相信有一个最佳实践,大多数新项目提出了新的独特挑战,我通常会在每个项目中学习和尝试新事物.
希望有所帮助
斯图尔特