我正在考虑使用 WCF 来执行客户端/服务器、UI/数据库层,我的想法是我将使用 WCF 服务来读取 DataRow,填充类的属性,然后将其返回给 UI 客户端(这是Windows 端到端)。
我从 DLL 中的一个类开始,并在 UI 和服务器之间共享 DLL。服务器读取 DataRow,并且类知道如何从 DataRow 中填充自己。该类具有带有私有支持变量的公共属性,但是当从 DataRow 填充时,该类直接写入支持变量。然后将类的实例传回 UI。
UI 反序列化类。该类具有公共属性,并且设置器都执行 INotifyPropertyChanged 内容以支持绑定。到目前为止,还没有正常。
我从 [DataContract] 和 [DataMember] 属性开始,但注意到当我的对象实例在 UI 上被反序列化时,它会调用该类实例的公共属性设置器 - 这反过来会触发“已更改” ' 每个属性的事件。
为了解决这个问题,我读到我可以使用 IXmlSerializer。所以我删除了属性,并支持 IXmlSerializer 接口,使用 ReadXml() 方法直接写入公共属性后面的支持变量。
这一切都很好(除了现在必须有一个无参数的构造函数),但这合理吗?这是事情应该如何运作的吗?
我是否应该有一个共享类,它从 UI 知道 INotifyPropertyChanged 并且从服务器端知道如何从 DataRow 构造自己。我应该把所有这些逻辑放在其他地方,并使用 XSD 定义类吗?
问题是我可能可以解决我遇到的问题(比如如何反序列化可为空的类型),但我不确定是否有更好的方法。除了 Windows 到 Windows WCF 通信之外,我没有可预见的需要支持任何东西,所以我实际上并不关心 XML 的样子(或者它是否存在)。
指针将不胜感激。
谢谢。