这个PowerBuilder统计信息生成代码是否适合面向对象?

时间:2013-01-05 22:21:40

标签: java ooad easerver

我正在努力重构用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方式做到这一点?

1 个答案:

答案 0 :(得分:5)

嗯,这很简单。请勿从此课程打印统计信息。 返回他们。让调用者决定如何显示返回的统计数据。

现在您可以获取统计信息,您可以创建OneLinerStatsPrinterDetailedStatsPrinterHtmlStatsFormatter或任何您想要的内容。