prism mvvm服务器和具有相同型号的客户端

时间:2017-04-05 06:00:01

标签: c# mvvm uwp prism

我的服务器正在使用包含所有模型类的程序集(model.dll)。 我想在使用MVVM的UWP-Client-App中使用这些类。

在MVVM中,我的所有模型类都必须继承BindableBase(Prism)。 有没有办法在我的客户端中使用相同的模型类,或者我是否必须再次为客户端创建它们?

我能看到的唯一方法是所有模型类都继承BindableBase,但我在服务器上我不需要这种依赖...

1 个答案:

答案 0 :(得分:2)

由于您要在服务器和客户端上使用这些类,我想您正在考虑将它们放入PCL(可移植类库)中,因此每个模型只能维护1个文件。这意味着您在客户端上所需的所有代码也将在服务器上可用。

Prism的BindableBase只不过是INotifyPropertyChanged的辅助实现。因此,您可以自己使用BindableBase或实施INotifyPropertyChanged。无论哪种方式,你都会有一些前端'你后端的代码。

请注意,为了能够使用BindableBase,您没有自动属性,但是属性设置器会触发INotifyPropertyChanged(当您自己实现界面时也是如此)。

private string _name;
public string Name
{
    get { return _name; }
    set { SetProperty(ref _name, value); }
}

我通常做的是为我的模型创建一个PCL,添加Prism.Core NuGet包(这是一个PCL本身)并使用'前端'代码在我的服务器上。如果你想知道Prism.Core中的代码是什么,那就是Source/Prism folder下的所有代码。你不需要在服务器端引入Prism.Windows。

你有什么选择?

  • 两次写入所有模型,一次使用服务器的自动属性,一次使用BindableBase / INotifyPropertyChanged为客户端。在你的模型不一致之前我给它不到一周。 Tou计数器,您可以进行代码(重新生成)以生成双方之一。
  • 使用Fody代替Prism' BindableBase进行INotifyPropertyChanged,您可以继续使用Prism的其余部分。但在我看来,这有同样的问题,将Fody的属性带到服务器上。
  • 使用链接的项目文件在服务器和客户端之间共享模型,因此文件只存在一次。使每个类成为局部,在客户端中放置第二个部分类,并将Fody的属性放在该定义上。对我来说看起来很麻烦。

结论:无论您是使用Prism还是Fody,都要学习如何使用服务器端的小依赖性,从而带来单一模型的巨大优势。