gpt4 book ai didi

.net - 将 DTO 映射到域对象的最佳实践?

转载 作者:行者123 更新时间:2023-12-03 05:19:38 26 4
gpt4 key购买 nike

我看到了很多与映射相关的问题DTOs到域对象,但我觉得他们没有回答我的问题。我以前使用过很多方法并有自己的看法,但我正在寻找更具体的方法。

情况:

我们有很多域对象。我们使用 CSLA 模型,因此我们的域对象可能非常复杂,并且它们包含自己的数据访问。您不想通过网络传递这些内容。我们将编写一些新服务,这些服务将以多种格式(.Net、JSON 等)返回数据。出于这个(以及其他原因),我们还创建了一个精益的数据传输对象来在网络上传递。

我的问题是:DTO和Domain对象应该如何连接?

我的第一 react 是使用Fowler, DTO pattern-type solution 。我已经看过很多次这样的做法,我感觉很对。域对象不包含对 DTO 的引用。调用外部实体(“映射器”或“汇编器”)来从域对象创建 DTO。通常有一个 ORM在域对象方面。这样做的缺点是“映射器”对于任何实际情况都会变得极其复杂并且可能非常脆弱。

提出的另一个想法是域对象“包含”DTO,因为它只是一个精简的数据对象。域对象属性将在内部引用 DTO 属性,并且可以根据需要返回 DTO。我看不出这有什么问题,但感觉不对。我看过一些文章,人们使用 NHibernate似乎使用了这种方法。

还有其他方法吗?上述方法之一值得使用吗?如果是或不是,为什么?

最佳答案

当您仅支持单个映射时,在域和 DTO 之间使用映射器的好处并不明显,但随着映射数量的增加,将该代码与域隔离有助于使域更简单和更瘦。您不会因为大量额外的权重而使您的域变得困惑。

就我个人而言,我尝试将映射保留在我的域实体之外,并将责任放在我所说的“管理器/服务层”中。这是位于应用程序和存储库之间的层,提供业务逻辑,例如工作流协调(如果您修改 A,您可能还必须修改 B,以便服务 A 能够与服务 B 配合使用)。

如果我有很多可能的结束格式,我可能会考虑创建一个可使用访问者模式的可插入格式化程序,例如转换我的实体,但我还没有发现需要如此复杂的东西。

关于.net - 将 DTO 映射到域对象的最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/678217/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com