0

我正在重构一个用 PowerBuilder 和 Java 编写并在 Sybase EA Server (Jaguar) 上运行的现有应用程序。我正在构建一个小框架来包装 EA 服务器中可用的 Jaguar API 函数。其中一个类是使用该类从 EA 服务器获取运行时统计信息Monitoring

无需过多详细介绍,Monitoring是 EA Server API 中的一个类,它提供 Jaguar Runtime Monitoring 统计信息(实际类在 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 的调用。它需要实体的类型、实体的名称以及我们想要的统计信息的键。此方法返回一个双精度数组。我继续在格式化输出中打印标题和数据。

该程序有效,但我想获得专家对 OO 设计方面的意见。一方面,我希望能够进行定制printStats,以便能够以不同的格式打印(例如,完整的报告或单行)。除此之外,我还考虑在网页或 PowerBuilder 屏幕上显示统计信息,在这种情况下 printStats 甚至可能不相关。您将如何以真正的 OO 方式做到这一点?

4

1 回答 1

5

嗯,这很简单。不要打印此类的统计信息。归还他们。并让调用者决定如何显示返回的统计信息。

现在您可以获得统计信息,您可以创建 a OneLinerStatsPrinter、 a DetailedStatsPrinter、 anHtmlStatsFormatter或任何您想要的。

于 2013-01-05T22:27:10.180 回答