2016-02-28 73 views
0

试图设计一个系统,其中一个类将在项目中定义,在另一个中引用并在后者中具有新功能。有这样的模式吗?客户端添加的行为

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

我几乎要放弃了,只需将渲染代码放在公共项目中,然后将其存入服务器。任何指针(赫赫)将不胜感激。

+0

为了理解这个问题,为什么要在从'StaffItem'类继承的客户端上创建一个子类不起作用? –

+0

“的问题是,我无法重新定义客户端中的StaffItem类”Redifine怎么样?为什么? –

+0

嗯@iuliu.net我想保持相同的类,因为我会用我的序列化。我将为这些类型分配ID。我想我可以使用一个子类,并改变我的序列化工作方式... –

回答

0

如果我理解你的问题,你可以考虑两种选择。第一种是使用带有装饰图案水木清华相似:

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() {} 
} 

另一种使用继承,但确定需要哪些字段序列化,以及如何和使用属性或自定义序列化设置,以纪念只需要属性。

1

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

+0

+1,但展开答案。解释为什么不依赖业务领域中的通信协议/对象是个好主意。请解释为什么强耦合使得以后难以提高代码质量。 – jgauffin