【发布时间】:2014-06-20 01:46:33
【问题描述】:
我刚刚更新了 Visual Studio 2013,我注意到在 MVC 应用程序的项目模板中,ApplicationDbContext 类现在有一个只调用构造函数的静态方法:
public static ApplicationDbContext Create()
{
return new ApplicationDbContext();
}
这对我来说似乎很混乱,但我想有一些语义原因我现在应该开始使用 ApplicationDbContext.Create() 而不是 new ApplicationDbContext()。这样做有什么好处吗?
【问题讨论】:
-
这似乎是一个糟糕的工厂实现。
-
构造函数是私有的吗? ...这是一种模式,用于阻止消费者只创建一个对象而不指定它的要求 - 强制您通过静态方法。当然,这个似乎没用 - 但如果你想扩展它,设置就在那里。
-
构造函数不是私有的。
-
如果您使用 Autodesks API,它们都实现了这种模式 - 但它们将构造函数设为私有。例如;
static Pipe Document::CreateNewPipe(...);和static Curve Document::CreateNewCurve(...);老实说,我觉得它非常烦人而且没用。然而,它可能对 API 设计人员有用,以确保对象内聚。 -
谷歌“四人帮”一书并阅读其中描述的设计模式的概述。这是工厂模式的一个简单实现,书中描述了其他 22 种设计模式。熟悉它们至少会有助于识别它们并知道何时使用它们。
标签: c# constructor static-methods