O
Olel
Gast
Hallo,
ich habe gestern mit meinen Kollegen über ein kleines Problem diskutiert zu dem wir keine zufriedenstellende Lösung gefunden habe. Daher frage ich jetzt mal hier in die Runde um vielleicht einen guten Vorschlag zu erhalten.
Es geht darum ein gutes Design für folgenden Anwendungsteil zu entwickeln. Die Anwendung soll im Wesentlichen Objekte (sagen wir mal Kunden) z.B. in einer Tabelle verwalten und die Möglichkeit bieten diese Objekte persistent zu speichern. Dieses Speichern soll im ersten Ansatz in einer XML-Datei geschehen, in einer zweiten Version soll alternativ auch das Speichern in eine Datenbank implementiert werden.
Damit die Businesslogik nichts von der Implementierung der Persistierung wissen muss, soll das ganze natürlich hinter einem Interface versteckt werden. Dieses könnte z. B. wie folgt aussehen:
Die Entscheidung, welche Implementierung verwendet wird, können wir einer Factory (s. FactoryPattern) überlassen (ein Frameword zur DependencyInjection soll hier erstmal nicht verwendet werden).
Nun ist es aber so, dass die dateibasierte Implementierung (FileCustomerSaverLoader) einen Dateinamen benötigt, die datenbankbasierte (DatabaseCustomerSaverLoader) hingegen eine Datenbankverbindung. Weiterhin ist es so, dass der Benutzer den Dateinamen frei wählen kann. Dieser kann also nicht fest in der FileCustomerSaverLoader Implementierung codiert sein, sondern muss dieser von außen übergeben werden.
Und genau hier ist das Problem. Wie kann in der konkreten Implementierung den Dateinamen mitgeben, wenn ich doch innerhalb der Businesslogik nur das Interface kenne, welches dafür natürlich keine Methode zur Verfügung stellt?
Vielleicht gehe ich die Sache ja auch ganz falsch an. Für einen Hinweis wäre ich auf jeden Fall dankbar.
Grüße,
Ole
ich habe gestern mit meinen Kollegen über ein kleines Problem diskutiert zu dem wir keine zufriedenstellende Lösung gefunden habe. Daher frage ich jetzt mal hier in die Runde um vielleicht einen guten Vorschlag zu erhalten.
Es geht darum ein gutes Design für folgenden Anwendungsteil zu entwickeln. Die Anwendung soll im Wesentlichen Objekte (sagen wir mal Kunden) z.B. in einer Tabelle verwalten und die Möglichkeit bieten diese Objekte persistent zu speichern. Dieses Speichern soll im ersten Ansatz in einer XML-Datei geschehen, in einer zweiten Version soll alternativ auch das Speichern in eine Datenbank implementiert werden.
Damit die Businesslogik nichts von der Implementierung der Persistierung wissen muss, soll das ganze natürlich hinter einem Interface versteckt werden. Dieses könnte z. B. wie folgt aussehen:
Code:
public interface ICustomerSaverLoader {
public void save(Customer[] cus);
public Customer[] load();
}
Die Entscheidung, welche Implementierung verwendet wird, können wir einer Factory (s. FactoryPattern) überlassen (ein Frameword zur DependencyInjection soll hier erstmal nicht verwendet werden).
Nun ist es aber so, dass die dateibasierte Implementierung (FileCustomerSaverLoader) einen Dateinamen benötigt, die datenbankbasierte (DatabaseCustomerSaverLoader) hingegen eine Datenbankverbindung. Weiterhin ist es so, dass der Benutzer den Dateinamen frei wählen kann. Dieser kann also nicht fest in der FileCustomerSaverLoader Implementierung codiert sein, sondern muss dieser von außen übergeben werden.
Und genau hier ist das Problem. Wie kann in der konkreten Implementierung den Dateinamen mitgeben, wenn ich doch innerhalb der Businesslogik nur das Interface kenne, welches dafür natürlich keine Methode zur Verfügung stellt?
Vielleicht gehe ich die Sache ja auch ganz falsch an. Für einen Hinweis wäre ich auf jeden Fall dankbar.
Grüße,
Ole