我有需要“年”作为参数的 DataProvider 类 (DAL)。它是这样使用的:
using (var provider = new DataProvider(year))
{
provider.SomeRepostitory.DoSomethingUsefull();
}
DataProvider 构造函数代码处理配置 - 因此它可以抛出异常。并且不推荐使用异常可抛出的构造函数。所以我添加了 Init 方法并将所有可抛出的代码放在那里:
var provider = new DataProvider();
provider.Init(year);
但是现在有两行代码而不是一行,并且由于在代码中多次创建了提供程序,我将这两行代码放入结构静态方法中:
using (var provider = DataProvider.Create(year))
{
...
}
可以吗还是有更好的解决办法?
提前致谢!
DataProvider constructor code deals with configuration - so it can throw exceptions. And exception throwable constructors are not recommended.
为什么“不推荐”它们?查看 Microsoft 基类库,您会发现几乎每个构造函数都会检查传递给它的参数,并在参数无效时抛出某种参数异常。为什么你会让某人在不告诉他们的情况下实例化一个无效状态的对象?尽早失败,努力失败。
与必须使用单独的初始化方法相比,抛出异常的构造函数是一个更好的编程 API(我个人讨厌两阶段初始化;很容易忘记第二次调用)。除非有令人信服的理由避免它,否则我只会在构造函数中进行检查。
如果你真的想使用静态工厂方法(除非你需要使其松散耦合,否则这没有错),确保默认构造函数是私有(private)的,这样用户就被迫使用适当的工厂方法。
我是一名优秀的程序员,十分优秀!