数据访问类设计:使类可测试,同时还包含依赖项

问题描述

我需要一些设计建议。

我有一个应用程序,它将从各种来源读取数据并进行检查和比较。我的意图是将数据访问所需的所有依赖项(System.Data.SqlClient 等)包含在一组数据访问类(SqlImporterJSONImporter 等)中。其他需要数据的类将只使用这些类来完成工作。也许他们会传递连接字符串或其他信息。

但是,我需要对这些数据访问类进行单元测试。为了使它们可测试,我让我的数据访问类依赖于抽象/接口,然后传入具体的实现,以允许我从单元测试中传入 Mock 对象,类似于 Mocking SqlConnection,SqlCommand and SqlReader in C# using MsTest

结果是这样的:

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() 内的数据库,因为所需的依赖项已经在类中?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)