我有以下设置:MVC>服务>库。现在我想让用户能够为文档添加注释。只有与文档关联的用户(作为所有者或审阅者)才能添加Notes,因此在我的NoteService中,我执行以下操作以确保用户对所选文档具有权限:
public Note GetNewNote(int documentID)
{
if (!userHasAccess(Thread.CurrentPrincipal.Identity.Name))
throw new BusinessLogicException();
// Other stuff here...
}
我的问题是,我应该在哪里定义userHasAccess方法?在NoteService中没有任何意义,因为它正在检查Document。我可以在DocumentService中定义它,但然后NoteService将需要访问它,这似乎引入了更多的耦合。
对我来说,在Document POCO本身定义它然后调用document.userHasAccess(...)更有意义。这是一个好的做法还是域名POCO应限于简单的属性?我担心这确实是验证的一部分,通过将方法放在POCO中,我将在服务和POCO之间进行验证。
我要确保的是我的应用程序易于维护和测试。关于如何解决这个问题的任何建议都将非常感激!
答案 0 :(得分:6)
我应该在哪里定义userHasAccess方法?
与设计的其余部分保持一致是有意义的,而我不知道完整的设计我至少可以说POCO本身的一个名为UserHasAccess()的方法是有道理的。
域名POCO是否应限于简单属性?
不,域POCO应包含与该对象相关的逻辑(尤其是验证逻辑)。否则,它最终成为object with no behaviour - 你绝对应该避免的。
但是,不要混淆域(业务)对象和视图对象,它们通常只包含很少的逻辑。
您担心要将两者之间的验证分开 服务和POCO。
我会在POCO和服务中的跨域逻辑中进行验证。
答案 1 :(得分:0)
任何域实体也可以包含验证方法。
答案 2 :(得分:0)