问题标签 [dto-mapping]

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 投票
5 回答
3207 浏览

c# - 关于如何从域 (ORM) 对象映射到数据传输对象 (DTO) 的建议

我正在开发的当前系统利用 Castle Activerecord 在域对象和数据库之间提供 ORM(对象关系映射)。这一切都很好,而且大多数时候实际上效果很好!

问题来自于 Castle Activerecords 对异步执行的支持,更具体地说,是管理对象所属会话的 SessionScope。长话短说,坏事发生了!

因此,我们正在寻找一种方法来轻松地将域对象(他们知道数据库存在并关心)转换(自动思考)到 DTO 对象(他们对数据库一无所知,不关心会话、映射属性或所有事情)奥姆)。

有没有人有这样做的建议。首先,我正在寻找对象的基本一对一映射。域对象Person将被映射到说PersonDTO。我不想手动执行此操作,因为它是一种浪费。

很明显,我想到了反思,但我希望这个网站周围有一些更好的 IT 知识, 会建议“更酷” 。

哦,我在 C# 中工作,如前所述的 ORM 对象与 Castle ActiveRecord 映射。


示例代码:

根据@ajmastrean 的要求,我已经链接到一个我(严重)一起嘲笑的例子。该示例有一个捕获表单、捕获表单控制器对象、活动记录存储库和一个异步助手。它有点大(3MB),因为我包含了运行它所需的 ActiveRecored dll。您需要在本地计算机上创建一个名为ActiveRecordAsync的数据库,或者只需更改 .config 文件。

示例的基本细节:

捕获表格

捕获表单有对控制器的引用

在初始化表单时,它调用 MyController.Load() private void InitForm () { MyController = new CompanyCaptureController(this); MyController.Load(); 这将返回一个名为 LoadComplete() 的方法

这就是“坏事”发生的地方,因为我们正在使用设置为延迟加载的 Company 的子列表。

控制器

控制器有一个从表单调用的 Load 方法,然后它调用 Asyc 助手以异步调用 LoadCompany 方法,然后返回 Capture 表单的 LoadComplete 方法。

LoadCompany() 方法只是利用存储库来查找已知公司。

该示例的其余部分相当通用,它有两个继承自基类的域类、一个用于插入一些数据的设置文件和一个用于提供ActiveRecordMediator功能的存储库。

0 投票
2 回答
2904 浏览

c# - 用 Linq To SQL 和 DTO 分离关注点

我最近开始了一个新的 webforms 项目,并决定将业务类与任何 DBML 引用分开。我的业务层类改为访问离散的数据层方法,并返回 DTO 的集合。所以数据层可能会像下面这样投射 DTO:

尽管构建 DTO 对象会增加工作量,但这感觉像是在业​​务层和数据层之间紧密绑定的更好方法,这意味着我可以在没有数据库的情况下测试业务层。

我的问题是,这是一种好的做法吗?,有没有一种方法可以生成 DTO(可能通过 SQLMetal),以及随着项目的进展我可能会遇到哪些其他问题。

0 投票
1 回答
3227 浏览

performance - 从网站性能的角度来看,DTO 的优缺点是什么?

从网站性能的角度来看,DTO 的优缺点是什么?(我说的是在与 Web 服务器不同的应用程序服务器上访问数据库的情况 - 并且 Web 服务器可以直接访问数据库。)

0 投票
4 回答
4306 浏览

web-services - 从 DTO 转换为实体和从实体转换为 DTO 的简单方法?

我最近参与了几个分布式客户端/服务器项目,我们经常遇到的一个痛点是将 DTO 对象转换为我们的实体,反之亦然。我想知道是否有人对这个时间槽有一个“简单”的解决方案?

我想到的一件事是使用反射进行某种翻译......我想你必须确保你的属性名称在线路的每一侧都完全相同 - 但似乎它可能会起作用。

只是在寻找一种方法来避免我的开发中的一些时间沉没。

谢谢!!

0 投票
3 回答
1923 浏览

asp.net - AutoMapper 问题

试图自动映射一些对象。
源对象具有名称前带有 _ 的属性,而目标对象则没有。是否可以实现一个映射创建,该自动映射器会将所有 _properties 映射到
所有源类型的属性。

0 投票
2 回答
1753 浏览

c# - 如何关闭 List 之间的 AutoMapper 自动列表转换和实体集?

我正在使用AutoMapper将我的 Linq-To-SQL 生成的实体映射到 DTO 。

当我最初创建单元测试时,我设置了特定的映射(通过静态配置类)以将一种类型的 EntitySet 转换为通用列表(反之亦然)

删除列表转换后(在确定 AutoMapper 将自动转换这些转换后),我的单元测试仍然有效,但它们慢到了爬行。它非常慢,每次测试都需要一分钟。

重新添加列表映射后,单元测试恢复了正常的性能速度。

有没有办法关闭列表的自动转换,以便我必须映射我的列表转换?如果我未能包含地图,我希望它抛出 AutoMapperException。我想避免这些性能问题。

如果情况变得更糟,我可能最终会编写一个快速代码生成模板来自动创建基于 DTO 的映射配置类。这样,我就不会错过任何东西。

谢谢。

0 投票
3 回答
31605 浏览

guice - bean映射推土机的替代品?

我试图找出一种简单的方法来将 DTO 映射到没有样板代码的实体。当我考虑使用推土机时,它似乎需要大量的 xml 配置。有没有人见过使用 DSL 在纯 Java 中配置 bean 映射的推土机替代方案?

理想情况下,我希望找到一个受 Guice 做事方式启发的 bean 映射器。

0 投票
2 回答
328 浏览

java - 重构值对象的疯狂继承层次结构 - 如何获取所有字段和类型的列表?

所以基本上,我需要手动调整继承层次结构。我希望课程是完美的,没有额外的字段,它们只是 DTO。但是,很容易迷路并添加重复字段,而且很难看出我要查找的内容是否已经存在。我真的很想拥有一种列出类中所有字段的方法,包括它的继承字段(也是私有的)。就像一个扁平的仅字段视图,没有 getter 和 setter 把所有东西都弄得乱七八糟。

我找到了一种在 netbeans 中通过右键单击/文件成员显示它的方法,但我无法复制粘贴并将其保存在文本文件或任何内容中。

基本上只有这些列:

任何人都知道该怎么做,或者更好的方法来做我想做的事情?

0 投票
1 回答
425 浏览

java - NHibernate 获取/自动映射器问题

好的,所以我现在有一个问题,要么是 AutoMapper,要么是我的 NHibernate 查询或域/DTO 设计。

我遇到的问题是,当我进行提取时,例如 ObjectA 包含 ObjectB 的列表,而 ObjectB 具有其父 ObjectA 的属性。当我有一个对我的 ObjectA 的 ObjectB 属性进行急切获取的查询时,我可以无限地继续 ABAbABAB 等等。

这意味着当我尝试将域对象映射到包含相同交易的 DTOA 时,DTOA 具有 DTOB 列表,而 DTOB 具有其父 DTOA 的属性。我的服务在返回时超时,因为我相信我正在使用 AutoMapper 将 DomainA 映射到 DTOA,然后因为 DTOA.DTOB.DTOA.DTOB 等填充了它的无限序列化。

无论如何,我确信这是一个古老的经典问题的最佳解决方案,但我正在努力寻找正确的东西来输入我的老朋友谷歌。我可以让 AutoMapper 忽略子实例中的父实例吗,即使我认为如果我可以让 Nhibernate 获取列表但在父属性上保留一个代理,我最好。最糟糕的解决方案是使用特定场景或特殊逻辑的对象更改域对象。

任何帮助表示感谢。

编辑 - 代码

映射代码

域对象 DomainA

域对象 DomainB

}

休眠查询

WCF 服务返回声明

使用 fetching 和 dto 域结构和自动映射器配置运行该查询意味着我的服务超时而没有错误,我假设它试图序列化并且无休止地循环,没有 fetch 和列表为空,当然一切正常

0 投票
1 回答
887 浏览

java - 推土机 - 从实体列表到实体 ID 列表

我有一个名为 User 的域对象:

我有相关的 DTO (UserDTO) 是

我想使用 Dozer 从域对象转换为 DTO。Profile 类有一个属性

我想要的是 Dozer 为列表中的每个配置文件获取配置文件的 ID,并将其保存在 DTO 的列表中。我可以做这样的事情吗?我必须使用自定义转换器吗?

这是我的实际映射文件