如何正确组织应用程序中的模型以及各层的交互?

问题描述 投票:0回答:1

我有一个领域驱动设计应用程序,它链接来自不同社交网络的用户配置文件。例如,假设是 Facebook 和 Twitter。 API 返回 User 对象。这些 User 对象是自定义 RegisteredUser 所必需的,也就是说,在某些方法中,同时使用 Twitter.User 和 Facebook.User。

我使用存储库服务模式,不使用 EF。决定在域中创建 TwitterUser 和 FacebookUser。此外,创建 TwitterUserDto 和 FacebookUserDto 是为了与数据库通信,因为 DTO 的结构略有不同,以便正确工作和维护数据库结构。

例如:

public class TwitterUser
{
    public long Id { get; set; }
    public string FirstName { get; set; }
    public string Username { get; set; }
}
public class TwitterUserDto
{
    public required long Id { get; set; }
    public required string FirstName { get; set; }
    public required string Username { get; set; }
    public required DateTime AddedAt { get; set; }
}

问题是库方法需要自己的User(Facebook.User、Twitter.User),需要转换对象。服务使用域中定义的对象(TwitterUser、FacebookUser),存储库使用 DTO(TwitterUserDto、FacebookUserDto)。结果,即使是简单的代码也会变得一团糟。

有必要使用DTO吗?如何正确组织项目中的模型以及应用程序各层的交互?

c# asp.net .net design-patterns
1个回答
0
投票

首先,你可以尝试使用 Automapper 将映射分离到另一个类中。

其次,Jimmy Bogard 说“将类放在靠近实际使用的地方。”。它符合 这个关于 DDD 的伟大答案

将 DTO 定义为值来源所在的图层。

© www.soinside.com 2019 - 2024. All rights reserved.