Um entwerfen Zugriff auf die Objekte in der Datenbank zur Verfügung zu stellen, ich eine Schnittstelle geschaffen für alle Teammitglieder wie dieses (vereinfachtes Beispiel) verwendet werden:Wie eine Datenbank-Schnittstelle
public interface IDatabase
{
ObservableCollection<Animal> Animals{ get; }
}
I didn‘ t will das Team für den Zugriff auf Interna wie der Datenbankkontext oder einige oracle-Objekte (Kapselung) ...
ich zwei spezifische Klassen implementiert im wirklichen Leben verwendet wird und für Unit-Tests:
public class TestDatabase : IDatabase
{ }
public class OracleDatabase : IDatabase
{ }
Nach einiger Nutzung der Teammitglieder für immer mehr Funktionen fragen, und ich habe Methoden meine Schnittstelle hinzuzufügen:
public interface IDatabase
{
ObservableCollection<Animal> Animals{ get; }
ObservableCollection<Animal> Animals(Gender gender);
ObservableCollection<Animal> Animals(Gender gender, Race race);
}
Einige der Filter- und Sortier Sachen könnten natürlich durch den Entwickler selbst durchgeführt werden, aber Es befindet sich besser in der Datenbank.
Mein Problem ist jetzt, dass meine Schnittstelle explodiert ist, wird es jeden Tag mehr spezialisierte Funktionen bekommen, ist es alles andere als stabil ist und hält die ganze Zeit ändern.
Ist mein Design von Anfang an fehlerhaft?
einige Ideen, die Frage zu lösen:
- die Datenbank Kontextobjekt für alle Entwickler aussetzen (schlecht glaube ich)
- eine Funktion hinzufügen, die eine Linq-Abfrage
Wenn Sie mehr und mehr hinzufügen, werden Sie wahrscheinlich feststellen, dass Sie schließlich das Datenbankkontextobjekt, das Sie ursprünglich verbergen wollten (möglicherweise mit neuen Namen), erneut implementieren.Es wird manchmal (in manchen Zusammenhängen) als der "innere Plattformeffekt" bezeichnet. –