我有一個公共屬性(AllCustomers),這是一個私人財產延遲加載支持。列表與IEnumerable在私人,懶惰加載屬性
我知道公共財產應該是IEnumerable("program to interfaces, not implementations")。
但是,我可以看到兩種方法來構建私有財產。
第一種選擇,與私人列表 -
private List<Customer> _AllCustomers;
public IEnumerable<Customer> AllCustomers
{
get
{
if (_AllCustomers == null)
{
_AllCustomers = DAL.GetAllCustomers().ToList();
}
return _AllCustomers;
}
}
第二個選項,私人IEnumerable-
private IEnumerable<Customer> _AllCustomers;
public IEnumerable<Customer> AllCustomers
{
get
{
if (_AllCustomers == null)
{
_AllCustomers = DAL.GetAllCustomers();
}
return _AllCustomers;
}
}
我認爲第一種選擇似乎更正確的,因爲它會打一次數據庫和存儲結果,而第二個將導致多個數據庫命中。
我的問題是 -
- 上午我在分析是正確的?
- 不同方法的含義是什麼?
- 有沒有什麼時間第二種選擇是首選?
- 是否有更好,更習慣的方式來表達 第二選項?
我們不可能回答不知道什麼'DAL.GetAllCustomers()'一樣。例如,它可能會返回一個'List',即使它被聲明爲返回IEnumerable 。 –
爲什麼你的私人成員是屬性,而不是字段? – MarcinJuraszek
@MarcinJuraszek - 謝謝,私人會員更新到字段。 – Spongeboy