Ich verwende das Muster der Arbeitseinheit, wie es in dieser article beschrieben wird. Der Artikel erklärt, dass jeder Dienst eine UnitOfWork injizieren sollte:Wie funktioniert die Einheit mit dem Dienstmuster?
private readonly IUnitOfWork _unitOfWork;
Des Weiteren muss ein Dienst eine öffentliche Methode haben zu begehen unit-of-Arbeitsvorgänge:
public void Save()
{
_unitOfWork.Commit();
}
Die Save-Methode darf nur von
aufgerufen werden der (Webapi) -Controller, der den Dienst aufruft.Aber hier sind meine Bedenken:
1) Die Steuerung kann mehr als einen Dienst mit Datenbank-Updates nennen, und in diesem Fall sollte es Save() für jeden Dienst anrufen? Was ist dann, wenn ein Rollback benötigt wird?
Like:
[HttpGet]
public IHttpActionResult UpdateArchive()
{
_service1.DoUpdate();
_service1.Save();
_service2.DoUpdate();
_service2.Save();
}
Was passiert, wenn service2.Save ausfällt?
2) Was ist, wenn ein Service einen anderen Service anruft? Wie weiß der Controller, welche Save zu callen ist?
Ich bin ein bisschen verwirrt mit dieser Einheit der Arbeit.
Über Ihren letzten Absatz: Sie würden nicht SaveChanges auf DB Kontext direkt von der Steuerung aufrufen, würden Sie? Ich meine, sollte es nicht abstrahiert werden? – brinch
Das würde wirklich davon abhängen, ob ich den DbContext zur Hand haben würde. Wenn nicht (z. B. wird es von einem DI-Container injiziert und Sie sehen es nicht irgendwo im Controller) würde ich 'Save' auf einem der Dienste aufrufen. –