【发布时间】:2015-04-30 12:02:40
【问题描述】:
我正在寻找适用于具有多种 DataObjects 和多种输出格式 (ReportGenerators) 的情况的最佳设计。
当前的设置是这样的:有一个Formattable 接口,它具有ReportGenerator 使用的各种方法。每个DataObject(DataObject 可以是几个不同的不相关类中的任何一个)都实现了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