Entity Manager: 3 уровня приложений - PullRequest
2 голосов
/ 12 июня 2011

Я пытаюсь создать простой трехуровневый проект, и сейчас я нахожусь на пути к внедрению слоя Business Logic, именно так мой 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 трехуровневого / слоистого дизайна? Или любое предложение о том, как бы вы это реализовали. Благодаря.

Ответы [ 2 ]

0 голосов
/ 05 июля 2011

Как уже упоминалось ранее, вы должны взглянуть на шаблон Репозиторий . Я также рекомендовал бы проверить шаблон Unit Of Work и Domain Driven Design для архитектуры вашего приложения в целом.

Вы также можете взглянуть на структуры реляционного сопоставления объектов ( ORM ) для .NET, например Entity Framework или NHibernate , если это вариант для вас .

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

Книга

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

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

0 голосов
/ 12 июня 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...