ASP.NET: Schichtentrennung – Fassade
Schichtentrennung lebt vom Verbergen der Implementierung und davon, möglichst wenig an Informationen über das Erzeugen von Instanzen oder Abhängigkeiten nach draußen gelangen zu lassen. Das Grundprinzip sollte stets sein, so wenig wie möglich fest miteinander zu koppeln.
Aus diesem Grund bedienen wir uns einer Fassadenklasse, die das Instanzieren und Benutzen der Implementierung unserer Basisklasse verbirgt. Somit haben wir eine dedizierte Abgrenzung zur Frontendschicht geschaffen, was es uns im weiteren Verlauf des Lebenszyklus eines Projektes erleichtern würde, auch weitreichendere Änderungen zu implementieren (und sei es, die komplette Basisklasse gegen irgend eine andere Implementierung auszutauschen). Also, Fassade davor, und schon kann man auch mal was ändern, ohne das es weh tun muss.
So sieht die Fassadenklasse aus:
using System; public class Customers private static CustomerManager _manager; /// return _manager; /// public static List /// public static Customer GetCustomer(Guid id) /// public static List /// public static List /// public static Customer /// public static bool
using System.Collections.Generic;
using System.Text;
using de.ksamaschke.Tools;
namespace BusinessLayer
{
///
///
{
/// CustomerManager-implementation
///
private static CustomerManager Manager
{
get
{
// Get the manager
if (null == _manager)
{
try
{
_manager = ManagerLoader
.Load
}
catch
{
throw;
}
}
}
}
///
{
return Manager.GetAllCustomers();
}
///
{
return Manager.GetCustomer(id);
}
/// identified by their names
///
FindCustomersByName(string name)
{
return Manager.FindCustomersByName(name);
}
/// by their email-addresses
///
FindCustomersByEMail(string email)
{
return Manager.FindCustomersByEMail(email);
}
///
UpdateCustomer(Customer customer)
{
return Manager.UpdateCustomer(customer);
}
///
DeleteCustomer(Customer customer)
{
return Manager.DeleteCustomer(customer);
}
}
}
Diese Fassade ist absichtlich sehr übersichtlich gehalten. Im Wesentlichen stellt sie nur die gleichen Funktionalitäten wie die intern verwendete CustomerManager-Klasse dar. Die konkret verwendete Instanz wird über die Eigenschaft Manager abgerufen, wo sie in Form eines Singletons gehalten wird – somit gibt es nur eine Instanz und die Instanz muss nicht bei jedem Zugriff neu erzeugt werden.
Im nächsten Teil widmen wir uns der konkreten Implementierung einer CustomerManager-Ableitung.
