我正在考虑创建一个 ServiceManager 区域(一组具有外观接口的类),其他区域可以通过该区域注册并提供“服务”,并传递请求。我计划在它自己的线程中运行这个类,并且我希望将关键区域保持在最低限度,并且完全在这个区域内处理。
当一个区域注册时,他们会获得自己的收件箱和发件箱,即服务请求列表。
现在我的困境是,如果我不共享发件箱(服务提供商区域)的链接,我将需要通过搜索匹配找到该框(所有注册的关键区域,因此所有提交请求为好吧,违背了本地发件箱的目的)。
替代方案我在 ServiceManager 区域之外提供一个链接,然后编码一个新的外部区域,可以跳过关键区域并直接更新列表,绕过这个。
我的解决方案是在 ServiceManager 区域的代码中创建一个“关键”对象,直接访问永远不会离开该区域(包括完全空的任何对象都可以使用)。
当一个区域被注册时,他们会得到一个类作为回报,其中一个指向上述对象的链接以及一个指向已注册区域的 ServiceManager 对象的链接。(其中包含直接收件箱/发件箱链接以及其他信息)。
此“令牌”对象还包含以下代码
public ServiceObject GetServiceObject(Key key)
{
If (key == this.key)
{
return serviceObject;
}
return null
{
这样,即使命令是公开的,它的内容也只能在 ServiceManager 区域内访问,因为它是唯一可以直接访问 Key 对象的区域。这绕过了所有服务用户共享关键区域的两个问题,以及这些服务用户直接访问他们的列表的风险。
所以它解决了问题,但对我来说这看起来真的很难看,有没有更聪明的方法,如果怎么做?