重讀PEAA,把其提到的模式整理一下,方便參考
領域邏輯模式
事務指令碼(Transaction script)
使用過程來組織商務邏輯,每個過程處理來自表現層的單個請求
表模組(Table Module)
處理某一資料庫表或視圖中所有行的商務邏輯的一個執行個體
領域模型(Domain Module)
合并了行為和資料的領域的物件模型
服務層(Service Layer)
通過一個服務層來定義應用程式邊界,在服務層中建立一組可用的操作集合,並在每個操作內部協調應用程式的響應
資料來源架構模式
表資料入口(Table Data Gateway)
充當資料庫表訪問入口的對象,一個執行個體處理表中的所有的行
行資料入口(Row Data Gateway)
充當資料庫中單條記錄入口的對象,每行一個執行個體
活動記錄(Active Record)
一個對象,它包括資料庫表或視圖的某一行,封裝資料庫訪問,並在這些資料上增加了商務邏輯
資料庫映射器(Data Mapper)
在保持對象和資料庫(以及映射器本身)彼此獨立的情況下在二者之間移動資料的一個映射器
對象-關係行為模式
工作單元(Unit of Work)
維護受業務事務影響的對象列表,並協調變化的寫入和並發問題的解決
對象-關係結構模式
對象-關係中繼資料映射模式
Web表現模式
MVC模式
把使用者介面互動分拆到三種不同角色中
頁面控制器(Page Controller)
在Web為特定頁面或動作處理請求的對象
前端控制器(Front Controller)
為Web網站處理所有請求的控制器,易於集中控制、易於抽象和裝飾
模板視圖(Template View)
在html頁面嵌入標記用於response資訊
轉換視圖(Transform View)
一項項處理領域邏輯,並將其轉化成html的視圖
兩步視圖(Two step View)
先形成邏輯頁面,在轉換成html頁面
應用控制器(Application Controller)
應於處理螢幕導航和應用程式流程的集中控制器,適於複雜的螢幕邏輯需求
分布模式
遠程外觀(Remote Facade)
為細粒度對象提供粗粒度的外觀用來改善網路上的效率,而服務層未必需要粗粒度封裝
資料轉送對象(Data Transfer Object)
一個為了減少方法調用次數而在進程間傳輸資料的對象,有單一/多個(細分)的選擇
離線併發模式
工作階段狀態模式
客戶工作階段狀態(Client State)
將工作階段狀態儲存在用戶端
服務端工作階段狀態(Server State)
將工作階段狀態以序列化的方式存放在服務端
資料庫工作階段狀態(DataBase State)
將會話資料作為已提交的資料儲存到資料庫中
基本模式
入口(Gateway)
Client用於封裝外部系統或者資源訪問的對象,而Facade通常由服務作者提供,用於簡化服務API
映射器(Mapper)
在兩個獨立的對象間通訊的對象,通常於層間,如資料庫映射器
Mediator解藕個對象間關係,但各對象知曉Mediator本身的存在,映射器不為任一子系統所知曉
層超類(Layer Supertype)
某一類型充當一層中所有類型的超類
分離介面
在一個包中定義介面,在另外一個與這個包分離的包中實現介面
註冊表(Registry)
一個眾所周知的對象,其他對象可以通過該對象公用的對象的服務,如 Facade Session
值對象(Value Object)
一個如貨幣或日期這樣的小而簡單的對象,判等時不根據標識ID,如.NET的struct類型
註:j2ee社區使用此名稱表示資料轉送對象
貨幣(Money)
表示一個貨幣值
特殊情況(Special Case)
對特殊情況提供特殊行為的子類,如Employee實現的NULLEmployee
外掛程式(Plugin)
在配置時而非編譯時間連結類,結合工廠、介面、單體的外掛程式實現
例圖
interface IdGenerator...
public static final IdGenerator INSTANCE =
(IdGenerator) PluginFactory.getPlugin(IdGenerator.class);
服務樁(Service
Stub)
在測試時移除對具體服務的依賴,定義入口,以外掛程式方式載入入口的實現,保持服務樁簡單
圖中Tax Service interface即為Gateway
記錄集(Recordset)
表格式資料在記憶體中的表現方式
整理持續中......