我在控制器中看到过连接字符串的不同实现。
有些就像:
public class tableNameController : Controller
{
private ConnectionStringName db = new ConnectionStringName();
...
其他人是:
public class tableNameController : Controller
{
private ConnectionStringName db;
public tableNameController()
{
db = new ConnectionStringName();
}
将连接字符串放在构造函数中或将其保留为私有变量是否有好处?
答案 0 :(得分:6)
.NET运行时实际上完全相同地处理这些情况。它生成相同的IL,因此无论在语法上看起来更好。
现在,还有很多其他考虑因素可以使这个可测试和清洁。我会做一些关于依赖注入和单元测试的研究。
答案 1 :(得分:0)
没有区别,但如果你看一下这个答案:https://stackoverflow.com/a/24558/5056173
kokos有很好的规则来决定是否应该在构造函数中使用初始化:
- 不要使用声明中的默认值进行初始化(null,false,0,0.0 ...)。
- 如果您没有更改字段值的构造函数参数,则首选声明中的初始化。
- 如果字段的值因构造函数参数而更改,则将初始化放在构造函数中。
- 在练习中保持一致(最重要的规则)。
醇>
答案 2 :(得分:0)
从最佳实践的角度来看,这两种方法设计都很差。在这两种情况下,这些代码很难用测试来覆盖。考虑下一个方法:
public class TableNameController : Controller
{
private readonly ConnectionStringName _db;
public TableNameController(ConnectionStringName db)
{
_db = db;
}
}
请注意,我还添加了readonly
构造,它可以帮助您确保除constructor
之外的任何人都无法将值设置为字段。此外,在该方法中 - 在单元测试中,很容易将模拟的ConnectionStringName实例传递给构造函数。
如果您想了解有关最佳做法的更多信息,请点击Google SOLID
,DRY
,KISS
,IoC
。这是所需的方法/实践列表,可帮助您编写易于阅读,结构良好且可维护的代码。