我正在使用工作單元模式,因爲它在此article中描述。文章解釋說,每一個服務應該注入的UnitOfWork:如何使工作單元與服務模式一起工作?
private readonly IUnitOfWork _unitOfWork;
另外一個服務必須有一個公共的方法來提交單位的工作操作:
public void Save()
{
_unitOfWork.Commit();
}
Save方法只可以通過調用調用服務的(webapi)控制器。
但這裏有我的顧慮:
1)控制器可以調用與數據庫更新多個服務,並且在這種情況下,應該調用保存()爲每個服務?那麼如果需要回滾呢?
像:
[HttpGet]
public IHttpActionResult UpdateArchive()
{
_service1.DoUpdate();
_service1.Save();
_service2.DoUpdate();
_service2.Save();
}
如果什麼service2.Save失敗了呢?
2)如果某個服務調用另一個服務,控制器將如何知道要調用哪個Save?
我對這個工作單位有點困惑。
關於你的最後一段:你不會直接從控制器調用db上下文的SaveChanges,對嗎?我的意思是,它不應該被抽象掉嗎? – brinch
這真的取決於我是否擁有DbContext。如果沒有(例如它是由DI容器注入的,並且你甚至沒有在控制器的任何地方看到它),我會在其中一個服務上調用「Save」。 –