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

问题描述

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

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

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

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

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

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

解决方法

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

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

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

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...