将不兼容的属性从DTO映射到实体

时间:2019-03-27 19:29:31

标签: mapping entity domain-driven-design dto

我正在重构一个Web应用程序,以确保始终以有效状态初始化我的实体。这意味着我正在使用DTO进行用户输入,并在验证后将这些DTO映射到我的实体。

但是,DTO的某些属性不能直接映射到实体的属性。如果DTO包含base64编码的图像,并且该实体需要该图像文件的URL,则我需要将该base64保存到映射器中的文件,以便将该文件的URL分配给该实体。

可能只是我,但感觉这种东西不属于DTO到实体映射器的内部。有什么理由可能会导致一个坏主意吗?这种映射通常使用哪些策略?

1 个答案:

答案 0 :(得分:1)

在我看来,您没有从 DTO 实体的简单映射过程,因为您在此过程中具有应用程序逻辑。将图像存储在某个位置并获取该图像的URL /路径是应用程序特定的逻辑,因此您可能需要服务

应用程序通常具有执行和定义应用程序的流程所需的某种任务操作。定义此流程的一种方法是使用命令,并将 DTO的附加到这些命令

例如,假设您有一个注册过程,那么用户必须输入一些数据,并且您需要创建一个帐户实体。

对于Web应用程序,前端将必须收集用户信息并创建并向后端发送命令。在这种情况下,您将具有 RegisterUserCommand 。此命令将包含 UserInfo DTO 属性,或具有用户信息的属性。例如:

RegisterUserCommand {

   string UserName
   string FirstName;
   string LastName;
   Image Avatar;
}

您接下来需要做的是 RegisterUserCommandService 或( RegisterUserCommandHandler ,具体取决于您的口味和使用的术语),它将处理/处理 Command 。您还需要一个 StorageProvider ,该提供商将提供用于存储和检索图像的服务操作(可以在文件系统,Amazon S3,Dropbox等上),并为您提供链接。这是一个示例伪代码

RegisterUserCommandService {

  Process(RegisterUserCommand cmd) {

     avatarLink = storageProvider.Store(cmd.Avatar);

     account = new Account(cmd.UserName, ...., avatarLink);

     accountRepository.Save(account);
}

如果您告诉我有关您的申请的更多信息,我可以为您的具体案例提供示例。

以下是您可以检查的一些资源: