我有以下设置:MVC > 服务 > 存储库。现在我想让用户能够向文档添加注释。只有与文档关联的用户(作为所有者或审阅者)才能添加注释,因此在我的 NoteService 中,我执行以下操作以确保用户对所选文档具有权限:
public Note GetNewNote(int documentID)
{
if (!userHasAccess(Thread.CurrentPrincipal.Identity.Name))
throw new BusinessLogicException();
// Other stuff here...
}
我的问题是,我应该在哪里定义 userHasAccess 方法?它在 NoteService 中没有任何意义,因为它正在检查文档。我可以在 DocumentService 中定义它,但是 NoteService 将需要访问它,这似乎会引入更多的耦合。
对我来说,在 Document POCO 本身上定义它然后调用 document.userHasAccess(...) 更有意义。这是好的做法还是域 POCO 应该仅限于简单属性?我担心这实际上是验证的一部分,并且通过将方法放置在 POCO 中,我将服务和 POCO 之间的验证分开。
我试图确保我的应用程序易于维护和测试。任何关于我应该如何解决这个问题的建议将不胜感激!
我应该在哪里定义 userHasAccess 方法?
与设计的其余部分保持一致是有意义的,虽然我不知道完整的设计,但我至少可以说 POCO 本身上名为 UserHasAccess() 的方法是有意义的。
域 POCO 是否应该仅限于简单属性?
不,域 POCO 应该包含与对象相关的逻辑(尤其是验证逻辑)。否则,它最终会成为一个没有行为的对象 http://martinfowler.com/bliki/AnemicDomainModel.html- 你绝对应该避免的事情。
但是,不要混淆域(业务)对象和视图对象,它们通常包含很少的逻辑。
您担心您将验证分开
服务和POCO。
我将验证放在 POCO 中,将跨域逻辑放在服务中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)