在花了几个小时思考基于服务器的应用程序的一些架构问题之后,我觉得我将不得不使用单例来实现我的目标。纯粹出于以下原因(证明我的气味是合理的):
- 我不需要将昂贵的对象传递到调用堆栈深处
- 我可以在任何上下文中对单例管理对象执行功能。 (很多代码已经存在,因此我不愿意重写大量其他工作代码)
除此之外,单身人士提出了另一个问题。我的基于服务器的应用程序本质上是一个 DLL,其中包含一个可以调用多个服务器实例的类。服务器实例类包含单例管理对象。通常,这将由 Windows 服务管理,因此服务器:计算机比率将为 1:1。
所以你可以将其视为(其中 -> 是 1:1,=> 是 1:many):
MACHINE -> ServiceHost(Windows 服务?) -> 服务器实例 -> Singleton 管理对象
但是,我们希望允许 SaaS 模型,该模型需要服务主机(无论是 Windows 服务还是 Win32 应用程序)能够根据业务需要启动多个服务器。因此,物理机可以运行单个服务器主机,该服务器主机将运行多个服务器实例。
如下(其中 -> 为 1:1,=> 为 1:many):
机器 -> ServiceHost(Windows 服务?)=>服务器实例->单例管理对象
问题是这些单例将在服务器之间共享。这是不可能发生的。单例必须与服务器实例是 1:1。
假设我无法摆脱这些单例,我是否可以通过调用服务实例类作为单独的进程/内存空间来将这些服务器实例彼此分离?
我只能想象我需要启动多个 EXE(并使用 WCF 进行管理),每个服务器实例一个。这显然不会太好。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)