Диспетчер объектов: 3 Уровень/Вопрос о приложении уровня.

StackOverflow https://stackoverflow.com/questions/6318462

  •  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 Если это вариант для вас.

Чтобы дать вам старту, вот несколько отличных ресурсов, чтобы вывести вас на правильную дорогу:

Книги

Онлайн -ссылки

Надеюсь, это поможет.

Другие советы

Попробуйте найти шаблон репозитория, я думаю, что он ответит на ваши потребности.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top