为什么将连接字符串放在构造函数中而不是将其遗漏?

时间:2017-06-23 17:07:30

标签: c# asp.net-mvc-5

我在控制器中看到过连接字符串的不同实现。

有些就像:

public class tableNameController : Controller
{
    private ConnectionStringName db = new ConnectionStringName();
    ...

其他人是:

public class tableNameController : Controller
{
    private ConnectionStringName db;

    public tableNameController()
    {
        db = new ConnectionStringName();
    }

将连接字符串放在构造函数中或将其保留为私有变量是否有好处?

3 个答案:

答案 0 :(得分:6)

.NET运行时实际上完全相同地处理这些情况。它生成相同的IL,因此无论在语法上看起来更好。

现在,还有很多其他考虑因素可以使这个可测试和清洁。我会做一些关于依赖注入和单元测试的研究。

答案 1 :(得分:0)

没有区别,但如果你看一下这个答案:https://stackoverflow.com/a/24558/5056173

kokos有很好的规则来决定是否应该在构造函数中使用初始化:

  
      
  1. 不要使用声明中的默认值进行初始化(null,false,0,0.0 ...)。
  2.   
  3. 如果您没有更改字段值的构造函数参数,则首选声明中的初始化。
  4.   
  5. 如果字段的值因构造函数参数而更改,则将初始化放在构造函数中。
  6.   
  7. 在练习中保持一致(最重要的规则)。
  8.   

答案 2 :(得分:0)

从最佳实践的角度来看,这两种方法设计都很差。在这两种情况下,这些代码很难用测试来覆盖。考虑下一个方法:

public class TableNameController : Controller
{
    private readonly ConnectionStringName _db;

    public TableNameController(ConnectionStringName db)
    {
        _db = db;
    }
}

请注意,我还添加了readonly构造,它可以帮助您确保除constructor之外的任何人都无法将值设置为字段。此外,在该方法中 - 在单元测试中,很容易将模拟的ConnectionStringName实例传递给构造函数。

如果您想了解有关最佳做法的更多信息,请点击Google SOLIDDRYKISSIoC。这是所需的方法/实践列表,可帮助您编写易于阅读,结构良好且可维护的代码。

BTW,不要害怕开始调查,开发人员有时喜欢以非常复杂的方式谈论简单的事情。