2009-03-13 3 views
0

Ich habe eine Klasse und die Speicherung ihrer Informationen wird davon abhängen, ob es von einer Web- oder Windows-Anwendung verbraucht wird. Ich wollte das Fabrikmuster verwenden, um das richtige Objekt zu verteilen. Ich nehme an, der Anrufer würde dieses Objekt dann entsprechend speichern, wenn ich das Objekt nicht neu erstellen wollte. Hat jemand andere Vorschläge, die Speicherung von Daten auf der Plattform zu abstrahieren?Abstrakte Speicherung von Daten für Klasse basierend auf der Umgebung (Web/Windows)

Zum Beispiel möchte ich Daten als lokale Variablen speichern, wenn sie von Windows App (Senden der entsprechenden Unterklasse) aufgerufen und speichern in Sitzung beim Aufruf von Web-App.

+0

konnte ich nur speichern das ganze Objekt angemessen und nicht die Klasse haben sich darüber wissen ... – CSharpAtl

Antwort

1

Wie sgreeve sagt, ist die Trennung von Bedenken etwas zu berücksichtigen, um wartbaren Code zu bekommen.

Mithilfe einer Repository-Idee konnten die Winform App und die Web App ihren eigenen Speicheranbieter einspeisen. Diese Anbieter könnten bei Bedarf durch Vererbung oder Komposition eine gemeinsame Logik teilen.

public class MyClassRepository 
{ 
    IStorageProvider _provider; 
    public MyClassRepository(IStorageProvider provider) 
    { 
     _provider = provider; 
    } 

    public void Save(MyClass o) 
    { 
     _provider.Save(o); 
    } 

    public MyClass GetBy(string id) 
    { 
     return _provider.GetBy(id); 
    } 
} 

Die WinForms App würde aufrufen Speicher durch:

var provider = new WindowsStorageProvider(); 
var rep = new MyClassRepository(provider); 
rep.Save(myClassObject); 

und die Web-App:

var provider = new WebStorageProvider(); 
var rep = new MyClassRepository(provider); 
rep.Save(myClassObject); 
+0

Einverstanden - ein konkretes Beispiel für das, was ich beschreiben wollte. :) – razlebe

+0

sehr guter Punkt ... es ist das Muster, das ich die ganze Zeit verwendet habe ... ist gerade von der Strecke hier gelandet ... DANKE ... – CSharpAtl

0

Es klingt für mich nicht, als ob das Factory-Muster eine Lösung für das Problem ist, das Sie haben. Das Factory-Muster soll eine Instanz eines bestimmten Subtyps einer Klasse bereitstellen, die den Aufrufer der Fabrik vor (a) dem tatsächlichen Subtyp, der zurückgegeben wird, und (b) der Logik, die die Factory verwendet hat, entscheidet, welcher Subtyp zurückgegeben wird.

Dies ist nicht, was Sie hier brauchen. Ich denke, Sie müssen das Speichern der Daten von der Klasse abstrahieren, die die gespeicherten Daten modelliert.

Sie haben eine Klasse, die zwei Anwendungen gemeinsam ist, und jede dieser Anwendungen sollte Funktionen zum Speichern der von Ihrer Klasse eingekapselten Daten in einer für diese Anwendung geeigneten Weise implementieren. Das bedeutet zwei Dinge:

  1. Jede Anwendung (Web- und Windows-Form) soll Funktionalität enthält es Verstauen von Daten zu tun - aber weder Bedarf des Code von dem anderen verwendet aufzunehmen. z.B. Die Windows Forms-App muss nicht wissen, wie Daten in einer Websitzung gespeichert werden. Daher sollte sich der Code, der die Daten in einer Websitzung speichert, in einem Objekt befinden, das Teil der Webanwendung ist, aber nicht Teil der Windows Forms App ist und umgekehrt.

  2. Da dies der Fall ist und die Klasse, deren Daten Sie speichern, beiden Apps gemeinsam sein muss, kann diese Speicherlogik nicht Teil dieser Klasse sein. (Angenommen OO Design-Prinzipien folgend, dass Klasse soll nicht wissen, wie sie in verschiedenen Teilen der Anwendung sowieso weg zu speichern, so dass Abhängigkeiten führt die künftigen Veränderungen erschweren. Siehe Single Responsibility Principle ...)

Hoffe, das ist hilfreich

Verwandte Themen