问题标签 [ardalis-cleanarchitecture]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1168 浏览

c# - 清洁架构 - 在 ASP.NET MVC 中 - 我使用哪一层来编写 ViewModel?

问题很简单,

我正在使用 ASP.NET MVC 为项目(网站)使用 Clean Architecture。我从 GitHub下载了Ardalis编写的 Clean Architecture 模板示例代码。

在那个特定的模板中,作者没有使用视图模型。

是否有人对使用 Clean Architecture 和 ASP.NET MVC 的视图模型等的模板有任何参考,或者知道在哪里放置(层)视图模型。

0 投票
2 回答
284 浏览

repository-pattern - 使用存储库模式时如何调用 SQL 函数/存储过程

将代码转换为使用存储库模式时,调用 SQL 函数/存储过程的最佳方法是什么?具体来说,我对读取/查询功能感兴趣。

选项

  1. 添加ExecuteSqlQueryIRepository
  2. 添加特定于上下文(即ILocationRepository)的新存储库接口并添加特定于资源的方法
  3. 为所有随机存储过程添加一个特殊的“存储库”,直到它们全部转换
  4. 不。只需将存储过程转换为代码并将逻辑放在服务层中即可

选项 #4 似乎确实是最好的长期解决方案,但它也需要更多时间,我希望将其推到未来阶段。

哪个选项(以上或其他)将是“最好的”?

注意:我的架构基于ardalis/CleanArchitecture使用ardalis/Specification,尽管我愿意接受所有建议。

0 投票
0 回答
79 浏览

ardalis-cleanarchitecture - 清洁架构示例测试用例

#ardalis-cleanarchitecture 我阅读了您的 WorkService PR 代码。我正在尝试将它重用于我的东西。我看到了你的模拟测试,无法将它用于我需要的多个依赖项。你能帮我解决这个问题吗?您提到将添加元组。我试过这样做,但没有通过

https://github.com/ardalis/CleanArchitecture.WorkerService/blob/master/tests/CleanArchitecture.UnitTests/Core/EntryPointServiceExecuteAsync.cs

0 投票
1 回答
91 浏览

dependency-injection - 在 AutoFac 中,为什么我的通用存储库的 RegisterGeneric 调用顺序仅适用于最后一个注册的存储库?

我正在开发一个面向 .NET 5 的 ASP.NET API,我需要在其中访问三个不同的 SQL 数据库。

我使用 AutoFac 作为我的 DI(免责声明:我是 AutoFac 的新手,过去只在 DI 中使用过 ASP.NET Core 构建)。

我也在使用 Steve Smith 的 CleanArchitecture 框架(https://github.com/ardalis/CleanArchitecture

我正在使用通用存储库,每个 DbContext 一个(代表 3 个不同的数据库)。

我的启动项目的 Startup.cs --> ConfigureContainer 方法中有以下代码;

在我的 DefaultInfrastructureModeule 类中,我有以下代码;

项目编译并运行。但是,当我尝试从存储库调用方法(例如 ListAsync 方法)时,唯一正常工作的存储库是注册序列中列出的最后一个存储库。

例如,使用上面代码中列出的顺序,对 M1Repository 的 ListAsync 调用按预期工作,但对 IdpRepository 或 CdRepository 中的 ListAsync 方法的调用失败并出现 SqlException;

就像它不理解 DbContext.Set 应该查询用户表(复数),而不是用户表。

现在,如果我重新排列 DI 注册的顺序并将 IdpRepository 的注册移动到按顺序注册的最后一个,则 ListAsync 调用随后适用于 IdpRepository 但随后对 M1Repository 和 CdRepository 的调用失败并出现类似的 SQL 异常.

无论我以什么顺序注册它们,只有最后一个注册的工作正常。

所有三个通用存储库都使用 CleanArchitecture 模板中使用的相同基本设计。CdRepository 示例如下所示;

我确信这只是我不知道的 AutoFac 问题,因为我是 AutoFac 初学者。我似乎无法解决它。

有任何想法吗?

[更新 1]

这是我的 ListDepartments 端点,我在其中注入了一个存储库。

[更新 2]

在阅读了@ssmith 的评论后,我意识到我需要为 3 个通用存储库中的每一个提供独特的接口。导致问题的原因是使用 CleanArchitecture 模板中提供的 IRepository 和 IReadRepository 接口用于 AutoFac 中的三个不同存储库注册中的每一个。就我而言,一个明显的大脑放屁的例子。

一旦我为三个存储库中的每一个创建了独特的接口,该解决方案现在就可以工作了。

这是修改后的存储库;

这是我在其中注册存储库的 DefaultInfrastructureModule 类的修订版。

感谢@ssmith 的指导。:)

0 投票
1 回答
222 浏览

ardalis-cleanarchitecture - 清洁架构 (DDD) 为什么域对象(DB 实体)和 DbContext 在不同的项目中?

我理解抽象和分离关注点和单元测试的必要性,但是,在我看来,将实体和上下文分成 2 个项目有点过度设计?

我可能真的错过了一些东西,但这是因为你想对不同的 ORM-s 开放吗?

非常感谢您的澄清。

0 投票
1 回答
59 浏览

domain-driven-design - 如何管理 IAggregateRoot 的 Guard.Against.NotFound

我想知道如果数据库中存在projectId,我们是否要检查是否添加新项目,shell我们以某种AddItem方式插入Guard.Agains.NotFound(???)或不插入?我问是因为如果创建一些实体:

我们如何验证请求发送的 countryId 是否存在于数据库中?如果创建集成测试的示例,例如:

无论我输入的整数值是否为 CountryId 测试都会通过,直到不是 0 或负整数,但我想检查国家实体的 id 是否存在于数据库中。管理此检查的最佳地点在哪里?问候,

0 投票
0 回答
101 浏览

.net - 为什么这个模板被认为是“干净的”?

所有项目都有很多依赖项。为什么不使用像 Data -> Repository -> Service 项目这样只指向一种方式并且依赖项仅出现在服务层上的洋葱架构?

我知道它有使用 MediatR 实现的域事件,但是为什么我们至少没有一些没有部门的域项目呢?(SharedKernel 与域无关)

模板给我带来了比清洁更多的问题。这对我来说真的很奇怪,因为我曾经使用过洋葱架构。

此外,文件夹,命名,文件位置,代码风格 - 它是如此不一致。没有冒犯,但对我来说看起来有点不稳定。

PS我说的是https://github.com/ardalis/CleanArchitecture

0 投票
1 回答
66 浏览

ardalis-cleanarchitecture - 未处理 NewItemAddedEvent

我正在阅读 Clean Architecture Code 并且我意识到NewItemAddedEventin ( Clean.Architecture.Core) 没有被处理,它只用于测试。

是否有理由将其创建为事件而未处理?它的测试目的是什么?

0 投票
1 回答
43 浏览

entity-framework - 如何从 Ardalis CleanArchitecture 中的迁移中忽略域事件?

参考:https ://github.com/ardalis/CleanArchitecture

BaseEntity 模型包含一个List<BaseDomainEvents>. 在执行 EF 迁移时,此列表将被忽略。

这是如何实现的?代码中没有任何内容表明它应该被忽略。

0 投票
1 回答
208 浏览

c# - 如何使用 DbContext 处理多源数据库

我使用干净的拱形步骤来创建项目,但问题是我需要将三个以上的聚合放在参考数据库中。

我尝试对每个聚合使用 DbContext,如下所示:

我像这样发送每个 DbContext 的连接字符串:

但是当我尝试迁移它们时,它会显示如下豁免错误:

最后,我修复了MySql.EntityFrameworkCore与 net6.0 不兼容的更改包的部分问题,因此我使用Pomelo.EntityFrameworkCore.MySql了它并且成功运行。

但是我还有另一个问题是我的所有聚合在所有上下文中都秃顶了,我需要每个 DbContext 只构建他的聚合,那么如何解决它?