客户端添加的行为

时间:2016-02-28 19:08:53

标签: c# oop design-patterns serialization client-server

尝试设计一个系统,在这个系统中,一个类将在一个项目中定义,在另一个项目中被引用,并在后者中具有新的功能。有这种模式吗?

上下文:我有一个游戏,在一个共同的项目中有项目。服务器和客户端都引用同一个项目,因此我可以在服务器和客户端中都有项目StaffItem,这样可以更容易地在两者之间进行序列化和反序列化。问题是,我不能在客户端重新定义StaffItem类,因为它将改变服务器对该类的看法。我试图找到一种很好的方法来添加,例如,渲染到类的客户端视图(为纹理添加代码等等)。

我几乎就是放弃并简单地将渲染代码放在公共项目中,并为服务器存根。任何指针(呵呵)都会受到赞赏。

2 个答案:

答案 0 :(得分:1)

您可以引入一个用于序列化和反序列化的DTO类,而不是通过线路传输实际对象。这解耦了双方的实际实现。

答案 1 :(得分:0)

如果我理解你的问题,你可以考虑两种选择。第一个是使用类似于装饰器模式的smth:

class StaffItem : IStaffItem {
  public int MyProp {get;set;}
  public void MyAction() {}
}
class ClientStaffItem : IStaffItem {
  private StaffItem _staffItem;
  public ClientStaffItem(StaffItem staffItem) {
    _staffItem = staffItem;
  }
  public int MyProp {
        get { return _staffItem.MyProp;} 
        set {_staffItem.MyProp; = value;}
  }
  public void MyAction() {
    _staffItem.MyAction();
  }
  public void YouClientMethod() {}
}

另一个使用继承,但确定需要序列化的字段以及如何使用属性或自定义序列化设置来仅标记所需的属性。