c# - 如何修复这种循环依赖?

标签 c# unit-testing tdd dependency-management

我在 Gary McLean Hall 的 Adaptive Code via C# 的单元测试/测试驱动开发部分。我的问题是基于书中可能包含错误的示例。以下是 3 层架构中 AccountService 示例的 UML 图:

UML Diagram

我将我的解决方案分成四个不同的项目,对应于这些层:User_Interface、Business_Logic、Data_Access 和 Unit_Tests。

我的问题与IAccountRepository 接口(interface)有关。在书中,作者为一个假类(在 Unit_Tests 项目中)编写了以下代码,用于模拟 IAccountRepository 接口(interface)的实现以用于单元测试:

class FakeAccountRepository : IAccountRepository
{    
   private Account account;

   public FakeAccountRepository(Account account)
   {
       this.account = account;
   }

   public Account GetByName(string accountName)
   {
       return account;
   }
}

我遇到的问题是 GetByName() 方法返回一个 Account 类型。如果我尝试将 IAccountRepository 中的签名更改为具有 Account 返回类型,它找不到该类型。由于 Account 类是业务逻辑层的一部分,如果我尝试添加对 Business_Logic 项目(来自 Data_Access 项目)的引用,Visual Studio 会给我一个“循环依赖”错误。

circular dependency error

这是有道理的,因为数据访问层是底层,不应该依赖于它上面的任何层......但是没有引用我不能在 中有一个 Account 返回类型IAccountRepository 接口(interface)。

作者是不是忘记了什么?我是否应该创建一个 IAccount 接口(interface),更改 GetByName() 方法以返回一个 IAccount 类型,并拥有 Account实现IAccount接口(interface)?如果没有,我该如何解决?

最佳答案

我在这里看到两种可能性:

  1. 添加名为“Common”的项目或类似名称 - 将 Account 类存储在那里,并在Data AccessBusiness 中添加对 Common 的引用逻辑项目
  2. 为帐户创建两个类:一个在数据访问中,一个在业务逻辑中。两者将具有相同的字段(属性)。第二个类应该是名称 AccountModel。 这是我在专业解决方案中看到的方法。基本上,数据访问层有实体类,业务逻辑层有模型类。当服务从存储库中获取数据时,它将 Account 类型的对象映射到 AccountModel 类型的对象

关于c# - 如何修复这种循环依赖?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36751435/

相关文章:

unit-testing - DUnitX 从字符串到整数数组的转换

java - 调试eclipse单元测试代码 "Test class should have exactly one"和 "Workspace is closed"错误

unit-testing - 自动化测试用例执行 - 何时停止

php - 如何(真正)对适配器进行单元测试

ruby - RSpec:如何编写一个期望特定输出但不关心方法的测试?

c# - Unity - 检查播放器是否接地不工作

c# - 我们如何在 C# 中添加一个新行

c# - Like 子句和预备语句

unit-testing - 早期写测试真的合理吗?

c# - 字符串格式一位小数