Je mehr ich DDD und Repositories erkunde, desto mehr fühle ich mich stattdessen zu einem Domänen-Service-Ansatz hingezogen.Repository vs Domain Services
Etwas in meinem Bauch mag nicht die Tatsache, dass ein Repository (zumindest in den Beispielen und Artikeln, die ich gelesen habe) nicht einzelne Anweisung atomar ist.
using (var customerRepository = GetCustomerRepository())
{
customerRepository.AddCustomerForDelete(someCustomer);
customerRepository.SaveChanges();
}
Es gibt eine Reihe von Dingen, die ich einfach nicht mag. Im Allgemeinen wird das Repository selbst zu einem Problem und muss gepflegt werden (es ist IDisposable und erfordert ein "Commit"). Es scheint nicht so, als würde ich Persistenzwünsche abstrahieren.
Ein viel einfacher Ansatz, der in meinem Bauch zu sitzen scheint besser ist:
GetCustomerService().DeleteCustomer(someCustomer);
Es Atom ist. Es gibt keine Instanz eines Repositorys, um Änderungen zu verwalten, zu verwerfen oder zu speichern. Und wenn Sie wirklich, wirklich UOW Unterstützung benötigen außerhalb einer einzigen Operation auf aggregierter Wurzel, übernehmen irgendeine Art von Datenumfang Unterstützung (ähnlich einer Transaction):
using(var ds = new DataScope())
{
// both of these happen under the same underlying DbConnection or whatever
GetCustomerService().DeleteCustomer(someCustomer1);
GetCustomerService().DoSomethingElse(someCustomer2);
}
In beiden oben, zum Beispiel willen Nehmen wir an, sie befinden sich in einem Business Controller, und der zugrunde liegende Mechanismus (innerhalb der Repository- oder Service-Implementierung) für den Datenzugriff ist ein Entity Framework ObjectContext. Und ein Kunde ist eine aggregierte Wurzel.
Bitte zeigen Sie mir, dass ein Repository-Ansatz besser ist.
Vielen Dank.
+1; stimme nicht zu, aber ich mag die Frage – Marijn