C# 为什么要将连接字符串放在构造函数中,而不是将其忽略?
我在控制器中看到了连接字符串的不同实现 其中一些非常简单:C# 为什么要将连接字符串放在构造函数中,而不是将其忽略?,c#,asp.net-mvc-5,C#,Asp.net Mvc 5,我在控制器中看到了连接字符串的不同实现 其中一些非常简单: public class tableNameController : Controller { private ConnectionStringName db = new ConnectionStringName(); ... 其他包括: public class tableNameController : Controller { private ConnectionStringName db; p
public class tableNameController : Controller
{
private ConnectionStringName db = new ConnectionStringName();
...
其他包括:
public class tableNameController : Controller
{
private ConnectionStringName db;
public tableNameController()
{
db = new ConnectionStringName();
}
将连接字符串放在构造函数中或将其作为私有变量保留有什么好处?实际上,.NET运行时处理这些情况的方式完全相同。它生成相同的IL,所以它是任何在语法上看起来更好的东西
现在,还有很多其他的考虑因素使这个测试变得可测试和干净。我会做一些关于依赖注入和单元测试的研究。NET运行时实际上处理这些情况完全相同。它生成相同的IL,所以它是任何在语法上看起来更好的东西
现在,还有很多其他的考虑因素使这个测试变得可测试和干净。我会做一些关于依赖注入和单元测试的研究。没有区别,但是如果你看看这个答案: kokos有很好的规则来决定是否应该在构造函数中使用Initialization:
没有区别,但如果你看看这个答案: kokos有很好的规则来决定是否应该在构造函数中使用Initialization:
从最佳实践的角度来看,这两种方法的设计都很差。在这两种情况下,测试都很难覆盖此代码。考虑下一个方法:
public class TableNameController : Controller
{
private readonly ConnectionStringName _db;
public TableNameController(ConnectionStringName db)
{
_db = db;
}
}
请记住,我还添加了readonly
construction,它将帮助您确保除了constructor
之外,没有人可以将值设置为字段。同样,在这种方法中——在单元测试中,将模拟的ConnectionStringName实例传递到构造函数中是很容易的
如果你想了解更多关于最佳实践的信息,只需在谷歌上搜索SOLID
,DRY
,KISS
,IoC
。这是帮助您编写易于阅读、结构良好且可维护的代码所需的方法/实践列表
顺便说一句,不要害怕开始调查,开发人员有时喜欢用非常复杂的方式谈论简单的事情 从最佳实践的角度来看,这两种方法的设计都很差。在这两种情况下,测试都很难覆盖此代码。考虑下一个方法:
public class TableNameController : Controller
{
private readonly ConnectionStringName _db;
public TableNameController(ConnectionStringName db)
{
_db = db;
}
}
请记住,我还添加了readonly
construction,它将帮助您确保除了constructor
之外,没有人可以将值设置为字段。同样,在这种方法中——在单元测试中,将模拟的ConnectionStringName实例传递到构造函数中是很容易的
如果你想了解更多关于最佳实践的信息,只需在谷歌上搜索SOLID
,DRY
,KISS
,IoC
。这是帮助您编写易于阅读、结构良好且可维护的代码所需的方法/实践列表
顺便说一句,不要害怕开始调查,开发人员有时喜欢用非常复杂的方式谈论简单的事情 主要基于观点。糟糕的设计。保持控制器倾斜。注入服务将上下文保留在控制器之外。(免责声明:我没有否决投票)@Nkosi你知道有任何显示依赖注入的好教程吗?你使用的是哪个版本的mvc?5.*还是核心?在微软官方网站上有很多关于DI@BviLLe_Kid这门课程帮助我理解了依赖注入和其他类似的东西是如何工作的:主要是基于观点的。糟糕的设计。保持控制器倾斜。注入服务将上下文保留在控制器之外。(免责声明:我没有否决投票)@Nkosi你知道有任何显示依赖注入的好教程吗?你使用的是哪个版本的mvc?5.*还是核心?在微软官方网站上有很多关于DI@BviLLe_Kid这门课程帮助我理解了依赖注入和其他类似的东西是如何工作的: