【问题标题】:Xamarin Forms : using Prism and/or ReactiveUI, is it possible to achieve vertical slicing?Xamarin Forms:使用 Prism 和/或 ReactiveUI,是否可以实现垂直切片?
【发布时间】:2019-09-29 22:36:43
【问题描述】:

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

这个想法是做一个跨平台的应用程序,同时测试一些编码理念:

我打算使用以下组件:

  • Prism.Unity.Forms :似乎提供了应用程序结构、ioc、导航,似乎被广泛使用,并且由一流的人完成
  • ReactiveUI、ReactiveUI.XamForms、ReactiveUI.Fody :WhenAnyValue、ObservableAsPropertyAttribute、ReactiveAttribute (tutorial),不使用它们对我来说似乎是一个巨大的错失机会

我的 Visual Studio 的当前结构如下:

  • Csproj
    • 视图模型
      • 创建ExercisePageViewModel
      • 主页视图模型
    • 查看次数
      • 创建练习页
      • 主页

我管理了以下内容:

  • 使用 Prism 的导航功能将 HomePage 设置为包含在 NavigationPage 中的初始页面。
  • 在 XAML 中声明一个命名按钮,通过在代码中创建的 OneWay 绑定设置其 Command 属性,使用 ReactiveUI 功能(如教程中所示,使用 WhenActivated 方法)
  • 使用 Prism 导航导航到第二页 (CreateExercisePage)

一个问题是,尽管我看过一些关于垂直切片的文章,但大部分都是关于 Web 应用程序的。

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

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

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

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

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

  • Csproj
    • 屏幕
      • 首页
        • 主页
        • 主页视图模型
      • 创建练习
        • 创建练习页
        • 创建ExercisePageViewModel

添加新屏幕意味着将新文件夹添加到“屏幕”文件夹,从而降低修改现有文件/逻辑的风险。

【问题讨论】:

  • 那么你对这个“垂直切片”的定义是什么,这样大家就清楚你真正想要什么了
  • 个人观点:将属于同一事物的东西归为一类,但不要强求。视图和视图模型自然属于一起,但是UserManagement 服务不属于LoginPage...

标签: c# xamarin.forms architecture prism reactiveui


【解决方案1】:

垂直切片有点像我们在 Xamarin.Forms 上使用的 MVVM: https://docs.microsoft.com/en-us/xamarin/xamarin-forms/enterprise-application-patterns/mvvm 视图是 UI 层,视图模型帮助您处理逻辑代码,模型代表您的数据库数据。

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

此外,您的第一个架构更合适:

  • 视图模型
    • 创建ExercisePageViewModel
    • 主页视图模型
  • 查看次数
    • 创建练习页
    • 主页

让你的页面被你的视图模型分开。

【讨论】:

  • 我对该设置的问题是,我已经多次使用它,并且课程的凝聚力似乎降低了。当你开始编写一个新特性时,Intelisense 会用命名空间中的所有其他类来淹没你。如果重用某些类,就会产生耦合,类似于继承,因为如果消费类发生变化,它可能会迫使重用类发生变化,从而可能破坏其他消费类,迫使开发人员全面分析重用类的使用方式。你说第一种架构更合适,但垂直切片的好处不是可取的吗?
  • 我之前没有使用过垂直切片,但是我认为在看到它的描述之后我们现在正在使用 mvvm 做同样的事情。如果您为重用创建了一个公共页面或视图模型,则继承类不会更改根类。那么为什么你认为它会迫使重用类改变呢?我们不应该修改根类(重用类),我们应该将特殊功能放在您的继承类中。
猜你喜欢
  • 1970-01-01
  • 2019-09-29
  • 1970-01-01
  • 2019-03-05
  • 2018-07-21
  • 1970-01-01
  • 2016-12-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多