为什么存储库类会调用静态加载方法?

时间:2013-11-20 13:57:38

标签: c# repository-pattern static-methods

我一直在关注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();
}

这是一种延迟加载模式,还是开发人员会有其他特定原因?

2 个答案:

答案 0 :(得分:1)

(1)这不是延迟加载。

(2)如果您在LoadCustomers中看到评论,他明确提到'在实际应用中,数据将来自外部源,但对于此演示,让我们保持简单并使用资源文件。 ”。这意味着,他的目的是在UI中显示一些数据,而不是将数据从某个商店引入UI的最佳方式。

正如通过评论所提到的,在生产质量代码中,我们主要遵循一些很好定义的d模式。例如:在视图模型中通过依赖注入注入存储库对象。

答案 1 :(得分:1)

我认为这与存储库没有特别的关系。 该方法是静态的,因为它不使用任何类实例变量。由于您不需要在堆栈上传输this引用,因此性能会有很小的提升 由于它也是私有的,您可以安全地将其标记为静态。对于非私有方法,这是不同的,因为如果从外部使用静态方法,则调用者将自己绑定到静态方法定义的具体类型。这使得设计不那么灵活并降低了可测试性。但如前所述,这不是私人方法的问题。