2

Ich habe einige Zweifel darüber, wie man eine einfache Klasse wie Person in einer Xml-Datei speichert.Sollte ich ein Repository und XML-Dienst implementieren?

Nach meiner Kenntnis muss ich zuerst den Xml-Dienst erstellen, der Funktionen wie GetPersons() und SavePersons(IEnumerable<Person> persons) enthält.

Und mein Repository sollte so etwas wie die möglichen Abfragen enthalten, Add und Remove auch. Ich möchte wirklich jemanden erklären, wie ich anfangen kann, diese beiden Dinge zu implementieren? Der Grundgedanke der Idee ist es in einer XML-Datei zu speichern und einige Abfragen aus dem Repository zu bekommen.

+0

Wenn Sie xml-Service sagen, meinen Sie Web-Service, der XML verwendet? Wenn ja, gibt es einen Grund, warum Sie die Daten in XML speichern müssen oder können Sie eine Datenbank verwenden? –

+1

Nein, ich verweise nicht auf einen Web-Service, es ist nur der Name einer Klasse, die für den Zugriff auf die Daten zuständig ist. Das ist alles –

Antwort

1

Die Idee hinter dem Repository-Muster besteht darin, dass Sie die Details des Datenspeichers ausblenden. So ein Benutzer Ihres Repository sehen würde, nur eine Schnittstelle mit Methoden wie:

public interface IPersonRepository 
{ 
    void Add(Person person); 
    void Remove(Person person); 

    void GetById(int personId); 
} 

Wenn Sie XML als Datenspeicher verwenden möchten, sollten Sie eine XmlPersonRepository erstellen, die die IPersonRepository-Schnittstelle implementiert. Innerhalb dieser Methoden können Sie die .NET-Klassen verwenden, um direkt auf die XML-Datei zuzugreifen, oder Sie könnten Ihre XML-Daten in eine DataSet laden und auf relationale Weise darauf zugreifen.

Was würden Sie tun, wenn Sie mehrere Repositories hätten? Eine für Personen, eine für Produkte und eine für Bestellungen. Wenn Sie dann eine einzelne Transaktion wünschen, die diese drei Repositories umfasst und die Änderungen in einem Block speichert, benötigen Sie auch ein anderes Muster. Das UnitOfWork.

Patterns of Enterprise Archicture definiert eine UnitOfWork als:

führt eine Liste der Objekte, die von einer Geschäftstransaktion betroffen und koordiniert das Schreiben von Änderungen und die Auflösung von Concurrency Probleme.

+0

Ich dachte, dass die Klasse, die IPersonRepository implementiert, in ihrem Konstruktor etwas wie IDataService wissen sollte (wenn ich in einer Datenbank oder einer Xml-Datei speichern möchte) –

+0

würde ich es nicht so machen. Dann wäre Ihr Repository nur ein Wrapper für die Klasse, die die eigentliche Arbeit erledigt. Warum sollten Sie mehr indirekte Ebenen hinzufügen, wenn der Zweck Ihres Repositorys darin besteht, Ihren Datenspeicher zu kapseln? –

+0

Ein weiterer Zweifel, also, wenn ich einige Daten bekommen muss, woher bekomme ich diese Daten? aus einer Variablen (geladen vor den Daten) oder aus dem Zugriff auf die Daten .. –

Verwandte Themen