向POCO类添加方法

Jam*_*mes 6 validation asp.net-mvc poco asp.net-mvc-3

我有以下设置:MVC>服务>存储库.现在我想让用户能够为文档添加注释.只有与文档关联的用户(作为所有者或审阅者)才能添加Notes,因此在我的NoteService中,我执行以下操作以确保用户对所选文档具有权限:

public Note GetNewNote(int documentID)
    {
        if (!userHasAccess(Thread.CurrentPrincipal.Identity.Name))
            throw new BusinessLogicException();

        // Other stuff here...
    }
Run Code Online (Sandbox Code Playgroud)

我的问题是,我应该在哪里定义userHasAccess方法?在NoteService中没有任何意义,因为它正在检查Document.我可以在DocumentService中定义它,但是然后NoteService将需要访问它,这似乎引入了更多的耦合.

对我来说,在Document POCO本身上定义它然后调用document.userHasAccess(...)更有意义.这是一个好的做法还是域名POCO应限于简单的属性?我担心这确实是验证的一部分,通过将方法放在POCO中,我将分离Service和POCO之间的验证.

我要确保的是我的应用程序易于维护和测试.关于如何解决这个问题的任何建议都将非常感谢!

Joe*_*zer 6

我应该在哪里定义userHasAccess方法?

与设计的其余部分保持一致是有道理的,而我不知道完整的设计我至少可以说POCO本身的一个名为UserHasAccess()的方法是有意义的.

域名POCO应限于简单属性吗?

不,域POCO应包含与该对象相关的逻辑(尤其是验证逻辑).否则,它最终成为一个没有行为对象 - 你绝对应该避免的.

但是,不要在域(业务)对象和视图对象之间混淆,后者通常包含很少的逻辑.

您担心要分离Service和POCO之间的验证.

我将验证放在POCO中,并在服务中进行跨域逻辑.