我现在试图从我的服务器代码中删除上帝对象。
在我的服务器设计开始时,我决定将World
和const
个容器对象作为单身对象。
但我的服务器是多线程的,而单身人士并没有很好的解决方案。
所以我管理了它,并将这些类移动为Core
类实例。
例如:
class Core
{
...
private:
World world;
CExpTable exptable;
...
};
新连接上的 Core
为Session
类提供对象的引用。
new Session(io_pool.getService(), world, exptable ...);
我只需要该对象的一个实例。 但上帝的对象是糟糕的设计模式,所以我想问一下,我怎样才能重新设计那个对象,避免它,并且单体模式设计是否良好?
答案 0 :(得分:3)
首先,您可以阅读许多有关单身人士不良的帖子,例如this。还有很多关于为什么这种模式在大多数情况下并不真正有用的有效点。
至于你的重构:最好的方法是一步一步走。大转动通常会产生错误。根据我的经验,拆除一个神对象并不是很难。
您可以按以下步骤操作:
下一步是在新职责的上下文中用新界面替换god-object类的所有用法,然后重新执行。
如果你有一些 state 需要由这些职责使用/处理(比如你的例子中的World
实例),那么你必须让它共享。例如,您可以将其转换为shared_ptr
,因此可以将其保留在重构过程的上帝对象中,并在新类中使用它。