私は、このarticleに記載されているように、作業単位パターンを使用しています。作業単位をサービスパターンで機能させるにはどうすればいいですか?
private readonly IUnitOfWork _unitOfWork;
さらにサービスは、作業単位の操作をコミットするためにパブリックメソッドを持っている必要があります:
public void Save()
{
_unitOfWork.Commit();
}
保存方法だけで呼び出すことができ、物品は、すべてのサービスがUnitOfWorkのを注入すべきであると説明していますサービスを呼び出す(webapi)コントローラ。
しかし、ここでは私の関心事です:
1)複数のデータベースの更新とサービス、そしてその場合には、各サービスの保存()を呼び出す必要がありますを呼び出すことができ、コントローラ?ロールバックが必要な場合はどうなりますか?
同様:
[HttpGet]
public IHttpActionResult UpdateArchive()
{
_service1.DoUpdate();
_service1.Save();
_service2.DoUpdate();
_service2.Save();
}
何service2.Saveが失敗した場合は?
2)サービスが別のサービスを呼び出すと、どのように保存するかをコントローラがどのように知っていますか?
私はこの作業単位とちょっと混乱しています。
最後の段落について:コントローラから直接dbコンテキストでSaveChangesを呼び出すことはありませんか?つまり、抽象化してはならないのですか? – brinch
これは実際に私がDbContextを手に入れるかどうかにかかっています。そうでない場合(DIコンテナによって注入されていて、コントローラのどこにも表示されていないなど)、私はサービスの1つで 'Save'を呼び出します。 –