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!
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.
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.
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:
Dann könnte Ihre zusammengesetzte Klasse Transaction
wie folgt aussehen:
Tags und Links java c# design-patterns