繁体   English   中英

为什么我应该将回购级别对象与控制器/服务级别对象混合?

[英]Why should i mix repo level objects with controller/service level objects?

我从事过许多微服务,发现我们没有将回购级别对象(mogo文档,实体)与服务/控制器级别的请求/响应混合在一起。 我想了解更多吗? 1.我们不希望pojo和实体/文档的行为相同吗?(可能是原因之一)请帮助我理解执行此操作的原因。

如果您需要分离实体(或通常的持久性对象)和公共接口响应(例如REST等),则在很大程度上取决于您的应用程序设计。

如果您的持久性对象仅包含简单的非敏感数据,则也可以将其用于公共接口响应。 但是以下是一些需要单独对象的场景:

  1. 您的持久性对象包含敏感数据(密码,加密密钥等),该数据应由外部读取。 然后,您可以将这些对象转换为其他类型,并剥离该数据以将其从公共接口隐藏。

  2. 您在持久性对象(实体之间的关系等)中嵌套了引用,这些引用达到非常深的甚至可以形成循环。 如果您尝试将这些序列化为传输格式(例如JSON),则该过程将因循环而失败,否则您的JSON对象将非常庞大。 然后,仅通过包含ID或任何嵌套引用即可轻松地转换对象并删除循环。

在开发的某些应用程序中,我什至更进一步,并确定了三个不同的数据对象层。 第一层是持久层,可以是实体,YAML或JSON表示或类似的东西。

由于应用程序使用大量不同的存储后端,并且支持多个相同的数据,因此我将这些特定对象转换为第二层的通用域对象。应用程序本身仅适用于这些域对象,而从未接触过持久性对象直。

第三层是装饰器层,我用来隐藏或简化信息以在REST接口上输出。 它们用于应对上述两种情况。

绝对可以的,特别是在小型项目或演示项目中。

假设您正在做Web应用程序。 对于复杂的企业应用程序,大多数时候您希望公开某些字段和某种格式的数据,而又吸引了数据对象,则可以避免更改实体字段和数据库表字段。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM