【问题标题】:Best practice of converting obejcts转换对象的最佳实践
【发布时间】:2021-01-18 19:09:08
【问题描述】:

所以,我开始了一个小小的宠物项目,只是为了有一些工作要做,但自从上次我从事商业工作以来,我学到了一些关于模式等的东西。因此,当我偶然发现必须将简单的 DTO 转换为在程序中保持其值的简单模型时,我开始想知道 - 转换它的最佳实践是什么?

为了 calrify - 我有这样的东西:

public class LoggedInDTO
{
   public String Token;
   public String Name;
}

我希望将其转换为LoggedInUser,如下所示:

public class LoggedInUser
{
   private String _token;
   private String _name;
}

(当然登录用户会比这个大一点,重点是除了转接以外不要用DTO,还要有更专业的类) 现在,如何正确地将一种转换为另一种以实现最佳清晰度和/或可测试性? 我想只是将 DTO 传递给构造函数,然后只是复制值,但我担心它会“紧密耦合”,这是所有网站都在讲述的编程恐怖故事。从另一面看,一个是另一个的基础,为什么不呢?或者也许转换器可以将所有东西都放在一个地方?

最好的做法是什么?还是我想太多了,不应该关心这些?

【问题讨论】:

  • 如果一个是另一个的基类,为什么你有两次这些属性?
  • 也许base是错误的词,例子太简单了。如果我有一些 DTO 以原始形式从服务器获取信息(因为 API 以这种方式或 smth 工作)并且在应用程序中我会使用不同的类,它将这些值保存在特定类型中,并对值进行大量调整(即我需要),这将是更具代表性的例子。
  • 好的,然后看看这样的帖子:Conversion of DTO to entity and vice-versa。然而,他们并不是在谈论最佳实践。我认为你不应该太在意这样的事情。只要 DTO 保持原样,构造函数的想法就很好。当问题是关于将某些东西转换为自身的另一种形式时,它不是“紧密耦合”的。
  • 有像 Dozer 这样的复杂工具,可以将复杂的 Java 数据结构从一个类映射到另一个类。这是一个相当普遍的问题,我怀疑,没有一个完美的解决方案。就个人而言,我不会太担心在显式代码中进行映射,除非类非常复杂,或者它们很多。

标签: java type-conversion dto


【解决方案1】:

LoggedInDTO:

public class LoggedInDTO
{
    public String Token;
    public String Name;

    public LoggedInUser toLoggedInUser() {
        return new LoggedInUser(Token, Name);
    }
}

登录用户:

public class LoggedInUser {

    public LoggedInUser(String token, String name) {
        _token = token;
        _name = name;
    }

    private String _token;
    private String _name;
}

例子:

public static void main(String[] args) {
        LoggedInDTO loggedInDTO = new LoggedInDTO();
        loggedInDTO.Name = "12eq";
        loggedInDTO.Token = "123234";

        LoggedInUser loggedInUser = loggedInDTO.toLoggedInUser();
}

【讨论】:

  • 这与 OP 在他们的帖子中已经提到的非常相似。您没有回答关于最佳实践的实际问题。仅仅显示一些代码并不能解释任何事情。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-13
  • 1970-01-01
  • 2011-07-12
  • 2011-12-27
  • 2014-01-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多