Welches Designmuster wird verwendet, um einen Transaktions- oder Verkettungsmechanismus zu implementieren

8

Ich habe eine einfache Factory-Klasse in C # und Java implementiert. Diese Klasse erstellt Instanzen von konkreten Arbeitsklassen mit ein und derselben Schnittstelle. Insbesondere haben alle diese Klassen solche Methoden wie:

%Vor%

Nun möchte ich einen Mechanismus haben (der auf einem klassischen / nicht-klassischen Muster basiert), der es mir ermöglicht, "Ketten" dieser Methoden zu erstellen oder sie in einer Art von Transaktion zu kapseln. In einem Pseudocode erwarte ich etwas wie:

%Vor%

Oder etwas wie:

%Vor%

Ich bin bei Designmustern nicht so gut und ich bin mir nicht sicher, welches Muster ich verwenden soll. Ich hoffe, dass jemand ein paar Codezeilen (in C # oder in Java) teilen und löschen kann, die zeigen, wie dies implementiert werden kann. Danke!

    
Jacobian 08.11.2015, 12:09
quelle

2 Antworten

6

Einheit der Arbeit ist das richtige Muster, um Domänentransaktionen darzustellen.

Es akkumuliert Änderungen (hinzufügen, aktualisieren und entfernen) und sie können atomar akzeptiert oder verworfen werden. Die Atomarität wird durch die Implementierung der gesamten Arbeitseinheit gewährleistet, und der Implementierer muss sicher sein, dass Änderungen persistent beibehalten oder atomar verworfen werden.

Überprüfen Sie, wie Martin Fowler in seinem Musterkatalog definiert:

  

Behält eine Liste von Objekten bei, die von einem Geschäftsvorgang betroffen sind   koordiniert das Schreiben von Änderungen und die Auflösung von   Nebenläufigkeitsprobleme.

Eine mögliche Schnittstelle zu Einheit des Arbeitsmusters könnte sein:

%Vor%

Und Sie können der Schnittstelle auch die folgenden Methoden hinzufügen:

%Vor%

Wie auch immer, alle Updates sollten mit einer Änderungsverfolgung behandelt werden, die von der Arbeitseinheit überwacht wird, und einige fügt und löscht auch:

  • Wenn Sie ein neues Objekt zu einer Sammlung hinzufügen, die einem anderen Objekt zugeordnet ist (1-n Assoziation), sollte eine Arbeitseinheit erkennen können, dass das Objekt schmutzig ist Einheit der Arbeit, dies zu tun.

  • Gleiches gilt für das Entfernen. Wenn Sie ein Objekt aus einer 1-n-Verknüpfung entfernen und kein anderes Objekt darauf verweist (ein verwaistes Objekt), sollte es automatisch als gelöscht markiert werden.

Die meisten Data-Mapper wie OR / M-Frameworks implementieren bereits Objekt-Change-Tracking mit Objekt-Proxies, um Property-Set-Aufrufe abzufangen.

    
Matías Fidemraizer 08.11.2015, 12:39
quelle
3

Zusammengesetztes Muster ist eine offensichtliche Wahl für Situationen, in denen Sie ein Teil-Ganzes-System modellieren. So sieht das Diagramm des Musters aus:

Da Sie eine Fabrik haben, die Objekte der gleichen Schnittstelle erzeugt, sind Sie fast fertig damit, das zusammengesetzte Muster zu implementieren.

  • Ihre Fabrik produziert Objekte, die einer Schnittstelle entsprechen. Diese Schnittstelle ist die Komponentenschnittstelle Ihrer zusammengesetzten Implementierung.
  • Ihre Factory erzeugt konkrete Klassen, die die Leaf -Klassen in Ihrer zusammengesetzten Implementierung darstellen.

Die einzige Klasse, die Sie noch erstellen können, ist die Klasse Composite .

Nehmen wir an, Ihre Component -Schnittstelle sieht folgendermaßen aus:

%Vor%

Dann könnte Ihre zusammengesetzte Klasse Transaction wie folgt aussehen:

%Vor%     
dasblinkenlight 08.11.2015 12:31
quelle

Tags und Links