Wir haben eine Business Logic Layer (BLL), die eng mit unserer Datenzugriffsschicht (DAL) verbunden ist. Wir telefonieren wie folgt:
using (FooData data = new FooData())
{
data.DoSomething();
}
Es ist wichtig zu beachten, dass sich alle unsere Datenklassen internal
in derselben Assembly wie die Logikklassen befinden, sodass nur die BLL auf die DAL zugreifen kann.
Um diese zu entkoppeln (um das Testen von Einheiten zu erleichtern), besteht eine Idee darin, IDataClass-Schnittstellen wie IFooData zu erstellen. Zuerst dachte ich, dass es ein Problem sein könnte, weil wir unsere Datenklassen öffentlich machen müssten, um die Schnittstellen zu implementieren. Aber wir sollten in der Lage sein, die Datenklassen intern zu halten, obwohl wir immer noch die Methoden benötigen, um öffentlich zu sein:
public interface IFooData
{
void DoSomething();
}
internal class FooData : IFooData // Notice the class is internal
{
public void DoSomething(); // Method is public, but that's ok because class is internal
}
Obwohl die Methode öffentlich ist, sollten wir, da die Klasse selbst intern ist, nur unseren BLL-Zugriff zulassen.
Stimmt etwas an diesem Ansatz nicht? Gibt es eine bessere Möglichkeit, die DAL für Unit-Tests zu abstrahieren, ohne die DAL für die Welt zu öffnen, indem sie veröffentlicht wird?