将一个 DTO 转换为另一个 DTO 的设计模式
design pattern to convert one DTO into another
我是设计模式的新手,想知道将一个 DTO 转换为另一个 DTO 的最佳方法是什么。
为了最大程度地提高性能我使用了连接多个表的存储过程(例如entries
、definitions
、examples
, vocabularies
) 和 returns 超过 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;
}
...
对象结构如下:
EntryDto
包含 Definitions
- DefinitionDto[]
.
的集合
每个 DefinitionDto
有 Examples
个集合 - ExampleDto[]
.
我没有为上述两个 类 介绍任何接口,因为它们没有共同的属性。
是否有更好的方法使用不同的设计模式重构它?
有些工具可以使编码更容易一些,例如 Automapper,但它们可能会出现性能问题。一般来说,从数据模型到域模型的映射模式是正确的方法。让存储过程将数据扁平化到一行中似乎可以提供最佳性能。发出几个单独的查询来获取片段并将它们组装成代码会受到查询提交开销的影响。
如果您那么关心您的性能,那您为什么还要用 C# 编写代码呢?明智地接受它并做C ++。否则,除了现在的手动映射外,您别无选择。没有像上面提到的 Automapper
这样的框架速度快到可以超越手动解决方案。
唯一值得了解的是泛型。例如,您可能有类似 public abstract TOutput Map() where TOutput : ModelBase
的内容。
我是设计模式的新手,想知道将一个 DTO 转换为另一个 DTO 的最佳方法是什么。
为了最大程度地提高性能我使用了连接多个表的存储过程(例如entries
、definitions
、examples
, vocabularies
) 和 returns 超过 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;
}
...
对象结构如下:
EntryDto
包含 Definitions
- DefinitionDto[]
.
每个 DefinitionDto
有 Examples
个集合 - ExampleDto[]
.
我没有为上述两个 类 介绍任何接口,因为它们没有共同的属性。
是否有更好的方法使用不同的设计模式重构它?
有些工具可以使编码更容易一些,例如 Automapper,但它们可能会出现性能问题。一般来说,从数据模型到域模型的映射模式是正确的方法。让存储过程将数据扁平化到一行中似乎可以提供最佳性能。发出几个单独的查询来获取片段并将它们组装成代码会受到查询提交开销的影响。
如果您那么关心您的性能,那您为什么还要用 C# 编写代码呢?明智地接受它并做C ++。否则,除了现在的手动映射外,您别无选择。没有像上面提到的 Automapper
这样的框架速度快到可以超越手动解决方案。
唯一值得了解的是泛型。例如,您可能有类似 public abstract TOutput Map() where TOutput : ModelBase
的内容。