MvvmCross服务,插件和应用程序对象

时间:2013-01-14 07:05:23

标签: cross-platform mvvmcross

我考虑使用MvvmCross将我的应用移植到多个平台。我检查了一些使用MvvmCross的项目,该框架看起来非常有前途且易于采用。我想澄清一些概念,以确保我能正确移植。

  1. 据我了解,cross-platform业务逻辑应在通过RegisterServiceInstance来电提供的服务中实施。

  2. 通过插件公开特定于平台的功能。我应该努力使用MvvmCross插件,但如果我找不到提供我需要的功能的插件,我可以编写自己的插件。我应该如何规划自定义插件的粒度?我应该避免在那里有任何业务逻辑,只提出特定于平台的东西吗?如果使用标准的Mvvm插件需要在我的应用程序中进行大的代码更改,我是否仍然应该这样做以避免使用我自己的插件,或者我可以在插件设计决策中自由发挥?

  3. 最后,我还没有完全弄清楚所谓的应用程序对象的用途,特别是为什么他们使用这个长后缀("ApplicationObject")。什么是合格的applciation对象,为什么建议装饰它的名字?

  4. 提前致谢。

1 个答案:

答案 0 :(得分:6)

一般来说...... Mvvmcross实际上的目标是成为一个相当轻松的框架 - 它希望更接近mvvmlight而不是棱镜......它的目标是让你使用mvvm进行视图和查看模型 - 然后你是怎么做的写你的业务逻辑(midels和服务)真的取决于你。

话虽如此,对于我写的样本,我一般都使用IoC和插件 - 所以这就是“我的做法” - 这是“最佳实践”是否值得商榷:)

  
      
  1. 据我所知,跨平台业务逻辑应该在通过RegisterServiceInstance调用可用的服务中实现。
  2.   

是的,RegisterServiceInstance,RegisterServiceType和GetService一起提供了一个简单的IoC框架。

在我的应用程序中,我通常选择在“服务”层实现业务逻辑,应用程序在启动期间向IoC注册,以及vm在需要时消耗。

如果您希望直接在vm中编写业务逻辑代码,或者如果您想使用服务的直接编码(而不是IoC),那么您完全可以这样做。

  
      
  1. 通过插件公开特定于平台的功能。我应该努力使用MvvmCross插件,但如果我找不到提供我需要的功能的插件,我可以编写自己的插件。我应该如何规划自定义插件的粒度?我应该避免在那里有任何业务逻辑,只提出特定于平台的东西吗?如果使用标准的Mvvm插件需要在我的应用程序中进行大的代码更改,我是否仍然应该这样做以避免制作我自己的插件,或者我可以在插件设计决策中采取自由主义?
  2.   

是的,要自由!

插件只是使用PCL进行IoC的正式方式。

在mvx树中,插件非常小且有针对性,因为它们可以在许多项目中重复使用。

在mvx树中,插件不包含业务逻辑,因为mvx是通用的 - 它不了解您的业务。

如果你想为你的应用程序编写一个插件,它会注册50个接口实现,其中许多是业务对象,那么“是的,请做” - 根据业务需求构建代码。

最后,请注意插件是可选的 - 如果你有一些特定于平台的代码,你总能找到另一种方法将它注入你的虚拟机 - 例如您的视图可以注入实现,或者您可以编写使用文件或程序集链接的非PCL代码,以便为每个应用程序平台选择正确的实现。

  
      
  1. 最后我还没有完全弄清楚所谓的应用程序对象的目的,特别是为什么他们使用这个长后缀(“ApplicationObject”)。什么是合格的applciation对象,为什么建议装饰它的名字
  2.   

我同意这个名字并不完美 - 但我仍然想不出更好的名字。

MvxNotifyPropertyChanged对象了解Ui线程并提供inpc实现

MvxApplicationObject对象继承自MvxNotifyPropertyChanged,但也可以访问导航方法。

MvxViewModel对象继承自MvxApplicationObject,旨在与视图一起使用。

我现在通常使用MvxApplicationObject的唯一地方是起始对象 - 启动应用程序中第一个视图模型的“东西”。我通常称之为StartApplicationObject,因为它描述了它是什么。如果你想把它称为其他东西,那么请做 - 我保证这不会对任何小猫造成任何伤害。

旁注:在第一个mvx项目中,起始对象最初是从MvxViewModel继承的......但是在代码审查中被抓住并受到批评......“这不是一个真正的视图模型 - 它是更多的东西 - 你知道 - 它在ui应用程序中做了什么 - 它是......“ - 那就是当MvxApplicationObject诞生时......

如果您以后发现有其他对象需要请求导航,但这些对象不是视图模型,那么此基类也适合您。否则,不要觉得你必须使用它......


总结......

从您的问题来看,听起来您已经阅读了这些示例,并且对我如何构建应用程序的核心部分有了很好的理解。

我唯一强调的是我保持灵活性 - 我不相信有一个最佳实践,大多数新项目都提出了新的独特挑战,我通常会在每个项目中学习和尝试新事物。

希望有所帮助

斯图尔特