我应该如何使用 Prism 和 Unity 构建一个 View 的多个实例,所有实例都具有非常相似的 ViewModel

How should I architect multiple instances of a View, all with very similar ViewModels using Prism and Unity

我正在使用 XamarinForms 和 Prism for MVVM,并将 Unity 作为我的 IoC 容器。

我正在重构大量重复的 View 和 ViewModel 代码,这些代码是以前的员工处理过的。他们所做的基本上是剪切和粘贴极其复杂的视图和视图模型。我需要改变其中的一些东西,并且因为这个意大利面条代码不得不做 5 次。这基本上是视图的样子:

这些 CardView 的 5 个实例及其不同的 Viewmodel 有一个主标题、3 个标签和 3 个与标签一起使用的值。这些值是使用各种 restful 调用检索的(所有调用都使用各种参数来检索它们并处理调用的结果)。

我的问题是,我应该使用什么模式来简化这 5 个视图和视图模型,最好只简化为 1 个我需要更改的文件?粗略地说,我认为我应该有一个 ViewModel,它提供获取此远程数据所需的所有文本、值和函数。但是我对我似乎可用的所有不同方法感到困惑(ViewModel 接口、依赖项注入、使用同一 ViewModel 的不同实例注册模板视图的方法等)。

让我的问题特别复杂的是,这 5 个不同的视图分布在 Prism 模块(即 .NET 项目)中。我理解对这些的需求,但它们似乎只会增加重复代码的问题,这些代码在很大程度上做同样的事情。也许这些应该包含 restful 调用和处理的逻辑?但这如何适应我上面的 ViewModel/View 关联问题?

我会继续研究最好的方法,但我只是想知道是否有人可以引导我进入最佳实践方向?

如果您有五个看起来相同的视图和五个执​​行(几乎)相同操作的视图模型,则每项删除四个。要解决视图模型执行的差异,请创建服务。

BookService 可以通过查询书名的休息服务来实现 GetTitles,而 DvdService 查询另一个休息服务的 dvd 标题。他们都实现了ITitleService。然后 UnifiedViewModel 通过传递 BookService (最好通过构造函数注入)专门用于书籍,因此它所做的正是 BookViewModel 之前所做的。刚才你有一个视图模型和五个服务,而之前你有五个视图模型。