创建一个经理类的实例

时间:2015-04-01 11:08:09

标签: c#

假设我有一个CustomerManager类,其中包含许多与DAL.CustomerManager交互的方法。但是也有很多方法没有与DAL.CustomerManager类交互。

我应该像下面的代码那样实例化_dalCustomerManager类吗?

public class CustomerManager {

    private DAL.CustomerManager _dalCustomerManager = new DAL.CustomerManager();


    public void DeleteCustomer(int customerId) {
        // .. do some logic here ...
        _dalCustomerManager.DeleteCustomer(customerId);
    }
}

或者这是一个更好的解决方案,因为我不总是_dalCustomerManger的一个实例,当我访问dalCustomerManager属性时,它会在它为空时创建一个新实例吗?

public class CustomerManager {

    private DAL.CustomerManager _dalCustomerManager;
    private DAL.CustomerManager dalCustomerManager { 
         get { 
            return _dalCustomerManager ?? (_dalCustomerManager = new DAL.CustomerManager());                
         }
    }


    public void DeleteCustomer(int customerId) {
        // .. do some logic here ...
        dalCustomerManager.DeleteCustomer(customerId);
    }
}

2 个答案:

答案 0 :(得分:1)

这是品味问题。除非DAL.CustomerManager()具有广泛的构造函数(比如分配大量的类,做一些耗时的工作),否则它并不重要。

您可能会发现这个链接很有用(关于一般的微优化):http://blog.codinghorror.com/the-sad-tragedy-of-micro-optimization-theater/

另外我想指出代码中DAL.CustomerManager的延迟加载不是线程安全的:

private DAL.CustomerManager dalCustomerManager { 
  get { 
    // if two threads are calling this you'll allocate two instances.
    return _dalCustomerManager ?? (_dalCustomerManager = new DAL.CustomerManager());                
  }
}

答案 1 :(得分:0)

好吧,如果您的DAL.CustomerManager类真的很长,那么这可能会有所帮助。 在这种情况下,我更喜欢Lazy,可以这样使用:

public class CustomerManager
{
    private Lazy<DAL.CustomerManager> _lazyDalManager= new Lazy<CustomerManager>(()=>new DAL.CustomerManager());

    protected DAL.CustomerManager DalCustomerManager
    {
        get { return _lazyDalManager.Value; }
    }
}