问题标签 [dto]
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.
repository - 在 DDD 中,如何使用多个存储库获取只读列表
如果您需要在页面上生成只读数据列表,并且该数据自然会来自多个(可能是 5 个或更多)不同的存储库,您会怎么做?
我们正在使用 DDD,并且一直在强制通过存储库访问我们的数据库,但是出现了一个似乎不适合 DDD 的场景,我们正在尝试确定要使用的最佳模式。
例如,假设您有一个基于社区的网站,其中包含视频、论坛、博客等。您有一个包含评论列表的论坛页面。这很粗糙,但我希望它是有道理的。
所以每条评论都包含几个不同的部分:用户名、社区分数、头像、电子邮件、用户的博客和用户的视频页面。传统上,这些信息都来自不同的存储库。
问题在于效率。存储库可以最大化,但只能围绕为其创建的聚合。当您需要访问位于多个存储库中的数据时,使用存储库的读取访问效率会降低。
我的解决方案是使用相关信息创建一个 UserInformation DTO,并在 UserForumsRepository 中放置一个带有签名的方法
我的一位同事建议以这种方式使用 DTO 会破坏我们一直在使用的设计模式,并建议更好的方法是获取论坛评论 id 列表,然后将这些 id 传递到各个存储库以返回结果。
我自己的观点是,存储库的主要目的是封装对 CRUD 的 CUD 部分很重要的业务逻辑,但只读列表应该以最有意义的方式生成。如果合适的话,我认为从存储库中完全删除只读列表方法甚至是有意义的(例如,在跨多个不同类型页面使用的公共小部件中)。
你如何处理这种情况?
c# - 有没有办法将键/值对列表转换为数据传输对象
...除了明显的列表循环和肮脏的案例陈述!
我已经在脑海中翻过了一些 Linq 查询,但似乎没有什么能接近。
如果有帮助,这是一个示例 DTO:
恐怕我们无法控制我们以 KV 对的形式获取数据这一事实。
虽然每个 KV 对到每个属性都有一个有效的映射,而且我事先知道密钥,但它们的名称与 DTO 不同。
c# - 业务对象是否应该能够创建自己的 DTO?
假设我有以下课程:
...和一个 DTO,用于跨服务边界 (WCF) 传输相机信息,例如,用于在 WinForms/WPF/Web 应用程序中查看:
现在我可以添加一个方法Camera
来公开其数据:
或者,我可以创建一个方法,该方法需要传入一个特殊的 IReporter,以便相机向其公开其数据。这消除了对 Contracts 层的依赖(Camera 不再需要知道 CameraData):
那我应该怎么做?我更喜欢第二种,但它要求 IReporter 有一个 CameraData 字段(由 更改GetCameraInfo()
),这感觉很奇怪。另外,如果有更好的解决方案,请与我分享!我仍然是一个面向对象的新手。
java - Hibernate GenericDAO 用于父/子关系和 DAO/DTO 模式
我正在寻找 Hibernate 中的通用 DAO 实现,其中包括父/子关系管理(添加、删除、获取子级、设置父级等)。
实际上,网络上最常用的通用 DAO 是我在jboss.org上找到的。
而且,我正在寻找一些 DAO/DTO 示例实现和设计模式。
你知道那里有一些好的资源吗?
wpf - MVVM 模式:模型服务器往返后 ViewModel 更新
我在服务器端有无状态服务和贫血域对象。服务器和客户端之间的模型是 POCO DTO。客户端应该成为 MVVM。该模型可以是 20 个不同类的大约 100 个实例的图。客户端编辑器包含各种标签页,它们都实时连接到模型/视图模型。
我的问题是如何在服务器往返后传播更改的好方法。将更改从 ViewModel 传播到 DTO 非常容易。回到过去,可以扔掉旧的 DTO 并用新的 DTO 替换它,但这会导致列表/数据模板的大量重绘。
我可以收集服务器端的更改并将它们传输到客户端。但是更改的字段名称将特定于域/DTO,而不是特定于 ViewModel。映射对我来说似乎很重要。如果我应该在往返后以命令的方式执行此操作,它将破坏视图模型的 SOC/模块化。
我正在考虑某种映射规则引擎,例如 automappper 或 emit mapper。但它只解决了非常简单的用例。我看不到它将如何映射/传播/转换将项目添加到列表或删除。如何识别集合中的实例,以便将值合并到现有实例。它还应该传播验证/错误信息。
也许我应该在 DTO 上实现 INotifyPropertyChanged 并尝试在其上重放服务器端事件?然后将 ViewModel 绑定到它?绑定会解决集合合并的问题吗?PRISM 的 EventAgregator 对此有用吗?是否有任何事件记录重播组件?
具有服务器端逻辑的架构是否有更好的客户端模式?
datatable - 从 DAL 返回 DTO 与 DataTable
让 DAL 从域模型返回 DTO 类型而不是只返回 DataTable 是否可以?让你的 DAL 函数返回 DataTables/DataSets 并让你的 BLL 将数据映射到业务对象不是更宽松吗?
dto - 最佳实践:DTO 可以具有导航属性吗?
DTO 可能与其他 DTO 有关系吗?
关于这个话题还有更多意见:-)?
model - 视图层中的 DTO 或域模型对象?
我知道这可能是一个古老的问题,但更好的做法是什么?在应用程序的所有层中使用域模型对象,甚至在 JSP 上将值直接绑定到它们(我使用的是 JSF)。或者在 DAO 或 Service 层将领域模型对象转换为 DTO,并将轻量级 DTO 发送到表示层。
我被告知使用 DTO 没有任何意义,因为对数据库的更改将导致对所有 DTO 的更改,而在任何地方使用模型对象只需要对受影响的模型对象进行更改。然而,DTO 的易用性和轻量级特性似乎超过了这一点。
我应该注意到我的应用程序使用 Hibernate 模型对象并使用它自己的自定义创建的模型对象(意味着不绑定到任何数据库会话,始终分离)。上述任何一种情况对严格的模型对象模式更有利吗?就延迟初始化异常之类的事情而言,使用 Hibernate 是一个巨大的 PITA。
我正在编辑这个问题,希望能进一步讨论(不确定我是否做得对):
我对模型对象的问题是它们根本不灵活。下面的评论说应用程序的设计应该使模型对象可以在所有层中使用。为什么?如果用户想要一个荒谬的功能,我是否应该告诉他们,'这不适用于模型对象'?
简单明了,有时模型对象不起作用。你可能有:
但也许您不需要所有这些信息。你只需要老师的姓氏,他们今年教的学生人数,以及所有学生的平均 GPA 加起来。在那种情况下你会怎么做?检索完整的教师信息和学生关系,然后您的代码计算学生列表,然后计算其中所有 gpa 的总平均值?这似乎比简单地使用“String lastName”、“int numStudents”和“double combineGpa;”创建一个 DTO 更加努力;
这听起来像是我已经下定决心了,但我还没有在一个应用程序中工作,其中模型对象可以在每个实例中完全干净地使用。具有非同寻常的用户需求的常规现实世界应用程序无法以这种方式工作。
wpf - 我应该在 MVVM 中使用 DTO 作为我的数据模型吗?
我目前正在研究我第一次真正尝试使用 MVVM,并且一直在阅读有关如何最好地实现它的各种文章。
我目前的想法是有效地使用我的数据模型作为数据传输对象,使它们可序列化并让它们同时存在于客户端和服务器端。这似乎是一个合乎逻辑的步骤,因为这两种对象类型实际上只是属性 getter 和 setter 的集合,而中间的另一层似乎完全是矫枉过正。
显然,INotifyPropertyChanged 会在服务器端无法正常工作,因为没有要与之通信的 ViewModel,但只要我们小心地从服务层中的数据模型构造我们正确的域模型对象,而不是处理服务器端的数据模型我不认为这应该是一个大问题。
我在阅读中没有找到太多关于这种方法的信息,所以我想知道这是否是一个非常标准的事情,这是否只是假设是在多层环境中执行 MVVM 的事实上的方式?如果我对事物有完全错误的想法,那么对其他方法的想法也会受到赞赏。
java - 休眠对象到 DTO 的推土机映射
我尝试使用 Dozer 将我的域实体转换为 DTO 对象。所以,我想在我的 DTO 对象中将 PersistentList, PersistentBag, ... 从我的域实体转换为 ArrayList, ... 以避免惰性问题。
这是我的两个域实体的示例:
我的 DTO 对象是相同的,只是该类是 DTO 类型。因此,要将域转换为 DTO 对象,我使用以下推土机映射:
BagConverter 是一个推土机自定义转换器,这是它的代码:
所以,我得到一个包含角色的 PersistentBag 的用户对象。我在该对象上应用推土机映射器地图以获取 UserDTO 对象。我得到的结果是一个 UserDTO 对象,它有一个 Role 的 ArrayList,没有我希望的 RoleDTO 的 ArrayList。
我以为即使我使用自定义转换器,推土机也会转换我列表的内容。这不是正确的方法吗?如果不是,如何通过将持久性集合替换为经典 java 集合来将我的域实体转换为 dto 对象?
谢谢你的帮助。
西尔万。