Ich verwende ein einfaches 3-Tier-Design. Aus Gründen der Flexibilität (und des Testens) wollte ich, dass die Datenschicht abstrakt ist und die konkrete Klasse in meinem Code angibt. Aber wie soll ich das an meine Geschäftsobjekte weitergeben? Hier ist ein Beispiel (Pseudocode):n-Tier-Design - beste Möglichkeit, Daten zu übergeben Objekt abrufen
abstract class IDataLayer
{
PersonData GetPerson(int); //PersonData would be a row of data from a table for example
JobData[] GetJobs(int);
void UpdatePerson(PersonData);
}
class ConcreteDataLayerSQL : IDataLayer
{
...
}
class ConcreteDataLayerXML : IDataLayer
{
...
}
class PersonBAL
{
void PersonBAL(personId)
{
//What goes here?
}
JobBAL[] GetJobs()
{
//What goes here?
}
}
class Program
{
static void Main()
{
person = new PersonBAL(1);
}
}
Das Problem ist also, wie funktioniert PersonBAL wissen, welche ConcreteDataLayer zu benutzen? Ich denke zwischen ein paar Optionen:
1: übergeben Sie die konkrete Datenschicht an die Person. Dies wird ein Schmerz, wenn Sie neue Klassen hinzufügen, die mit der Datenschicht interagieren müssen (etwas wie neue PersonBAL (IDataLayer, int), dann neue JobBAL (IDataLayer, int) usw.)
2: Erstellen Sie eine statische Objekt, das die zu verwendende Datenschicht enthält (Lesen: globale Variable)
Irgendwelche anderen Ideen?
Während ich die Klarstellung zu dem Begriff schätze, hätte ich gerne eine bessere Lösung, als einen Rahmen zu bekommen, um das Problem zu lösen. Wie geht das Framework mit dem Problem um? –