微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

平衡关注点分离、实现隐藏和数据传输对象

如何解决平衡关注点分离、实现隐藏和数据传输对象

实现隐藏要求我们对用户隐藏类的内部结构。为了简单起见,让我们声明:将 getter/setter 的数量减少到最低限度。

关注点分离要求一个类应该只有一个改变的原因。因此,一定不能让服务层的一类做服务层的事情,例如将数据保存到数据存储中。

数据传输对象 (DTO) 用于将数据从服务层传输到数据访问层。

为了构建 DTO,我需要在最坏的情况下读取服务层类的所有成员。这将需要最大数量的 getter,这违反了实现隐藏。

从具有虚拟方法 Storable 的公共 Dto buildDto() 抽象基类派生应该转换为 DTO 的类将违反关注点分离。

您能否推荐应对此问题的策略?或者实际上在这方面有什么共同的做法?

解决方法

您的定义中有一些不太正确的地方:

  • DTO 是“财产包”。没有行为的类,通常用于在不同服务之间交换数据。您可以使用它们来定义 WebAPI 中 REST 端点的负载或响应的形状。
  • 实现隐藏并不一定意味着减少 getter/setter。这是关于抽象类、数据和行为的内部结构。
  • 可以使用领域模型而不是简单的 POCO 类来完成服务层和数据层之间的通信(实际上这是值得推荐的)。

最后一点可能就是您要查找的内容。尝试正确定义您的领域模型:它们不应该是简单的“资产包”,否则您最终会拥有通常定义的“贫血模型”。

此外,如果您向我们提供有关您的总体架构的更多详细信息,我们或许可以为您提供更好的建议 :)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?