Mapping 将不兼容属性从DTO映射到实体
我正在重构一个web应用程序,以确保我的实体始终以有效状态初始化。这意味着我正在使用DTO进行用户输入,并在验证后将这些DTO映射到我的实体 但是,DTO的某些属性不能直接映射到实体的属性。如果DTO包含base64编码的图像,并且实体需要图像文件的URL,则我需要将base64保存到映射器中的文件中,以便将该文件的URL分配给实体Mapping 将不兼容属性从DTO映射到实体,mapping,entity,domain-driven-design,dto,Mapping,Entity,Domain Driven Design,Dto,我正在重构一个web应用程序,以确保我的实体始终以有效状态初始化。这意味着我正在使用DTO进行用户输入,并在验证后将这些DTO映射到我的实体 但是,DTO的某些属性不能直接映射到实体的属性。如果DTO包含base64编码的图像,并且实体需要图像文件的URL,则我需要将base64保存到映射器中的文件中,以便将该文件的URL分配给实体 可能只是我,但感觉这种东西不属于DTO到实体映射器。这可能是个坏主意,有什么原因吗?这种映射通常使用什么策略?在我看来,在您的案例中,您没有从DTOs到实体的简单映
可能只是我,但感觉这种东西不属于DTO到实体映射器。这可能是个坏主意,有什么原因吗?这种映射通常使用什么策略?在我看来,在您的案例中,您没有从DTOs到实体的简单映射过程,因为在这个过程中有应用程序逻辑。将图像存储在某个位置并获取该图像的URL/路径是特定于应用程序的逻辑,因此您可能需要为其提供服务 应用程序通常具有某种类型的任务或操作,需要执行这些任务并定义应用程序的流程。定义此流的一种方法是使用命令,并将DTO附加到这些命令 例如,假设您有一个注册过程,因此用户必须输入一些数据,您需要创建一个帐户实体 对于web应用程序,前端必须收集用户信息,创建并向后端发送命令。在这种情况下,您将使用RegisterUserCommand。此命令将包含一个UserInfo DTO属性,或者将包含用户信息的属性。例如:
RegisterUserCommand {
string UserName
string FirstName;
string LastName;
Image Avatar;
}
接下来需要的是一个RegisterUserCommandService或(RegisterUserCommandHandler,具体取决于您的喜好和使用的术语),它将处理命令。您还需要一个存储提供商,该提供商将提供存储和检索图像的服务操作(可以在文件系统、Amazon S3、Dropbox等上),并为您提供链接。下面是一个示例伪代码
RegisterUserCommandService {
Process(RegisterUserCommand cmd) {
avatarLink = storageProvider.Store(cmd.Avatar);
account = new Account(cmd.UserName, ...., avatarLink);
accountRepository.Save(account);
}
如果你告诉我更多关于你的应用程序,我可以为你的具体案例提供一个例子
以下是您可以查看的一些资源: