C# 服务器对象的UI表示

C# 服务器对象的UI表示,c#,architecture,C#,Architecture,我有一个应用程序,其中创建了许多对象,并且用户经常更改其属性。服务器中有各种模块,每个模块创建一个会话。每个会话由一个客户端和一个运行主应用程序的用户组成。用户只需干预对象并修改其属性,我正在使用windows窗体中的属性网格来执行此操作。客户端将如何连接到主应用程序尚待决定。我正在考虑双工WCF服务。我需要两个建议: 如何在客户端UI上表示远程对象?我正在考虑在VS form designer上手动创建UI项,并放置一个映射XML文件,初始化该文件时,UI将使用映射表获取每个UI元素的属性详细

我有一个应用程序,其中创建了许多对象,并且用户经常更改其属性。服务器中有各种模块,每个模块创建一个会话。每个会话由一个客户端和一个运行主应用程序的用户组成。用户只需干预对象并修改其属性,我正在使用windows窗体中的属性网格来执行此操作。客户端将如何连接到主应用程序尚待决定。我正在考虑双工WCF服务。我需要两个建议:

如何在客户端UI上表示远程对象?我正在考虑在VS form designer上手动创建UI项,并放置一个映射XML文件,初始化该文件时,UI将使用映射表获取每个UI元素的属性详细信息并进行相应修改。当映射对象的故障状态为true时,UI中的面板将填充一些颜色

由于服务器上的对象经常更改,所以告诉客户机更新UI的最佳方法是什么。我考虑的是双工WCF,如果客户机为特定对象注册,他将收到对象更改的通知。我的问题是,我们应该将整个对象传输到客户端,还是只传输更新的属性以及包装在新类型中的对象Id

interface IChange
{
    string ObjectName { get; set; }
    string PropertyName { get; set; }
    object NewValue { get; set; }
    object OldValue { get; set; }
}
建议我实现目标的其他或更好的方法

编辑

目前,没有一个物体是不多的,但它可能会急剧增长。这个应用程序是基于插件的,开发者可能会添加数千个对象+可能有几个插件。对象大小我不希望大于10-20kB,但不确定。关键是,如果我将整个对象发送给客户端,90%的对象是无用的,只有更新的属性与客户端相关。客户端必须扫描所有属性并更新UI。但如果我只向客户发送更改,那么客户就知道要更改什么。对对象的更新可能非常频繁,因为对象的一个属性中的任何更改都会触发对其他对象的多个更改,这是一种连锁反应,所有更改都应该得到通知。例如,如果我改变我家主开关的IsOn属性,所有电器都会被触发关闭。所有此类对象更改都需要通知客户机。一旦客户端收到关闭每个对象的通知,它将显示UI上的所有设备未运行

我的问题是,我们应该将整个对象传输给客户机,还是只传输更新的属性以及用新类型包装的对象Id

性能:取决于数据对象有多大,以及每次有多少变化。例如,如果您有1000个对象,每个对象的大小为1Mb,有1000个不同的属性,并且平均只进行了1或2次小更改,那么只发送更改是有意义的

减少网络负载 更少的内存/处理密集型 如果必须对大量XML进行反序列化,尤其如此。 复杂性:有时候,把改变过的东西一扫而光,从头开始会更容易;您不必太担心维护对象状态、处理同一对象上的多个更改等问题

因为服务器上的对象经常变化,所以最好的方法是什么 告诉客户端更新UI的方法

回到可能对象的数量,它们的变化频率以及它们来自何处,客户端将如何连接到主应用程序尚待决定。还取决于用户界面需要的最新程度。如果服务器上的某个对象发生更改,并且您有100个客户端需要更新,那么需要多久更新它们

请记住,更改的频率越高、速度越快,应用程序的聊天量就越大,这将开始扼杀性能—您必须跨越的域、进程、服务器和网络的边界越多

编辑

因此,听起来这种模式可能会有所帮助:

当收到变更请求时,让所有的连锁变更生效。 然后将所有更改、增量(而不是整个对象)作为单个批处理/集合发回调用方。 如果有很多客户端需要新数据,可以使用某种缓存。 我的问题是,我们应该将整个对象传输给客户机,还是只传输更新的属性以及用新类型包装的对象Id

性能:取决于数据对象有多大,以及每次有多少变化。例如,如果您有1000个对象,每个对象的大小为1Mb,有1000个不同的属性,并且平均只进行了1或2次小更改,那么只发送更改是有意义的

减少网络负载 更少的内存/处理密集型 如果必须对大量XML进行反序列化,尤其如此。 复杂性:有时候,把改变过的东西一扫而光,从头开始会更容易;您不必太担心维护对象状态、处理同一对象上的多个更改等问题

因为服务器上的对象经常变化,所以最好的方法是什么 告诉客户端更新UI的方法

C omes返回到可能对象的数量、它们的更改频率以及它们来自何处客户端将如何连接到主应用程序尚待决定。还取决于用户界面需要的最新程度。如果服务器上的某个对象发生更改,并且您有100个客户端需要更新,那么需要多久更新它们

请记住,更改的频率越高、速度越快,应用程序的聊天量就越大,这将开始扼杀性能—您必须跨越的域、进程、服务器和网络的边界越多

编辑

因此,听起来这种模式可能会有所帮助:

当收到变更请求时,让所有的连锁变更生效。 然后将所有更改、增量(而不是整个对象)作为单个批处理/集合发回调用方。 如果有很多客户端需要新数据,可以使用某种缓存。
对象通常多久更改一次?对象通常多久更改一次?