问题标签 [data-transfer-objects]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
665 浏览

architecture - DTO:同一资源的多个 DTO(和汇编程序)

根据具体情况,我经常需要针对同一资源使用多个 DTO。

以相册为例。根据我想要显示的内容,我需要将不同的数据放入我的 DTO(通过表单、列表、详细信息等创建)。

我将有一个albumFormDTO 来创建专辑,一个albumDTO 集合用于专辑列表,还有一个albumDetailDTO 用于详细专辑。

对于每一个,我都需要一个特定的汇编程序。这样做似乎真的很沉重。

看起来很愚蠢吗?

谢谢,Cya 本杰明。

0 投票
3 回答
223 浏览

c# - 是否有任何框架或实用程序(在 .NET 空间中)用于从业务对象自动生成数据传输对象

我正在寻找使用一组约定(例如所有公共属性)从业务对象(类型定义,而不是映射数据)生成数据传输对象的最佳方法,并且可能可配置以确定要走多远。

我意识到,对于 dto 与业务对象不相似的许多情况(例如将多个业务对象扁平化为单个数据传输对象时),这可能是不可能的,甚至是不可取的。

但是,就我而言,我的数据传输对象中有很大一部分与它们的业务对象非常相似(尤其是用于更新数据的 DTO)。

我想知道是否有任何现有的代码生成工具(我正在寻找具有现有模板的特定解决方案,而不仅仅是像 CodeSmith 这样的通用代码生成工具),或动态程序集创建工具(例如在幕后使用反射发射)?或者,如果这是您在我有兴趣了解您使用什么技术帮助我在各种选项之间做出决定之前所做的事情。

0 投票
3 回答
11770 浏览

java - 为什么传输对象需要实现Serializable?

我今天意识到,多年来我一直盲目地遵循这个要求,而没有真正问过为什么。今天,我在从头开始创建的模型对象中遇到了 NotSerializableException,我意识到足够了。

有人告诉我这是因为负载平衡服务器之间的会话复制,但我知道我在会话范围内看到了其他不实现可序列化的对象。这是真正的原因吗?

0 投票
9 回答
26492 浏览

model - 视图层中的 DTO 或域模型对象?

我知道这可能是一个古老的问题,但更好的做法是什么?在应用程序的所有层中使用域模型对象,甚至在 JSP 上将值直接绑定到它们(我使用的是 JSF)。或者在 DAO 或 Service 层将领域模型对象转换为 DTO,并将轻量级 DTO 发送到表示层。

我被告知使用 DTO 没有任何意义,因为对数据库的更改将导致对所有 DTO 的更改,而在任何地方使用模型对象只需要对受影响的模型对象进行更改。然而,DTO 的易用性和轻量级特性似乎超过了这一点。

我应该注意到我的应用程序使用 Hibernate 模型对象并使用它自己的自定义创建的模型对象(意味着不绑定到任何数据库会话,始终分离)。上述任何一种情况对严格的模型对象模式更有利吗?就延迟初始化异常之类的事情而言,使用 Hibernate 是一个巨大的 PITA。

我正在编辑这个问题,希望能进一步讨论(不确定我是否做得对):

我对模型对象的问题是它们根本不灵活。下面的评论说应用程序的设计应该使模型对象可以在所有层中使用。为什么?如果用户想要一个荒谬的功能,我是否应该告诉他们,'这不适用于模型对象'?

简单明了,有时模型对象不起作用。你可能有:

但也许您不需要所有这些信息。你只需要老师的姓氏,他们今年教的学生人数,以及所有学生的平均 GPA 加起来。在那种情况下你会怎么做?检索完整的教师信息和学生关系,然后您的代码计算学生列表,然后计算其中所有 gpa 的总平均值?这似乎比简单地使用“String lastName”、“int numStudents”和“double combineGpa;”创建一个 DTO 更加努力;

这听起来像是我已经下定决心了,但我还没有在一个应用程序中工作,其中模型对象可以在每个实例中完全干净地使用。具有非同寻常的用户需求的常规现实世界应用程序无法以这种方式工作。

0 投票
2 回答
1097 浏览

asp.net-mvc - Dto 和域实体。我是否正确创建了我的 dto?

我有以下域实体:

我有以下 DTO:

当前的工作流程非常简单:我的存储库返回一个 CartItem 类型的 IEnumerable。我的服务将其转换为 dto (CartItemDTO)。然后我的控制器将其传递给视图。到目前为止,一切都很好。

现在我想为每个行项目实施总计。我将以下属性添加到 CartItemDTO。

然后,我将以下代码添加到 CartItemDTO 构造函数。

我的第一个问题是这是否是最佳实践方法?如果不是,为什么?我应该在其他地方添加 Total 属性吗?如果是这样,为什么?

我还想为整个购物车实现总计,因此我创建了一个新类(如下)并修改了我的服务以返回它。

我现在可以将新类传递给视图,或者创建一个单独的 ViewModel 并将新类的内容传递给 ViewModel 并将其传递给视图。

我的第二个问题是,这种方法是否是最佳实践方法?如果不是,为什么以及我应该做些什么不同的事情?

0 投票
1 回答
1425 浏览

c# - 集装箱船问题

考虑这个例子:

现在,我希望 User 类具有 CompanyCode 属性。第一个明显的解决方案是简单地将 CompanyCode 属性放在 User 类上

现在这里的问题是冗余,因为公司类已经有一个属性 CompanyCode,有什么方法可以让用户只使用公司的 CompanyCode 属性而不继承公司类(这里的问题是 C# 不允许类的多重继承)或使用 ICompany 接口(但接口在值对象中很痛苦)。我正在考虑只将 Company 类包含到 User 类中,但我将只使用它的属性 CompanyCode。

像这样的东西..

但是,仅仅添加一个字符串属性 CompanyCode.. 需要你的建议。提前致谢..

0 投票
2 回答
372 浏览

silverlight - Silverlight / WCF 中的数据传输对象的遗憾

我有一个托管在 Azure Web 角色 ASP 项目中的 Silverlight 应用程序。ASP 项目公开了一个 WCF 服务。

我想要一组数据类型的类定义。有人建议制作第三个项目(类库)并从 SL 和 ASP 添加对它的引用。我开始这样做,但 Silverlight 项目抱怨您只能添加对 Silverlight 项目的引用。

然后我制作了一个 Silverlight 类库并将数据类移到其中。但是,我要添加一些 .dll 引用,例如 Windows Azure 存储客户端。然后 Silverlight 类库告诉我,我只能添加对 Silverlight 4 友好 .dll 的引用,Windows Azure 不是其中之一。极好的。

我可以做些什么来解决这个问题,还是我坚持使用不那么优雅、冗余的解决方案?

0 投票
2 回答
1649 浏览

java - DTO 模式与 Memento 模式

DTO 模式(由 Fowler 提出)和Memento 模式(由 GoF 提出)在动机和实现方面有什么区别?可以是同一个班吗?如果是,我该如何命名它们(xxxDTO 或 xxxMemento)?它们在实施上有什么主要区别吗?他们在MVP架构中的位置在哪里?

谢谢。

0 投票
5 回答
19957 浏览

java - 在休眠实体和数据传输对象之间转换的好模式是什么?

关于如何在 Hibernate 实体和要由 Web 服务返回的数据传输对象之间进行转换,我有类似的问题和担忧,如本问题所述:

在 ejb3 中使用数据传输对象被认为是最佳实践

这里提到的一个因素是,如果域模型发生变化,一组 DTO 将在 Web 服务的情况下保护消费者。

尽管它似乎会为我的项目添加大量代码,但这种推理似乎是合理的。

是否有一个好的设计模式可用于将 Hibernate 实体(实现接口)转换为实现相同接口的 DTO?

因此,假设以下两个都实现了“Book”,我需要将 BookEntity.class 转换为 BookDTO.class,以便让 JAXB 序列化并返回。

再一次,这整个前景对我来说似乎是可疑的,但如果有很好的模式可以帮助处理这种转换,我很想得到一些见解。

是否有一些有趣的方法可以通过反射进行转换?还是我没有想到的“建设者”模式?

我应该忽略 DTO 模式并传递实体吗?

0 投票
3 回答
1239 浏览

c# - 使用 DTO 和 BO

对我来说,关于 DTO/BO 的一个问题是何时通过/返回 DTO 以及何时通过/返回 BO。

我的直觉告诉我总是将 NHibernate 映射到 DTO,而不是 BO,并且总是传递/返回 DTO。然后每当我需要执行业务逻辑时,我都会将我的 DTO 转换为 BO。

我这样做的方式是,我的 BO 将有一个构造函数,该构造函数接受一个参数,该参数是我的 DTO 和 BO 都作为唯一参数实现的接口类型(定义所需的字段/属性)。

然后我可以通过在构造函数中传递 DTO 来创建我的 BO(因为两者都实现了相同的接口,它们都具有相同的属性),然后能够使用该 BO 执行我的业务逻辑。然后我也有办法将 BO 转换为 DTO。

但是,我也看到人们似乎只使用 BO,并且只在用户的后台使用 DTO,看起来好像没有 DTO。

与始终使用 BO 相比,这种架构有什么好处/缺点?

我应该总是传递/返回 DTO 或 BO 还是混合匹配(似乎混合和匹配会让人感到困惑)?