gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 21:12:30 26 4
gpt4 key购买 nike

我在 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com