这个异步的演员初始化成语是否有名称?

时间:2017-02-15 09:25:20

标签: asynchronous design-patterns initialization akka actor

每当我创建一个需要一些异步获取的数据来初始化自己的actor时,我发现自己使用了这样的习语。它有名字吗? (这是最好的方法吗?)

receive

对于通过群集分片创建的actor,异步请求发生在preStart而不是#include<iostream> #include<iomanip> #include<cmath> #include<math.h> using namespace std; int main() { int n, sk,M[20], i,j,kiek; cin >> n; int k = double(pow(2, n)); kiek = 0; while (k > 0) { kiek++; k = k / 10; } k = double(pow(2, n)); if (kiek >= 3) { for (i = 3; i >= 1; i--) { sk = k % 10; M[i] = sk; k = k / 10; } for (j = 1; j <= 3; j++) { cout << M[j]; } cout << endl; } else if (kiek == 2) { for (i = 2; i >= 1; i--) { sk = k % 10; M[i] = sk; k = k / 10; } for (j = 1; j <= 2; j++) { cout << M[j]; } cout << endl; } else cout << k << endl; return 0; }

要明确,我不是在寻找GoF模式。

3 个答案:

答案 0 :(得分:1)

我从未使用过藏匿的东西。如果我真的需要初始化,我更有可能使用FSM来确保我的演员处于就绪状态。

http://doc.akka.io/docs/akka/current/scala/fsm.html

我想你可以结合两种方法。

答案 1 :(得分:0)

我认为最接近的设计模式是代理。

根据文档here

  

设计代理或代理对象:在客户端第一次发出代理请求时实例化真实对象,记住该真实对象的身份,并将发起请求转发给该真实对象。然后,所有后续请求都直接转发到封装的真实对象。

在你的情况下,你可以想到被代理包裹的actor。一旦从数据库初始化了actor,代理就会将所有请求转发给它,即真正的 actor。在此之前,代理将返回null,默认 actor或其他内容。

答案 2 :(得分:0)

  

每当我 创建 时, 需要 的某个参与者会异步获取   数据 初始化 本身......

我想说,你基本上描述了一个工厂模式。如果你的演员是DDD概念,那么它将在DDD Repository的上下文中。换句话说,您正在处理实体的复杂创建及其验证 - 需要 部分。 DDD存储库的职责之一是产生 有效 聚合根。

我的两分钱。

谢尔盖

&LT;&GT;&LT;