【问题标题】:Merging Multiple Objects to Multiple Formats将多个对象合并为多种格式
【发布时间】:2015-04-30 12:02:40
【问题描述】:

我正在寻找适用于具有多种 DataObjects 和多种输出格式 (ReportGenerators) 的情况的最佳设计。

当前的设置是这样的:有一个Formattable 接口,它具有ReportGenerator 使用的各种方法。每个DataObjectDataObject 可以是几个不同的不相关类中的任何一个)都实现了Formattable——即,它知道如何为报告组织其特定数据,并且ReportGenerator 只是从Formattable 对象它访问字符串数组并将它们美化。

1) 所以这是我的第一个问题:这是可取的吗?因为结果是为报告组织数据的过程散布在所有DataObjects 中。另一种方法是使用一大堆instanceof 检查要格式化的DataObject 类型的中间类,但至少它们都在一个地方。

2) 然后我的新问题是我需要引入一个辅助ReportGenerator,它需要DataObject 数据组织略有不同。在当前设置中,我可以在 Formattable 方法上引入一个参数,以指定 DataObject 应该格式化为哪种类型的 ReportGenerator,但同样,不确定这是否可取。

【问题讨论】:

  • 几个小问题。一个数据对象是否代表一种报告?假设 SalesDataObject 代表销售报告,SalaryDataObject 代表付款报告?销售报告本身可以有不同的格式,或者一种报告的格式是不变的吗?
  • 如果不同的 Formattable.format 方法之间几乎没有重叠,这似乎很好。如果您想将所有内容集中在一个地方,我建议您使用访问者模式而不是 instanceof 检查。
  • @bot 第一个问题,是的;在单个 DataObject 层次结构中,报告并没有真正变化,尽管层次结构中的每个子类的格式会略有不同。报告在不同的 DataObjects 之间确实有所不同。对于第二个问题,销售报告本身可以有不同的格式,是的。
  • 好的,这给我带来了一些其他问题。当您说 DataObject 需要知道如何为特定报表组织其数据时,您究竟是什么意思?这与 ReportGenerator 所做的有什么不同?组织/格式化不是一回事吗?

标签: java inheritance design-patterns


【解决方案1】:

让我们用高级指针来解决你的高级问题:

DataObject 可以是几个不同的不相关类中的任何一个) 实现 Formattable - 即,它知道如何组织其特定的 报告数据

你说 DataObject 将组织数据然后你说:

ReportGenerator 只是简单地从它提供 Formattable 对象 访问字符串数组并美化它们

格式化和组织之间真的有区别吗?在某种程度上,组织数据似乎是格式化数据的初步步骤,理想情况下应将其视为单一职责,而不是将其视为多种职责。将其转换为代码意味着单个类应该组织/格式化(这些术语似乎是可互换的)数据。 ReportGenerator 将是这方面的主要候选人。

然后我的新问题是我需要引入一个辅助 ReportGenerator 需要稍微组织的 DataObject 数据 不一样

如果 ReportGenerator 负责组织/格式化数据,这个问题也应该得到解决。

总之,将数据组织从 DataObjects 转移到 ReportGenerator 是一个好主意。

【讨论】:

  • 好吧,结合@Adrian Leonhard 对访问者模式的建议,我可以让各种 ReportGenerators 实现 DataObjectVisitors?这有意义吗?
  • @redeveloper 如果不了解有关您的代码当前结构的更多详细信息,我将无法进一步评论。你能发布一些代码 sn-ps 来透视一下吗?或者如果你没有代码,你能不能为你提到的每个类想出一个骨架?
猜你喜欢
  • 1970-01-01
  • 2018-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-08
  • 1970-01-01
  • 2021-12-18
  • 2019-02-07
相关资源
最近更新 更多