C# 将一个DTO转换为另一个DTO的设计模式

C# 将一个DTO转换为另一个DTO的设计模式,c#,design-patterns,architecture,refactoring,software-design,C#,Design Patterns,Architecture,Refactoring,Software Design,我是设计模式的新手,想知道将一个DTO转换成另一个DTO的最佳方式是什么 为了最大程度地提高性能我使用存储过程连接多个表(例如,条目,定义,示例,词汇表),并返回超过40列的完整数据集-重新创建复合DTO需要这些数据 因此,我最终拥有一个单独的DTO(GetEntryDbDto),其中包含40多个字段,我手动将响应从DB映射到它 第二个DTO是结构化的,因此它具有嵌套集合 现在,我将一个DTO转换成另一个DTO的代码保存在工厂中 public class EntryFactory { p

我是设计模式的新手,想知道将一个DTO转换成另一个DTO的最佳方式是什么

为了最大程度地提高性能我使用存储过程连接多个表(例如,
条目
定义
示例
词汇表
),并返回超过40列的完整数据集-重新创建复合DTO需要这些数据

因此,我最终拥有一个单独的DTO(
GetEntryDbDto
),其中包含40多个字段,我手动将响应从DB映射到它

第二个DTO是结构化的,因此它具有嵌套集合

现在,我将一个DTO转换成另一个DTO的代码保存在工厂中

public class EntryFactory
{
    public static EntryDto Get(DbDataReader reader)
    {
        List<GetEntryDbDto> dbDtos = GetEntryDbDtoFactory.Get(reader);
        ...

        return entryDto;
    }
    ...
公共类入口工厂
{
要获取的公共静态入口(DbDataReader)
{
List dbDtos=GetEntryDBDTOFATORY.Get(读卡器);
...
返回入口;
}
...
对象结构如下:

EntryDto
包含
定义的集合
-
DefinitionDto[]

每个
DefinitionDto
都有
Examples
collection-
ExampleDto[]


我没有为上述两个类引入任何接口,因为它们不共享公共属性


是否有更好的方法使用不同的设计模式进行重构?

有一些工具可以使编码更容易一些,例如Automapper,但它们可能存在性能问题。通常,从数据模型映射到域模型的模式是正确的方法。让存储过程扁平化n将数据放在一行中似乎可以提供最佳性能。发出几个单独的查询以获取片段并将它们组合成代码将受到查询提交开销的影响。

有一些工具可以使编码更容易一些,例如Automapper,但它们可能会有性能问题从数据模型到域模型的映射模式是正确的方法。让存储过程将数据平铺到一行似乎可以提供最佳性能。发出几个单独的查询以获取片段并将其组装到代码中会带来查询提交开销。

如果E>强> >你的性能,而不是你为什么在C++中进行代码的选择?明智的做法是C++。否则,除了手动映射之外,你没有其他选项。没有任何一种框架,如上面的代码> AutoPuffer-<代码>,快到足以超越手动解决方案。


唯一值得一提的是泛型在TutoDest:MultBase< /C> >例如

< P>如果你关心你的性能,比你为什么在C语言中的代码那么强,那么明智的做法是C++,否则,你除了现在的手动映射之外别无选择。没有任何框架,比如上面的代码> AutoPuffer-<代码>,足够快地超过手动解决方案。


唯一值得一提的是泛型where TOutput:ModelBase例如。

在我最近的一篇文章中,我详细介绍了该文章中的
DTO结构
——我使用了方法2在我最近的一篇文章中,我详细介绍了该文章中的
DTO结构
——我使用了方法2