C# Xamarin Forms:使用Prism和/或ReactiveUI,是否可以实现垂直切片?

C# Xamarin Forms:使用Prism和/或ReactiveUI,是否可以实现垂直切片?,c#,xamarin.forms,architecture,prism,reactiveui,C#,Xamarin.forms,Architecture,Prism,Reactiveui,我已经为一个移动应用程序工作了一周,用于个人教育和增强。我有一些WPF和MVVM的经验,我没有移动开发的经验 我们的想法是在测试一些编码原理的同时,开发一个跨平台的应用程序: 反应式编程() 垂直切片,如果可能,(,) 我计划使用以下组件: Prism.Unity.Forms:似乎提供应用程序结构、ioc、导航,似乎被广泛使用,并由顶尖人士完成 ReactiveUI,ReactiveUI.XamForms,ReactiveUI.Fody:WhenyValue,ObservableAsPro

我已经为一个移动应用程序工作了一周,用于个人教育和增强。我有一些WPF和MVVM的经验,我没有移动开发的经验

我们的想法是在测试一些编码原理的同时,开发一个跨平台的应用程序:

  • 反应式编程()
  • 垂直切片,如果可能,(,)
我计划使用以下组件:

  • Prism.Unity.Forms:似乎提供应用程序结构、ioc、导航,似乎被广泛使用,并由顶尖人士完成
  • ReactiveUI,ReactiveUI.XamForms,ReactiveUI.Fody:WhenyValue,ObservableAsPropertyAttribute,ReactiveAttribute(),不使用它们对我来说是一个巨大的错失机会
my Visual Studio的当前结构如下所示:

  • Csproj
    • 视图模型
      • CreateExercisePageViewModel
      • 主页视图模型
    • 观点
      • 创建练习页
      • 主页
我做到了以下几点:

  • 使用Prism的导航功能,将主页设置为导航页面中包含的初始页面
  • 在XAML中声明一个命名按钮,使用ReactiveUI功能(如教程所示,使用WhenActivated方法)通过在code behind中创建的单向绑定设置其命令属性
  • 使用Prism navigation导航到第二页(CreateExercisePage)
一个问题是,尽管我看过一些关于垂直切片的文章,但大部分都是关于web应用程序的

所以问题是:垂直切片是否适用于移动应用程序?

我想通过使用垂直切片来重组我的项目,但是在查找有关Xamarin表单的文章时遇到了困难,我感到不安

编辑:我对垂直切片概念的理解是,您应该在同一物理空间(文件夹)中对与功能相关的代码进行分组。通过这样做,它为开发人员提供了关于这些文件的内聚性的巨大提示

假设一个移动应用程序是由屏幕组成的,我假设按屏幕对代码进行分组,而不管它们的类型(表示、逻辑、持久性)是有意义的

重写应用程序将得到以下csproj,然后:

  • Csproj
    • 屏风
        • 主页
        • 主页视图模型
      • 创造练习
        • 创建练习页
        • CreateExercisePageViewModel

添加新屏幕意味着向“屏幕”文件夹添加一个新文件夹,减少修改现有文件/逻辑的风险。

垂直切片有点像我们在Xamarin上使用的MVVM。表单: 视图是UI层,视图模型帮助处理逻辑代码,模型表示数据库数据

例如,用户单击视图层上的按钮以触发视图模型中的命令。然后,此命令可以将新产品添加到该视图模型的列表属性中。由于此列表属性已更改,它将通知UI响应此操作

此外,您的第一个体系结构更合适:

  • 视图模型
    • CreateExercisePageViewModel
    • 主页视图模型
  • 观点
    • 创建练习页
    • 主页

用视图模型分隔页面。

那么,你对这种“垂直切片”的定义是什么,这样每个人都能清楚地知道你真正想要的是什么个人观点:将属于一起的内容分组,但不要强行分组。视图和视图模型自然地属于一起,但是
UserManagement
服务不属于
LoginPage
…我的设置问题是,我已经多次使用它,类的内聚性似乎降低了。当您开始编写新功能时,IntelisSense将向您提供名称空间中的所有其他类。如果重用某些类,则会创建类似于继承的耦合,因为如果使用类发生更改,则可能会迫使重用类发生更改,从而可能破坏其他使用类,迫使开发人员全面分析重用类的使用方式。你说第一种架构更合适,但是垂直切片的好处不可取吗?我以前没有使用过垂直切片,但我认为在看到它的描述后,我们现在对mvvm所做的事情是一样的。如果您创建了一个公共页面或视图模型以供重用,那么继承类不会更改根类。那么为什么您认为它会迫使重用类改变呢?我们不应该修改根类(重用类),我们应该将特殊功能放在继承类中。