jvm - 对象什么时候符合 DTO 的资格?

标签 jvm design-patterns dto

DTO(数据传输对象)是用于在应用程序的多个子系统之间传输信息的对象,这些子系统通常由网络或进程边界分隔。这是我的理解。

但是,从 Java 的角度来看,子系统/模块是否必须位于不同的 JVM 实例上才能在它们之间使用对象才能符合 DTO 的资格? (我相信,在子系统之间的模块化和功能方面对体系结构进行重大划分就足够了。)怎么说?

此外,考虑到架构的同一层中的多个模块交换的对象,这些对象不符合 DTO 的资格吗?层级分离是否是强制性的?

提前致谢。

问候,

纳根德拉大学

最佳答案

由于在层之间传输对象需要某种序列化,因此它被视为 DTO。在层之间传输对象通常是通过使用域实体来完成的,因此不需要序列化。

因此,您的 DTO 通常没有用于保存数据的仅行为属性。

一点注意:当您的实体没有行为而只有数据时,DTO 经常被误认为是贫血对象。或者当对象仅用于将数据传入或传出方法或类时,然后消失,则称为闹鬼对象。

例如,有时您的数据持久性机制要求您实现或继承您不想耦合到域层中的接口(interface)或类,因此您创建继承或实现接口(interface)/类的对象并将数据传输到这些类为了坚持。

class Person{
public string Name {get;set;}
public int Age {get;set;}

public void Validate(){}
public void DoSomething(){}
}



public class PersonDTO : TableServiceContext
{
public const string ContactTableName = "PersonTable"

public string Name {get;set;}
public int Age {get;set;}

}

您通常会有一个类来组装和分解这些对象。

关于jvm - 对象什么时候符合 DTO 的资格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3628450/

相关文章:

java - 如何分析 native JNI 库

java - 配置 Jolokia Spring 代理

JAVA设置垃圾回收选项

具有 2 个或更多对象的页面上的 javascript 设计模式

java - DTO 的行为应该放在哪里?对象与数据结构干净的代码

java - 无法识别的 VM 选项 'UseCompressedStrings' - Intellij IDEA 无法启动

javascript - 我为什么/在哪里/什么时候应该这样做? (把js代码封装在一个函数里面然后执行)

c# - 在 C# 中控制对内部集合的访问 - 需要模式

java - mapstruct - 列表<字符串> 到列表<对象>

java - 使用转换器和提供程序而不是属性映射时如何让 ModelMapper.validate() 成功?