向 POCO 类添加方法

2024-04-12

我有以下设置: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(使用前将#替换为@)

向 POCO 类添加方法 的相关文章

随机推荐

  • Laravel 5:请求验证多维数组

    我有提交多维数组的表单 喜欢 slide 1 title slide 2 title 现在我使用 Request 类来定义我的规则 如何循环遍历此类中的所有数组项 我试过 public function rules return id gt
  • 为什么没有List.skip和List.take?

    为什么没有List skip和List take 当然有 Seq take 和 Seq skip 但它们不会因此创建列表 一种可能的解决方案是 mylist gt Seq skip N gt Seq toList 但这会创建第一个枚举器 然
  • dplyr 流中参考当前 data.frame

    如何在 dpylr 流中引用当前的 data frame 举个例子 在 library dplyr myresults tribble dataset name method group method value iris other a
  • Flutter创建无限屏幕

    我想象一种新的屏幕 我想用 Flutter 来实现 因为它非常强大 可以快速 流畅地渲染 我想要实现一种无限的屏幕 带有可以移动的正方形或区域 实际上就像一张地图 实际上不是无限的 而是非常大 但我可以 拖动并翻译 放大和缩小 单击并按下屏
  • Firestore 安全规则获取函数错误

    当用户注册时 应用程序会使用相同的信息将用户保存在 Firestore 中uid为 Firebase 身份验证生成 现在我正在尝试为单独的集合 而不是用户集合 编写安全规则 其中read and write仅当请求者具有以下权限时才允许该请
  • Mac OS X 上的 Tomcat 启动脚本权限

    我正在努力使用最近开始使用的 Mac OS X 10 5 8 进行开发 我成功安装了 tomcat 并为我的环境变量创建了 launchd conf 我相信效果很好 因为我可以使用 Maven 和 Cargo 插件成功地使用 Netbean
  • 以数组列表或列表的形式从 firebase 存储中检索图像,然后将其发送到 firestore,稍后可以检索该图像以填充多个 img

    这些是下面定义的参考文献 StorageReference strgRef FirebaseFirestore mfirestore ArrayList
  • IKVM 的重映射 XML 文件的格式是什么?

    In 本文 http weblog ikvm net CommentView aspx guid b9b950c5 eb34 4b81 975a 1c95492736fbJeroen 解释了使用 XML 文件将 Java Bean gett
  • 调用事件处理程序

    我有以下事件处理程序 private EventHandler
  • C# WebApi 中的await/async 有什么意义?

    有谁知道这样做的目的是什么 private async Task
  • 有什么方法可以跟踪应用程序引擎中的云 SQL 调用吗?

    我正在尝试使用 cloud sql gen2 优化应用程序引擎 Java 应用程序的性能 如果我可以跟踪对云 sql 的调用 就像我可以在 stackdriver 跟踪详细信息中跟踪对数据存储的 RPC 调用一样 那将会有很大帮助 这是否有
  • Java字符串方法不返回字符串[重复]

    这个问题在这里已经有答案了 我对编码非常陌生 刚刚接触静态方法 所以我提前为这些愚蠢的错误道歉 当在 main 下调用该方法时 该方法应该显示一个三角形 但我得到一个空控制台并且没有输出 但是 如果我在 main 下写下这个 String
  • 如何在代码隐藏中设置 EntityDataSource 的Where子句

    PaymentsDueEntityDataSource ContextTypeName Bills DAL BillsEntities PaymentsDueEntityDataSource EnableFlattening false P
  • 使用 Office.Interop.Excel 将文件另存为 PDF/A

    我怎样才能导出Excel电子表格转 PDF A ISO 19005 1 编辑 我要 PDF A 并且not默认导出的是普通旧版 PDF 1 5 我什至还强调了A在我原来的问题中 我已经可以使用以下命令将 Word 和 PowerPoint
  • 如何向react元素添加多个样式属性? [复制]

    这个问题在这里已经有答案了 我将如何向我的 React 元素添加多个样式属性 我的应用程序中的一些组件始终使用相同的样式 但样式略有不同 我正在努力完成一些事情 div div 这些样式位于名为 styles js 的文件中 因此this
  • 如何确定折叠工具栏已折叠?

    我需要知道材料设计库中的 CollapsingToolbar 何时折叠 正如 Marko 所说 这可以使用您自己的 OnOffsetChangedListener 实现来实现 AppBarLayout appBarLayout AppBar
  • 反转/吹出 GROUP BY

    我正在处理按项目编号和计数分组的数据 每条记录都有一个count gt 2需要分解成单独的记录 并在该级别与另一组不同的数据进行比较 数据看起来像这样 它被困在这种格式中 这是客户发送它的唯一方式 OwnerNumber ItemCode
  • 是否可以从手机设置中授予附近 API 权限?

    Question 是否可以从手机设置中授予附近 API 权限 如果是这样 怎么办 答案是否因设备 API 级别而异 如果需要 请继续阅读以获取更多背景信息 一般背景 当面向 API 级别 23 或更高级别的应用安装在运行 API 级别 23
  • 使用 Firestore REST API 和本地模拟器套件创建新文档,返回错误 404:路径参数问题

    作为一名初学者 我刚刚熟悉 Firebase Firestore 并且正在尝试为朋友为其项目编写的一组可调用函数创建集成测试 我正在编写一个测试来使用 Firebase 本地模拟器套件进行自动化测试 现在 我正在尝试使用 Axios 编写一
  • 向 POCO 类添加方法

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