DDD和Repository模式将有关CRUD的行为放在何处
本文关键字:在何处 CRUD Repository 模式 DDD | 更新日期: 2023-09-27 18:27:11
我试图在我的域模型中放入尽可能多的业务逻辑。
每次MyEntity更新时,我都希望发生两件事:
- 向创建消息的用户发送消息
- 检查更改是否适用于某些业务规则
如果实体不是聚合根的子级。
通常,我会从存储库中获取特定的实体。更改实体并将其持久化
使用MyRepository.Save()返回数据库
在这种情况下,我必须将业务逻辑放在我的应用程序或DAL中,而不是域模型中。除非绝对必要,否则我会尽量避免使用业务逻辑层,但除非我制作了一个名为MyEntity.Update()的方法或类似的方法,否则我似乎无法适应这一点,但我觉得这不是正确的方法。
首先让我声明,我不反对Repository模式。我最近在一个项目中成功地使用了一个。
我想说的是要小心。。。如果不能在对象中封装需求,那么可能需要重新考虑OO方法。为了做其他事情而引入数据访问层似乎是一种代码味道。我使用了服务层来接收请求、管理事务和版本控制,但不用于验证等其他事情。您的服务层可能如下所示。
public enum UpdateResult
{
Success,
NoMyEntityFound,
StaleData,
InvalidRequest
}
public class MyService
{
...
...
public UpdateResult Update(...)
{
...Start Tran
...Load var m = MyEntity
...do the bare minimum here
...m.Update()
...Commit Tran
return UpdateResult.Success;
}
}
说了这么多关于存储库的警示尾巴
http://ayende.com/blog/3955/repository-is-the-new-singleton