我尝试在我的域模型中尽可能多地使用业务逻辑。
每次更新MyEntity时,我都希望发生两件事:
如果实体不是聚合根的子节点。
通常我会从存储库中获取特定实体。更改实体,并坚持下去 使用MyRepository.Save()
返回数据库
在这种情况下,我必须将业务逻辑放在我的应用程序或DAL中,而不是域模型中。我试图避免使用业务逻辑层,除非绝对必要,但我似乎无法适应这个,除非我创建一个名为MyEntity.Update()的方法或类似的东西,但我有一种不正确的感觉这样做的方式。
答案 0 :(得分:1)
首先让我说,我不反对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;
}
}
已经说明了所有关于存储库的警示尾巴