是否有用于编写隐藏其执行组件系统实现的库的模式?



我见过的所有Actor系统实现(主要使用Akka(都假定为Web应用程序,这意味着HTTP接口可以由异步Actor系统自然地提供服务。

但是,如果我正在编写桌面应用程序或库以用作独立于平台的应用程序的组件,该怎么办?

我希望客户端子例程能够调用val childObj = parentObject.createChild( initParam ),而不必知道我允许的消息类型或一般的参与者系统。 例如,NotparentObject ! CreateChild( initParam ),然后处理在另一条消息中收到的响应。

我知道我可以隐藏 Futures 背后的异步响应,但是同步系统是否有其他已知模式将计算移交给隐藏的参与者系统?

(我意识到这将导致对库的阻塞调用。

桌面应用程序

许多适用于库的东西也适用于这里,所以看看下面的部分。如果没有别的,您可以将使用 Akka 的代码部分包装为单独的库。需要注意的是,如果您使用的是 Swing,则可能需要在与 GUI 交互之前使用SwingUtilities.invokeLater重新启用事件调度线程。(另外,不要阻止该线程。您可能希望使用期货来避免这种情况,因此请考虑将库设计为返回期货。

图书馆

您的示例似乎假设您的参与者周围有一个薄包装器,或者至少是一个自下而上的设计,其中您的界面由您的实现细节驱动。相反,以更自上而下的方式设计库,首先弄清楚库的接口,然后(可能(使用 Akka 作为实现细节。(对于一般的库设计来说,这是一个好主意。如果您已经使用 Akka 编写了一些东西,请不要担心,只需将界面与实现分开设计并将两者拼接在一起即可。如果这样做,则不需要特定的模式,因为无论您使用Akka的事实如何,界面设计的正常模式都适用。

例如,考虑一个编译器。编译方法签名可能很简单:

def compile(sources: List[File]): List[File]  // Returns a list of binaries

这里没有提到演员。但这可能会:

compileActor ? Compile(sources)

。并阻止结果。主编译器参与者可能依赖于其他参与者,但没有理由通过公共 API 公开这些参与者。

最新更新