我需要一些设计建议。
我有一个应用程序,它将从各种来源读取数据并进行检查和比较。我的目的是有需要的数据访问(所有的依赖System.Data.SqlClient
等)中含有一组数据访问类(内SqlImporter
,JSONImporter
等等)。然后,需要数据的其他类将仅使用这些类来完成工作。也许他们会传递连接字符串或其他信息。
但是,我需要对这些数据访问类进行单元测试。为了使它们可测试,我使数据访问类依赖于抽象/接口,然后传入具体的实现,以允许我从单元测试中传入Mock对象,类似于使用MsTest在C#中的Mocking SqlConnection,SqlCommand和SqlReader。
结果是这样的:
using System.Data.SqlClient;
public class SqlImport {
private IDbConnection conn;
public SqlImport(IDbConnection conn){
this.conn = conn;
}
}
我的问题是,使用这些数据访问类的所有类现在也都将依赖于数据访问依赖项(System.Data.SqlClient
)。这是否会打败开设这些课程的目的?我的意思是,这对凝聚力很好,但是...
我现在有一个这样的课:
using System.Data.SqlClient;
using Importers;
public class Mapping {
public Mapping (){
}
public void LoadMappingFromDatabase(string connString){
SqlImport import = new SqlImport(new SqlConnection(connString));
// Do Stuff including using import to query db
}
}
这个设计好吗?还是我最好LoadMappingFromDatabase()
直接在内部查询数据库,因为所需的依赖项已经在类中了?
您的设计很好。using System.Data.SqlClient;
为了允许自动测试,必须在代码中包含标头似乎是一个不错的权衡。;-)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句