MVVM是否可以接受ViewModel继承?

时间:2019-01-20 16:54:13

标签: c# mvvm xamarin.forms

我有一个场景,其中有两个页面显示正在进行中的订单和已交付的订单。这些页面具有几乎相同的绑定和命令,因此制作单独的ViewModel将导致代码重复

建议我在两个页面上使用相同的ViewModel,因为它们将代表相同的模型,只是订单状态会有所不同。数据来自不同的端点,因此我有两种服务方法。我不喜欢为两个页面都创建一个ViewModel的想法,因为这会让我告诉ViewModel初始化ViewModel时应该从一种服务方法中获取Orders。

我想到的解决方案是将OrdersViewModel作为基类,在其中所有公共成员都在那里,并创建两个派生类,分别称为OrdersInProgressViewModel和DeliveredOrdersViewModel。

我的每个ViewModel都有一个名为InitializeAsync的方法,如果我决定采用第一种方法,并且两个页面都具有单个ViewModel,则可能必须将状态作为导航数据传递给InitializeAsync并决定使用哪种服务方法来获取订单。

使用第二种方法,我可以有两个单独的ViewModel,并在它们的InitializeAsync调用中使用相应的服务方法。

哪种方法将更支持MVVM?

我还需要记住,可能需要更多页面特定的行为(针对两个页面的另一个反对单个ViewModel的参数)

1 个答案:

答案 0 :(得分:0)

我建议您使用您描述的第二种方法。使用基本的viewmodel类,然后实现派生类。

编辑

answer to a similar question实际上与我的意思非常相似。

  

通常,我建议您不要在不同的ViewModel类之间继承,而应让它们直接从通用抽象基类继承。   这是为了避免污染不必要的复杂性,因为它会污染ViewModel类的接口,而这些接口的成员来自层次结构中的较高层,但与该类的主要目的之间并没有完全衔接。   继承所带来的耦合也可能使很难更改ViewModel类而不影响其派生类。