假设我有一个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);
}
}
答案 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; }
}
}