实体经理:3层/层应用问题

时间:2011-06-11 20:47:57

标签: c# architecture three-tier

我正在尝试创建一个简单的三层项目,我正在实施业务逻辑层,现在,这就是我的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;
    }

正如您可能注意到的,我的对象管理器实际上只是我的真实对象(Customer)的容器,这就是我放置业务逻辑的方式,有点将业务实体与业务逻辑分离,这就是我的方式。通常使用它

        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 :(得分:0)

尝试搜索存储库模式,我认为它将满足您的需求。

答案 1 :(得分:0)

正如其他人之前提到的,你应该看一下存储库模式。我还建议您查看应用程序体系结构的工作单元模式以及域驱动设计

您可能还需要查看.NET的对象关系映射( ORM )框架,如Entity FrameworkNHibernate,如果这是您的选项。

为了让您有一个良好的发展,这里有一些很好的资源可以帮助您走上正确的道路:

<强>图书

在线参考

希望有所帮助。