我正在努力重构用PowerBuilder和Java编写的现有应用程序,该应用程序在Sybase EA Server(Jaguar)上运行。我正在构建一个小框架来包装EA Server中可用的Jaguar API函数。其中一个类是使用Monitoring
类从EA Server获取运行时统计信息。
在没有详细介绍的情况下,Monitoring
是EA Server API中的一个类,它提供了Jaguar运行时监控统计信息(实际类是C ++; EA Server为Java提供了这些包装,因此可以访问它们通过CORBA)。
以下是我班级的简化版。 (我创建了一个超类,我继承了它来获取组件,连接缓存,HTTP等的统计信息。)
public class JagMonCompStats {
...
public void dumpStats(String type, String entity) {
private String type = "Component";
private String entity = "web_business_rules";
private String[] header = {"Active", "Pooled", "invoke"};
// This has a lot more keys, simplified for this discussion
private static short[] compKeys = {
(short) (MONITOR_COMPONENT_ACTIVE.value),
(short) (MONITOR_COMPONENT_POOLED.value),
(short) (MONITOR_COMPONENT_INVOKE.value)
};
private double[] data = null;
...
/* Call to Jaguar API */
Monitoring jm = MonitoringHelper.narrow(session.create("Jaguar/Monitoring"));
data = jm.monitor(type, entity, keys);
...
printStats(entity, header, data);
...
}
protected void printStats(String entityName, String[] header, double[] data) {
/* print the header and print data in a formatted way */
}
}
行data = jm.monitor
是对Jaguar API的调用。它采用实体的类型,实体的名称以及我们想要的统计数据的键。此方法返回一个double数组。我继续在格式化的输出中打印标题和数据。
该计划有效,但我想获得专家对OO设计方面的意见。首先,我希望能够自定义printStats
以便能够以不同的格式打印(例如,完整的报告或单行内容)。除此之外,我还想在网页或PowerBuilder屏幕上显示统计数据,在这种情况下,printStats可能甚至不相关。你会如何以真实的OO方式做到这一点?
答案 0 :(得分:5)
嗯,这很简单。请勿从此课程打印统计信息。 返回他们。让调用者决定如何显示返回的统计数据。
现在您可以获取统计信息,您可以创建OneLinerStatsPrinter
,DetailedStatsPrinter
,HtmlStatsFormatter
或任何您想要的内容。