最近看到一個應用,雖然代碼量不大,但設計卻很新穎,有種麻雀雖小,五髒俱全的感覺,在這跟大家分享下
先看下大致結構:
其中
1. AsyncWorker:抽象的業務接口,提供了doWork方法,具體的業務處理邏輯由子類來封裝
2. AbstractNapoliWorker<T>:總控制器
a) 定義泛型,由子類來控制解析出來的消息類型,自由靈活。
b)對doWork方法初步實現,引入了一些控制邏輯
[html] view plaincopyprint?
public boolean doWork(Serializable msg) {
// 1. 解析消息
T destMessageBean = parseMessage(msg);
// 2. 消息過濾
if (filterMessage(destMessageBean)) {
// 3. 業務處理
doBiz(destMessageBean);
}
return true;
}
public boolean doWork(Serializable msg) {
// 1. 解析消息
T destMessageBean = parseMessage(msg);
// 2. 消息過濾
if (filterMessage(destMessageBean)) {
// 3. 業務處理
doBiz(destMessageBean);
}
return true;
}
注:代碼示例中的filterMessage方法、doBiz方法都是空實現的,只是為保證基本流程的通暢性。具體的業務邏輯由子類來實現
3. MailSendWorker:子控制器
a)傳輸具體的泛型模板
b)對filterMessage方法、doBiz方法具體實現
4. MailProcessMessage:原子執行器。有針對性的處理不同的業務(N種不同流程)
總結:結構還是比較清晰的,不同的業務也可以交給不同的原子執行器處理,互不干擾,日後如果有新的流程接入,也可以快速接入,但是也有點小不足。
[html]
protected T parseMessage(Serializable msg) {
if (msg == null) {
return null;
}
if (msg instanceof String) {
//業務處理
return ...;
}
return null;
}
protected T parseMessage(Serializable msg) {
if (msg == null) {
return null;
}
if (msg instanceof String) {
//業務處理
return ...;
}
return null;
}
parseMessage方法,控制的過死,每一種類型(如:String)只能按一種方式來解析,不靈活,如果入參再增加一個類型參數,用於控制msg采用何種方式來解析,也許會更好些。