我正在开发一个客户端/服务器游戏(C#.NET),我不想让客户端保留我的任何服务器端应用程序代码,但想要共享对象。
例如,想象一下你有一个右手武器插槽和一个可以携带额外物品的背包。现在有很多服务器端代码可以控制哪些项目可以进入哪个插槽,当你摆动右手时会发生什么。我不想出于各种原因将此代码放在我的客户端中,但我经常发现,如果我为每个代码生成客户端类和服务器端类,我会看到很多数据重复和一些重复在方法。我还必须将1个类转换为另一个。
另一个例子是游戏中的物品。物品具有“使用”能力(如使用键,或使用火炬)和属性,如名称和重量。因此,当我创建Item类时,我更愿意像这样创建一个类:
Public Class Item
{
int Weight;
string Name;
void Use() { //Do something interesting but not public to the client }
}
最终,此对象的副本将被序列化,并在进行更改时相互发送给客户端或服务器。如果一个部分类可以跨越非常有希望的项目(坏的,他们不会)。考虑序列化/反序列化,我不认为子类在这里感觉(如ServerItem : Item
)。我将使用扩展方法玩一些,看看有什么影响子类,但如果有人有任何想法,或者我只是遗漏了一些明显的东西,请告诉我。
答案 0 :(得分:1)
您确实希望将数据与行为分开,并且只拥有轻量级可共享数据类,然后(在服务器上)具有以服务器为中心的类,这些类使用数据来确定行为。 (试着看一些设计模式 - 也许是'装饰者')
您可能需要的一个轻量级示例是:
// lightweight data class thats shared
public class Item
{
public int Weight { get; set; }
public string Name { get; set; }
}
// decorator pattern class that adds behaviour
public class ServerItem
{
private Item item;
public ServerItem(Item item)
{
this.item = item;
}
public void Use()
{
// do something with item;
}
}
ServerItem currentServerItem = new ServerItem(currentItem);