【问题标题】:Design pattern for creating a pojo elegantly优雅创建pojo的设计模式
【发布时间】:2019-02-07 09:49:48
【问题描述】:

当我们尝试迁移到新系统时,我必须创建一个层,根据某些设置从三个不同的来源提取数据,并且我们仍然希望在切换之前保持旧流程。

假设我们需要获得一个包含次要重型 POJO 的整合 POJO。

class X { 
   Y1 obj1;
   Y2 obj2;
   Y2 obj3;
...
}

我已经制作了一个可以调用下游服务并引入数据的层。我想要的是 Y1 和 Y2 和 Y3 中的每一个都有自己的填充器,它们可以由来自该层调用的不同服务的不同类型的 POJO 构建。有没有一种优雅的方法可以做到这一点,以便以后我只需要添加代码。另外,我想尽可能地遵守 SOLID 原则。

我想到的一种方法是为每种类型的 Y 制定一个策略模式,我们根据服务及其传递的 pojo 选择要转换的策略。

但这会导致 X 中每个新的复杂 Y 的类繁荣,我将不得不编写多个策略,这基本上是一个简单的事情的很多类。

【问题讨论】:

  • 我只会得到obj1obj2obj3,然后在最后创建一个完整的X,而不必绕过一个信息不完整的对象。跨度>
  • 服务层是抽象的,它完成了所有的工作,所以我们不必担心传递不完整的 X
  • 我认为您正在寻找的是装饰模式。
  • 嗨@MukulAnand:你能解决上述问题吗?即使我有相同的要求,您能否分享使用的设计模式

标签: java design-patterns dto


【解决方案1】:

使用Dependency Injection。因此,对于您的类,让构造函数被赋予obj1obj2obj3 以供使用,而不是让它自己创建这些对象:

class X { 
   private final Y1 obj1;
   private final Y2 obj2;
   private final Y2 obj3;

   X(Y1 obj1, Y2 obj2, Y2 obj3)
   {
      this.obj1 = obj1;
      this.obj2 = obj2;
      this.obj3 = obj3;
   }
...
}

如果Y1Y2interfaces or abstract base classes,这会更好。

【讨论】:

  • 我不是在寻找如何在 X 中注入任何类 Yi 对象的准备好的值。而是如何使每个 Yi 从我在调用服务后返回的 POJO 中填充。 (我可以为相关数据调用多个服务),因此我需要为每个 Yi 制定多种策略,以便从我调用的上游服务中进行准备。
猜你喜欢
  • 2012-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多