Диспетчер объектов: 3 Уровень/Вопрос о приложении уровня.
-
26-10-2019 - |
Вопрос
Я пытаюсь создать простой трехуровневый проект, и я на пути к реализации слоя бизнес -логики, прямо сейчас так выглядит мой BL
//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;
}
Как вы можете заметить, мой объект -менеджер на самом деле - просто контейнер моего реального объекта (клиент), и именно здесь я вкладываю свою бизнес -логику, вроде как развязка бизнес -объекта в бизнес -логику, вот как я обычно ее использую
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();
Как вы можете видеть, он содержит только 1 объект за раз, и если мне нужно управлять списком клиентов, мне, вероятно, нужно создать другого менеджера, подобного CustomerListManager
Мой вопрос: правильный способ реализации BL трехуровневого/слоя? Или любое предложение о том, как бы вы это реализовали. Спасибо.
Решение
Как упоминали другие ранее, вы должны взглянуть на Репозиторий шаблон. Я также рекомендую проверить Единица работы шаблон, а также Доменная дизайн для архитектуры вашего приложения в целом.
Вы также можете взглянуть на картирование реляционных объектов (Орм) фреймворки для .net like Организация или же Nhibernate Если это вариант для вас.
Чтобы дать вам старту, вот несколько отличных ресурсов, чтобы вывести вас на правильную дорогу:
Книги
- Применение доменного дизайна и узоров Джимми Нильссон
- Доменная дизайн Эрик Эванс
- Доменная дизайн быстро (Бесплатная электронная книга)
Онлайн -ссылки
- Проектирование шаблонов для стойкости данных Джереми Миллер
- Репозиторий - новый синглтон Айенде Рахен
- Схема репозитория (MSDN)
- Единица рабочей схемы и невыполнения настойчивости Джереми Миллер
Надеюсь, это поможет.
Другие советы
Попробуйте найти шаблон репозитория, я думаю, что он ответит на ваши потребности.