我在 Gary McLean Hall 的 Adaptive Code via C# 的单元测试/测试驱动开发部分。我的问题是基于书中可能包含错误的示例。以下是 3 层架构中 AccountService
示例的 UML 图:
我将我的解决方案分成四个不同的项目,对应于这些层: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 会给我一个“循环依赖”错误。
这是有道理的,因为数据访问层是底层,不应该依赖于它上面的任何层......但是没有引用我不能在 中有一个
接口(interface)。 Account
返回类型IAccountRepository
作者是不是忘记了什么?我是否应该创建一个 IAccount
接口(interface),更改 GetByName()
方法以返回一个 IAccount
类型,并拥有 Account
实现IAccount
接口(interface)?如果没有,我该如何解决?
最佳答案
我在这里看到两种可能性:
- 添加名为“Common”的项目或类似名称 - 将 Account 类存储在那里,并在Data Access 和 Business 中添加对 Common 的引用逻辑项目
- 为帐户创建两个类:一个在数据访问中,一个在业务逻辑中。两者将具有相同的字段(属性)。第二个类应该是名称 AccountModel。 这是我在专业解决方案中看到的方法。基本上,数据访问层有实体类,业务逻辑层有模型类。当服务从存储库中获取数据时,它将 Account 类型的对象映射到 AccountModel 类型的对象
关于c# - 如何修复这种循环依赖?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36751435/