Domain Model:Business Request的虛實之道與Business Action的設計模式
Author:Anders小明
在《
Domain Object:基于業務行為的分析》一文中,我提出在high level的角度看,業務流程由三個模型構成:Business Request,Business Process以及Business Action。實際設計時,Business Request和Business Action將進步的細化。
Business Request的虛實之道
Business Request的概念,與http request是不同的。為避免誤解,特意加上Business一詞修飾。
所謂虛實是指是否將Business Request概念實例化。不做實例化的理由時處理簡單;實例化則有助于處理Business Transaction以及賬目模式。
一個業務上的Business Request可能包括多個Request Form,與核心業務對象對應,例如:在線訂單,就包括了購買物品及其數量和折扣,支付協議和發貨協議等。
對于沒有實例化Business Request的情況下,在實際業務操作時,對每一個form的操作都需要一個物理的transaction來支持。
這樣做的問題是,由于沒有記錄Business Request,直接操作業務對象,在做業務日志時只能記錄操作前以及操作后的信息(既“減肥前,減肥后”);同時cross多個transaction,要支持查詢到一次Business Request所有操作的信息,需要新建一個log index或者類似的手段,在業務開始時獲取注冊一個index,所有log操作中引用這個index,在業務結束后close該index。雖然如此,也帶來的是業務上做undo以及redo操作的不便。
但是如果實例化Business Request,就很容易處理這兩樣操作。建立一個Business Request,同時記錄所涉及的Request Form。這樣做的好處是:可以很容易的記錄一些額外的信息;同時可以很容易的支持approve操作(既俗說的“管帳的不管錢,管錢的不管帳”)。不過目前大部分的系統都沒有處理Business Request實例化,不是所有的業務操作需要Approve,另外實例化的麻煩是Request Form會和Domain Object看起來一樣,已經處理了一個log對象,再處理一個request對象總是讓人多少心里有點不爽;而頁面處理需要抽取出變化的properties。
Business Action的設計模式
簡單的說,Business Action將被細化成action controller和concrete action。在這級別,action對于request的響應處理已知的有三種Pattern:
Observer Pattern, Chain of responsibility Pattern以及Pipes and Filters Pattern,下面討論一下三者的區別:
name |
Dispatch Mode |
Actions Relation |
Controller |
Observer Pattern |
request和action是one2many
multicast deliver |
各個action獨立工作
share the same input |
Action register to Controller,Controller visit Action |
Chain of Responsibility |
request和action是one2one
chained deliver |
各個action獨立工作 |
controller poll actions |
Pipes and Filters |
request和action是one2many
Piped deliver |
各個action合作工作
share the same work data |
controller iterate actions |
這三個pattern處理的各自不同的scenario.
其中Pipes and Filters的alias是Data Flow Pattern,很適合需要處理大量數據的情況。