低耦合的复杂对象创建

时间:2017-02-02 08:45:24

标签: java spring

设计具有叶节点所需外部依赖关系的复杂对象创建问题(Java,Spring)。当你有一个复杂的对象并且你需要一些服务来创建对象图的某些部分时,构建这样的对象会有什么好的方法呢?

给定以下用于构建某种报告的功能和类结构,其中LineItem.description需要通过Purchase.key解析(您要显示的常规本地化消息)。

class ReportService {

    Report buildReport(Request request, Set<Purchase> purchases) {

        ... build and return Report with logic based on request and purchases ...

    }

}

class Report {
    Header header
    ReportBody body

}

class ReportBody {
    List<LineItem> items
}

class LineItem {
    // Locallized escription
    String description

}

class Purchase {
    String type
    String key
}


// Service used to resolve the message. 
class MessageSource {
    // Return locallized message text found with the given key
    String message(String key, Locale locale) { }
}

实施报告构建的优雅方式是什么?

我想到的其他选择:

  • 在ReportService(或某个构建器/工厂类)中构造整个对象,并将MessageSource注入ReportService。这种方法的问题在于,ReportService与Report及其内部的整个对象图具有高度耦合,并且需要构建子对象所需的所有服务。
  • 让每一类报告对其子女负责。所以ReportService只会: 返回新报告(请求,购买) 这似乎是好方法,否则父对象只知道它的直接子节点,但我们无法解析LineItem描述。我们需要将MessageSource(以及可能的其他多个服务)传递给POJO。直接向POJO注入服务听起来并不合理。

那你将如何实现呢?还要考虑让它容易进行单元测试。

0 个答案:

没有答案