Abstrakt Speicherung von Daten für die Klasse basierend auf Umgebung (web / Fenster)

StackOverflow https://stackoverflow.com/questions/643987

  •  22-07-2019
  •  | 
  •  

Frage

Ich habe eine Klasse und die Speicherung ihrer Informationen werden auf abhängen, wenn sie von einer Web- oder Windows-Anwendung verbraucht zu werden. Ich wollte die Fabrik Muster verwenden, um das richtige Objekt zu übergeben werden. Ich denke, der Anrufer würde dann speichern Sie das Objekt in geeigneter Weise, wenn ich nicht das Objekt neu erstellt haben wollte. Jedes hat andere Vorschläge auf abstrahieren, um die Speicherung von Daten auf der Basis der Plattform?

Zum Beispiel möchte ich Daten als lokale Variablen speichern, wenn von Windows-Anwendung (aussendet die entsprechende Unterklasse), und speichern Sie in Session aufgerufen, wenn von Web-App aufgerufen wird.

War es hilfreich?

Lösung

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

eine Repository Idee verwenden, die Winform app und den Web-App, ihre eigenen Speicheranbieter injizieren könnte. Diese Anbieter könnten einige gemeinsame Logik teilen, wenn durch Vererbung oder Zusammensetzung benötigt werden.

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-Anwendung würde aufrufen Speicher durch:

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

und der Web-App:

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

Andere Tipps

Es klingt nicht zu mir, als ob die Fabrik Muster eine Lösung für das Problem ist, die Sie haben. Das Fabrik-Muster sollte eine Instanz einer bestimmten Subtyp von einer Klasse zur Verfügung zu stellen, von dem Anrufer der Fabrik Schirmung (a) die tatsächliche Subtyps zurückgegeben wird, und (b) die Logik, die die Fabrik verwendet, um zu entscheiden, welche Subtyp zurückzukehren.

Das ist nicht das, was Sie hier benötigen. Ich glaube, Sie abstrahieren müssen die Speicherung der Daten von der Klasse, die Modelle der Daten gespeichert werden.

indem Sie Ihre Klasse in einer Art und Weise verkapselt angemessen, dass die Anwendung

Sie haben eine Klasse gemeinsam zwei Anwendungen, und jede dieser Anwendungen sollte Funktionalität implementieren, die zum Speichern von Daten. Das bedeutet zwei Dinge:

  1. Jede Anwendung (Web- und Windows-Form) sollte es das Verstauen von Daten enthält Funktionalität zu tun - aber weder Bedarf den Code von dem anderen verwendet aufzunehmen. z.B. die Windows Forms app muß nicht wissen, wie die Daten zu speichern, in einer Web-Sitzung. So ist der Code, den die Daten in einer Web-Sitzung speichert sollte in einem Objekt sein, das Teil des Web-App ist jedoch nicht Teil der Fenster bildet App, und umgekehrt.

  2. Da dies der Fall ist, und da die Klasse, die Daten sind Sie speichern auf beiden Anwendungen gemeinsam sein muss, dass Speicherlogik nicht Teil dieser Klasse sein kann. (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 Prinzip Verantwortung ...)

Hope Dies ist hilfreich

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top