Entity Manager: 3 Tier/Layer -Anwendungsfrage
-
26-10-2019 - |
Frage
Ich versuche, ein einfaches dreistufiges Projekt zu erstellen, und ich bin auf dem Laufenden, die Geschäftslogikschicht zu implementieren, so sieht mein BL so aus
//The Entity/BO
public Customer
{
public int CustomerID { get; set; }
public string CustomerName { get; set; }
public UserAccount UserAccount { get; set; }
public List<Subscription> Subscriptions { get; set; }
}
//The BO Manager
public class CustomerManager
{
private CustomerDAL _dal = new CustomerDAL();
private Customer _customer;
public void Load(int customerID)
{
_customer = GetCustomerByID(customerID);
}
public Customer GetCustomer()
{
return _customer;
}
public Customer GetCustomerByID(int customerID)
{
return _dal.GetCustomerByID(customerID);
}
public Customer GetCustomer()
{
return _customer;
}
public UserAccount GetUsersAccount()
{
return _dal.GetUsersAccount(_customer.customerID);
}
public List<Subscription> GetSubscriptions()
{
// I load the subscriptions in the contained customer object, is this ok??
_customer.Subscriptions = _customer.Subscriptions ?? _dal.GetCustomerSubscriptions(_customer.CustomerID);
return _customer.Subscriptions;
}
Wie Sie vielleicht bemerken, ist mein Objektmanager wirklich nur ein Container meines realen Objekts (Kunde), und hier habe ich meine Geschäftslogik eingelegt.
int customerID1 = 1;
int customerID2 = 2;
customerManager.Load(1);
//get customer1 object
var customer = customerManager.GetCustomer();
//get customer1 subscriptions
var customerSubscriptions = customerManager.GetSubscriptions();
//or this way
//customerManager.GetSubscriptions();
//var customerSubscriptions = customer.Subscriptions;
customerManager.Load(2);
//get customer2
var newCustomer = customerManager.GetCustomer();
//get customer2 subscriptions
var customerSubscriptions = customerManager.GetSubscriptions();
Wie Sie sehen können, enthält es nur 1 Objekt jeweils, und wenn ich die Liste der Kunden verwalten muss, muss ich wahrscheinlich einen anderen Manager erstellen wie CustomerListManager
Meine Frage ist, ist dies der richtige Weg, um das BL eines Drei -Stufe/-schicht -Designs zu implementieren? Oder irgendein Vorschlag, wie Sie es implementieren würden. Vielen Dank.
Lösung
Wie andere bereits erwähnt haben, sollten Sie sich das ansehen Repository Muster. Ich würde auch empfehlen, das zu überprüfen Arbeitseinheit Muster sowie Domänengesteuerte Design Für die Architektur Ihrer Anwendung im Allgemeinen.
Möglicherweise sehen Sie sich auch das relationale Objekt (Relational-Mapping an (Orm) Frameworks für .net wie Entität Framework oder Nhibernate Wenn das eine Option für Sie ist.
Um Ihnen einen Kopfstart zu geben, finden Sie hier einige großartige Ressourcen, um Sie auf die richtige Straße zu bringen:
Bücher
- Anwenden von domänengetriebenem Design und Mustern von Jimmy Nilsson
- Domänengetriebenes Design von Eric Evans
- Domain getriebenes Design schnell (Kostenloses eBook)
Online -Referenzen
- Entwurfsmuster für die Datenpersistenz von Jeremy Miller
- Repository ist das neue Singleton von Ayende Rahien
- Das Repository -Muster (Msdn)
- Die Einheit des Arbeitsmusters und der Persistenz -Unwissenheit von Jeremy Miller
Ich hoffe, das hilft.
Andere Tipps
Versuchen Sie, nach dem Repository -Muster zu suchen. Ich denke, es wird Ihre Bedürfnisse beantworten.