Pregunta

Estoy intentando crear un proyecto simple de tres niveles y estoy en camino de implementar la capa de lógica de negocios. En este momento, así es como se ve mi 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;
    }

Como podrás notar, mi administrador de objetos es en realidad solo un contenedor de mi objeto real (Cliente), y aquí es donde coloco mi lógica de negocios, una especie de forma de desacoplar la entidad de negocios de la lógica de negocios, así es como normalmente la uso.

        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();

Como puede ver, solo contiene 1 objeto a la vez. Y si necesito administrar la Lista de clientes, probablemente tenga que crear otro administrador como CustomerListManager

Mi pregunta es: ¿Es esta la forma correcta de implementar el BL de un diseño de tres niveles/capas?O cualquier sugerencia sobre cómo implementarlo.Gracias.

¿Fue útil?

Solución

Como otros han mencionado antes, deberías echar un vistazo a Repositorio patrón.También recomendaría consultar el Unidad de trabajo patrón así como Diseño impulsado por dominio para la arquitectura de su aplicación en general.

También puedes echar un vistazo al mapeo relacional de objetos (ORM) marcos para .NET como Marco de la entidad o NHibernate si esa es una opción para ti.

Para darle una ventaja, aquí le presentamos algunos recursos excelentes que le ayudarán a seguir el camino correcto:

Libros

Referencias en línea

Espero que ayude.

Otros consejos

Intente buscar el patrón del repositorio, creo que responderá a sus necesidades.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top