我现在正面临我的设计问题。我正在处理主服务器和半从客户端的情况。我有服务器,实际上可以做任何它想做的事情。(让我们不要解构网络层,因为它已经可以很好地满足我自己的需要了。)
我尝试使用对象池设计模式,并且我有基础对象——我们称之为对象ManagedObject
,因为它是对象的基础类型。存储应用程序运行所需的ManagedObject
所有必要数据/信息。我有自己的系统,可以同步客户端和服务器内部的存储状态,所以它也能正常工作。
好吧,在对我的问题进行了很长时间的介绍之后:
问题是我Server
可以看到并且可以编辑它拥有的数据(对于客户端也是如此)。我希望以完全相同的方式保存和使用一种类型,假设以下代码:
class ManagedObject
{
private:
some::other::ManagedObject managedObject;
public:
explicit ManagedObject(char* buffer);
};
在这种情况下,我们有基础布局类,其中包含some::other::ManagedObject
. 我个人很想在运行时动态地使这个变量为 const 或不,但我只知道它不能那样工作(也不应该)。
我曾考虑过创建统一的接口来访问它,但这也是不可能的,因为接口必须声明它的类型,所以我能得到的最好的结果是:
some::other::ManagedObject getMut(); // Yes copy
const some::other::ManagedObject& get();
这对我的情况并没有太大帮助,因为这是两种方法,用户必须知道该做什么以及何时不只是直接复制同一对象的大量副本。此外,我必须观察对象是否已更改,并将更新发送到其他实例。
我的最后一次也是目前的尝试是默认复制所有内容,并创建“事务”机制,如果有commit()
方法,它只会验证是否可能(允许)。
这是一个问题:
我如何设计我的代码以避免copy by default
接近,并使其作为整个系统更好/更有效。
注释:
我知道这是过早的优化,但我希望系统的这一部分能够顺利运行,因为它将成为我的游戏类项目的主动脉。