Java 低耦合的复杂对象创建
叶节点需要外部依赖的复杂对象创建的设计问题(Java、Spring)。当您有一个复杂的对象,并且需要一些服务来创建对象图的某些部分时,有什么好的方法来构建这样的对象 给定以下用于生成某种报告的功能和类结构,其中LineItem.description需要由Purchase.key(要显示的正常本地化消息)解析Java 低耦合的复杂对象创建,java,spring,Java,Spring,叶节点需要外部依赖的复杂对象创建的设计问题(Java、Spring)。当您有一个复杂的对象,并且需要一些服务来创建对象图的某些部分时,有什么好的方法来构建这样的对象 给定以下用于生成某种报告的功能和类结构,其中LineItem.description需要由Purchase.key(要显示的正常本地化消息)解析 类报告服务{ 报告构建报告(请求、设置购买){ …根据请求和购买生成并返回逻辑报告。。。 } } 课堂报告{ 收割台 报告主体 } 类报告体{ 清单项目 } 类别行项目{ //局部化描述
类报告服务{
报告构建报告(请求、设置购买){
…根据请求和购买生成并返回逻辑报告。。。
}
}
课堂报告{
收割台
报告主体
}
类报告体{
清单项目
}
类别行项目{
//局部化描述
字符串描述
}
班级购买{
字符串类型
串键
}
//用于解析消息的服务。
类消息源{
//返回使用给定键找到的本地化消息文本
字符串消息(字符串键,区域设置){}
}
实施报告结构的优雅方式是什么
我想到的备选方案是:
- 在ReportService(或某些生成器/工厂类)中构造整个对象,并将MessageSource注入ReportService。这种方法的问题是ReportService与报表的整个对象图及其内部结构高度耦合,需要构建子对象所需的所有服务
- 让每个班级的报告对其孩子负责。所以ReportService只会: 返回新报告(请求、购买) 否则,这似乎是一种很好的方法,因为父对象只知道其直接子对象,但我们无法解析LineItem描述。我们需要将MessageSource(以及可能的多个其他服务)传递给POJO。直接向POJO注入服务听起来不合理
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) { }
}