Entité Responsable: Application 3 Niveau / couche Question
-
26-10-2019 - |
Question
Je suis en train de créer un projet simple à trois niveaux et je suis sur la bonne voie sur la mise en œuvre de la couche logique métier, en ce moment, voici comment mes BL ressemble
//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;
}
Comme vous pouvez le remarquer, mon gestionnaire d'objets est vraiment juste un conteneur de mon objet réel (client), et c'est là que je mets ma logique métier, un peu façon de découpler l'entité commerciale à la logique métier, voilà comment je généralement utiliser
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();
Comme vous pouvez le voir ne détient que 1 objet à la fois, et si je dois gérer Liste des clients, je probablement créer un autre gestionnaire comme CustomerListManager
Ma question est: Est-ce la bonne façon de mettre en œuvre la BL d'une conception à trois niveaux / couche? Ou toute suggestion sur la façon dont vous voulez la mettre en œuvre. Merci.
La solution
Comme d'autres l'ont mentionné avant, vous devriez jeter un oeil à la Référentiel modèle. Je recommande également de consulter la Unité de travail modèle ainsi que Domaine Driven design pour l'architecture de votre application en général.
Vous pourriez aussi avoir un regard sur l'objet-relationnel ( ORM ) cadres pour .NET comme Entity Framework ou NHibernate si c'est une option pour vous.
Pour vous donner une ici tête départ sont d'excellentes ressources pour vous sur la route droite:
Livres
- Application Domain-Driven Design et modèles par Jimmy Nilsson
- Domain-Driven Design par Eric Evans
- domaine Driven Conception rapidement (eBook gratuit)
Références en ligne
- Design Patterns pour la persistance des données par Jeremy Miller
- Repository est le nouveau Singleton par Ayende Rahien
- Le Pattern Repository (MSDN)
- L'unité de modèle de travail et de la persistance ignorance par Jeremy Miller
L'espoir qui aide.
Autres conseils
Essayez le modèle référentiel, je pense que ça va répondre à vos besoins.