Java實現DDD中UnitOfWork
阿新 • • 發佈:2020-05-20
# Java實現DDD中UnitOfWork
---
### 背景
*Maintains a list of objects affected by a business transaction and coordinates the writing out of changes and the resolution of concurrency problems.
Unit of Work --Martin Fowler*
*Unit Of Work模式,由馬丁大叔提出,是一種資料訪問模式。UOW模式的作用是在業務用例的操作中跟蹤物件的所有更改(增加、刪除和更新),並將所有更改的物件儲存在其維護的列表中。在業務用例的終點,通過事務,**一次性提交所有更改**,以確保資料的完整性和有效性。總而言之,UOW協調這些物件的持久化及併發問題。*
### Uow的本質
1. UOW跟蹤變化
2. UOW維護了一個變更列表
3. UOW將跟蹤到的已變更的物件儲存到變更列表中
4. UOW藉助事務一次性提交變更列表中的所有更改
5. UOW處理併發
對於以上這些點,在C#的EF框架中,DBContext已經實現。
而這裡主要描述如何用java實現以上要點。
### Repository
* 將倉儲Repo作為聚合的範型類
* 在Repo中維護一個聚合與聚合狀態的集合
* 在Repo中每次add/update/delete等操作時,將操作的聚合物件,和其最終狀態存入集合中
* 在Repo中的retrieve方法,將聚合檢索出來並存入Repo的集合中
* 程式碼如下:
```java
public class Reposi