我一直在关注MVVM模式的Josh Smith的excellent article 。在他的例子中,他有一个CustomerRepository
从源获取数据:
public CustomerRepository(string customerDataFile)
{
_customers = LoadCustomers(customerDataFile);
}
我不明白的是,他直接从他的构造函数中调用静态方法LoadCustomers
:
static List<Customer> LoadCustomers(string customerDataFile)
{
// In a real application, the data would come from an external source,
// but for this demo let's keep things simple and use a resource file.
using (Stream stream = GetResourceStream(customerDataFile))
using (XmlReader xmlRdr = new XmlTextReader(stream))
return
(from customerElem in XDocument.Load(xmlRdr).Element("customers").Elements("customer")
select Customer.CreateCustomer(
(double)customerElem.Attribute("totalSales"),
(string)customerElem.Attribute("firstName"),
(string)customerElem.Attribute("lastName"),
(bool)customerElem.Attribute("isCompany"),
(string)customerElem.Attribute("email")
)).ToList();
}
这是一种延迟加载模式,还是开发人员会有其他特定原因?
答案 0 :(得分:1)
(1)这不是延迟加载。
(2)如果您在LoadCustomers
中看到评论,他明确提到'在实际应用中,数据将来自外部源,但对于此演示,让我们保持简单并使用资源文件。 ”。这意味着,他的目的是在UI中显示一些数据,而不是将数据从某个商店引入UI的最佳方式。
正如通过评论所提到的,在生产质量代码中,我们主要遵循一些很好定义的d模式。例如:在视图模型中通过依赖注入注入存储库对象。
答案 1 :(得分:1)
我认为这与存储库没有特别的关系。
该方法是静态的,因为它不使用任何类实例变量。由于您不需要在堆栈上传输this
引用,因此性能会有很小的提升
由于它也是私有的,您可以安全地将其标记为静态。对于非私有方法,这是不同的,因为如果从外部使用静态方法,则调用者将自己绑定到静态方法定义的具体类型。这使得设计不那么灵活并降低了可测试性。但如前所述,这不是私人方法的问题。