问题标签 [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 回答
19203 浏览

business-objects - 什么是 DTO 和 BO?有什么区别?

我知道 DTO 是一个数据传输对象,而 BO 是一个业务对象。但是,它实际上是什么意思?我什么时候应该选择一个而不是另一个?从,我理解的DTO只是用来传输数据,没有业务逻辑。这是否意味着 DTO 没有任何方法属性(getter 和 setter)?但是,它仍然具有 BO 的属性。有人可以解释一下吗?谢谢。

0 投票
2 回答
2844 浏览

wcf - WCF 服务应该返回 EntityObject 还是 POCO/DTO 类?

我一直在查看许多使用 EntityFramework 的 WCF 示例,其中大多数似乎将某种 POCO 或 DTO 类返回给客户端。

我想知道为什么这是因为默认EntityObject包含[DataContract]attributes 和 implements INotifyPropertyChanged。返回 DTO 或 POCO 类是否比返回更好EntityObject(反之亦然)?是否存在使用一个返回值优于另一个返回值的特定实例?

0 投票
1 回答
198 浏览

c# - 模型只是在 WCF 服务中还是需要在客户端中复制?

我正在构建一个应用程序。我正在 MVVM Light 的帮助下创建 Silverlight 4 客户端。我正在从 WCF 服务获取数据。至少,这是计划。

在 WCF 服务中,我定义了我需要在我的应用程序中使用的“实体”。当我在 Silverlight 客户端中添加对我的 WCF 服务的引用时,Visual Studio 会在客户端重新创建服务中标记有属性 [DataContract] 的所有类。

我想知道的是这是否是一种不好的做法,以及在客户端内部创建模型是否更好。据我了解,在第一种情况下,我应该只在 Silverlight 客户端中创建 ViewModels 和 Views,而在第二种情况下,我应该在 Silverlight 客户端中创建 Views、ViewModels 和 Models,并使用来自 WCF 服务的值。

感谢您的帮助。

干杯,G。

更新

好的,我认为我的问题不够清楚,因为我没有收到很多反馈。但是,我想提供有关此的更新。我一直在寻找的答案是“不!数据传输对象!”。

我正在考虑将我的实体类(映射到数据库表的那些)用作 WCF 服务中的 DataContract。在客户端中添加对此 WCF 服务的引用也会在客户端上创建所有用 DataContract 修饰的类。

就我而言,最大的问题是数据层基于 Hibernate,它有时会在“数据代理”类的运行时广泛使用(参见 Castle Proxy)。好吧,事实证明这些数据代理存在序列化问题,据我所知,最好的方法是采用数据传输对象模式,以便将“复杂”实体映射到类似但“更轻”的类(DTO)。

我希望这可以帮助别人。

祝你今天过得愉快!詹卢卡。

0 投票
1 回答
3685 浏览

oop - 复合 DTO 中的 DTO 应该通过主键还是对象引用相互引用?

建议传输对象不应包含对其他传输对象的对象引用。相反,他们应该使用其他传输对象的主键作为外键字段。

以 Order 和 Customer 作为实体的简单示例

显然,一个 OrderListDTO 包含一个没有客户详细信息的订单列表,将包含订购客户详细信息的外键。

复合 DTO OrderWithCustomerDTO 将具有对 OrderDTO 和 CustomerDTO 的对象引用。但是在这种情况下,嵌入式 OrderDTO 本身是否应该具有对其 CustomerDTO 的对象引用?还是应该使用订购客户的主键?

对象引用指示

一个优点是客户端可以直接使用传输对象,例如作为表示模型。我倾向于接受这种方法来传输始终完全自包含的对象,例如具有相关 DTO 的复合 DTO 或完整树。客户端可以依赖自包含。客户端根本不需要对传输对象进行后处理。

将主键指示为外键

优点是内部和外部引用的处理方式相同。我倾向于使用这种方法来传输可能包含外部引用的对象,例如具有外部 childIds 的子树。客户端必须遍历完整列表以解析外部 childId。

带有树或子树的更复杂示例

现在讨论的传输对象是树或子树。从技术上讲,它是一个节点列表。

如果传输对象中的节点通过对象引用(如下面的 NodeTOWithObjectReferences)相互引用,是否可以?

或者传输对象是否必须用下面的 NodesTOWithForeignKeys 之类的外键字段替换每个对象引用?


(我选择传输对象来封装来自客户端的域模型并提供客户端特定的数据视图。)

0 投票
2 回答
1355 浏览

c# - 数据传输对象中的属性应该扩展外键还是简单地公开它们的主键

我有一个 EmployeeDTO 代表数据库中的员工记录。Employee 表与 Department 有关系,与 Permission 有一对多的关系。

在我的实体中,这些表示为完全扩展的部门属性和完全扩展的权限对象列表。

问题是 DTO 是否应该具有完全扩展的 DepartmentId 的 DepartmentDTO 属性?DTO 是否应该具有 PermissionId 列表的完全扩展的 PermissionDTO 属性列表?

0 投票
1 回答
216 浏览

silverlight - 应可在 Silverlight 中访问的 DTO 的 Visual Studio 项目类型

我应该选择什么 VS 项目类型,以便我在其中创建的数据传输对象可以在我的 Silverlight 项目和我的 WCF 服务项目中访问。

(当我创建对 WCF 服务的 Web 服务引用时,我希望能够重用我在两个项目中定义的 DTO,而不是让 VS 在我的 Silverlight 项目中生成一个新集合)。

IE,我的问题是该项目可以是 Windows 类库,还是应该是 Silverlight 类库(以便在我的 Silverlight 项目和 WCF 项目中引用它)。

0 投票
1 回答
491 浏览

c# - POCO 和“值对象”之间的唯一区别是 POCO 的目标是 .Net 吗?

我实际上正在尝试理解 POCO 的确切含义(是的,我已经阅读了维基百科,但仍然无法理解要点:()。

我知道值对象是一个基本上只有属性来保存数据而没有任何行为的对象。

在这种情况下,在我看来,POCO 和“值对象”具有相同的结构,但不同之处在于 POCO 以 .net 框架为目标。

我对么?

谢谢。

0 投票
1 回答
131 浏览

design-patterns - Transfer Object 是否应该始终反映整个 DB 行条目?

我对 DAO 模式中的传输对象有疑问。假设您有一个 USER 表,该表中有 20 个字段。在业务逻辑中,我注意到在某些场景中我可能需要字段 1 到字段 3,而在其他场景中可能需要字段 4 - 字段 6。因此,当我实现 userTO 类时,我应该只定义字段 1 - 6 还是应该定义所有 20 个字段。另一件事是,如果我定义了所有 20 个字段,UserDAOImpl类中的 SQL 将始终需要获取所有 20 个字段才能启动 userTO 对象,这会是一个问题吗?

非常感谢任何建议。谢谢!

0 投票
1 回答
929 浏览

silverlight - WCF RIA Services Master-Detail 中的 DTO

我必须制作一个 Master-Detail 场景,在该场景中,我可以显示许多类型的项目,它们都实现了IDto

注意:我正在使用实体框架 EDM(生成ObjectContextEntityObjects)。

类层次结构是和Contact的子类,是 的基类,是 的基类。有一个可以是 a或 a的属性,并且有一个.PersonCompanyPersonEmployeeCompanyVendorCustomerContactContactPersonJob

在此处输入图像描述

现在在主列表中,我想从DomainService(它是 a加载 DTO 集合LinqToEntitiesDomainService<ObjectContext>,并且我只想IDto选择合同中的指定字段,然后在选择时加载整个实体及其所有字段/相关数据等细节区域。

更新:我想到了另一个想法。
创建一个数据库视图(SQL2008),返回上述IDto合同的 3 行,其中枚举将存储为 int 或 tinyint(然后将枚举更改为字节),然后在 edm 中我可以按层次结构创建一个表对于存储在列表中的每个 EntityType,并从DomainService.

顺便说一句,所有枚举值都将用于查询,实际上,没有实体将返回ContactEntityType属性,因为Contact它是抽象的,可以是 aPerson或 a Company,但我仍然希望有一个查询它们的选项。

更新 2
对于列表中的每一项,客户还想要其所有工作。
基于我上面描述的层次结构,对于Customer- 选择它的所有工作;对于 aContact或 a Person- 选择它CustomerJobs(如果它是 a Customer)。Vendoror Employees 并不意味着要在Jobs 中注册。

我认为我能做到这一点的唯一方法是使用数据库视图。
我错了吗?后果是什么?我正在使用带有 RIA 的 SL5。

观点很好吗?或者我应该使用客户端 POCO 处理客户端中的所有查询?因为这个值实际上只用于检索联系人姓名及其工作。进一步的细节和操作将在Entity他们自己的实体的其他视图中完成。

那么各位专家怎么看?

0 投票
1 回答
240 浏览

ruby - 数组到虚拟对象

问题!

我想知道是否可以通过方法将数组转换为虚拟对象。假设我有一个类“Person”,它有两个属性“@name”和“@lastname”,然后我有一个包含此信息的数组,所以我需要将每个数组项传递给 Person 类的新对象。

例子 #

问题?

这甚至可以通过扩展 Array 的类来实现吗?

任何帮助将不胜感激

~ 埃德奎尼诺斯