【发布时间】:2019-12-07 18:47:48
【问题描述】:
我正在为工作制作休息服务,使用:
- EntityFramework 核心。
- 存储库模式
- 工作单位。
- 服务模式。
- 数据传输对象 (Dto)。
- 数据访问对象(实体/道)
项目简介:
大型企业 Rest API 服务。
存储库负责 CRUD,并且仅负责 CRUD。
UnitOfWork 包含每个存储库,并通过依赖注入获取 DbContext。
我的 Dtos 是贫血模型,我知道很多人认为这是不好的做法,但是当制作一个包含上千个实体的 Master API 时,每个实体包含数百个列,这实际上是必要的。 所以我的 Dto 实际上只是反映了 Dao 的(虽然不是敏感信息)。
每个实体都有自己的存储库。
每个实体都有自己的服务类,主要使用给定实体的存储库。
每个实体都有自己的控制器和服务类,每个控制器都与给定的服务类对话。
服务类只接受Dto,每个函数将Dto转换为Dao,然后验证实体,如果实体无效则抛出异常。调用适当的存储库函数并使用 UnitOfWork 提交函数来保存更改时。
通过导航属性插入、更新和删除被禁用/不允许。
这个数据库在云端,而我工作的公司只使用边缘数据库,所以我们创建了一个“同步引擎”来将数据从旧数据库同步到新的基于云的数据库(这个) .
问题来了,我应该在哪里以及如何实现这些事件?
假设我有一个“用户”实体,它需要一百个字段,并且我在实体内部有一个工厂方法,它需要一百个参数长度,这根本不是最优的,然后就会触发事件甚至在知道它被添加到数据库之前?所以我最终向用户发送了一封电子邮件,但数据库不可用,所以根本没有创建用户。
我知道在 DDD 中你应该设置和聚合并在实体等中包含事件,但是即使写入数据库不成功,事件也会被触发......假设我有一个包含数百个必填字段的模型,在 Dao/Entity 类中有一个工厂方法,它需要一百个参数是不合适的?
提前致谢。 - 真诚地沮丧的人
【问题讨论】:
标签: c# asp.net rest domain-driven-design repository-pattern