客户端添加的行为

本文关键字:添加 客户端 | 更新日期: 2023-09-27 18:36:33

正在

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

上下文:我有一个游戏,它在一个公共项目中包含项目。服务器和客户端都引用了同一个项目,因此我可以在服务器和客户端中同时拥有 StaffItem 项,从而更轻松地在两者之间进行序列化和反序列化。问题是,我无法在客户端中重新定义 StaffItem 类,因为它会更改此类的服务器视角。例如,我正在尝试找到一种很好的方法来将渲染添加到类的客户端视图(为纹理添加代码等等)。

我几乎到了放弃的地步,只是将渲染代码放在公共项目中,并将其存根用于服务器。任何指示(呵呵)将不胜感激。

客户端添加的行为

您可以引入一个 DTO 类来序列化和反序列化,而不是通过网络传输实际对象。这将双方的实际实现分离。

如果我理解正确,您可以考虑两种选择。第一种是使用类似于装饰器模式的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() {}
}

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