2017-08-01 23 views
3

In 'saubere Architektur' sind die Interaktoren (Anwendungsfälle) für die Definition der Geschäftslogik verantwortlich. Die meisten Beispiele definieren Anwendungsfälle auf folgende Weise:Saubere Architektur - wie man Datenbanktransaktionen anspricht?

public MyUseCase() { 

    public boolean execute(...) { 
    int id = repository.insert(a) 
    if(id > 0) { 
     b.aId= id; 
     repository.insert(b); 
     ... 
    } 
    } 
} 

Interaktoren verwenden meist einfache CRUD-ähnliche Operationen oder Abfragen im Repository. Das obige Beispiel ist synchron für den Fall der Einfachheit, aber Sie können Repos mit dem gleichen Ansatz asynchrone Lösungen wie Callbacks oder Rxjava finden.

Aber was ist mit Use Case Ungeschicklichkeit. Zum Beispiel können Sie nicht 100% sicher sein, dass nach dem Einfügen a es immer noch da sein wird, wenn Sie b einfügen. Was passiert, wenn Sie nach dem Einfügen a eine RepositoryException beim Einfügen b erhalten.

Alle repos ich gesehen habe, so weit nehmen Sie sie nicht in Betracht, so meine Frage ist:

Was ist die Lösung des obigen Problems in saubere Architektur?

Antwort

3

Diese Antwort mag etwas spät sein, aber ich habe mit dem gleichen Problem gekämpft und bin zu dem Schluss gekommen, dass das Transaktionsmanagement tatsächlich Teil eines Use Cases ist - wie: "Wenn etwas mit B schiefgeht, setze A zurück Zustand". So kann es und explizit in Ihrem UseCase angegeben werden sollte, wahrscheinlich mit einer Art „DataManagerRepo“, wie folgt aus:

public MyUseCase() { 

    public boolean execute(...) { 
     dataManagerRepository.openTransaction() 
     try { 
      int id = repository.insert(a) 
      if(id > 0) { 
      b.aId= id; 
      repository.insert(b); 
      ... 
     } 
     catch (MyException exc) { 
      dataManagerRepository.rollbackTransaction() 
     } 

     dataManagerRepository.commitTransaction() 
    } 
} 

Namen zu abstrahieren Integrität Mechanismus kann variieren, aber die Idee ist die gleiche. Ich hoffe, dass das jemandem hilft.

Verwandte Themen