Является ли этот код генерации статистики PowerBuilder соответствующим образом объектно-ориентированным?

Я работаю над рефакторингом существующего приложения, написанного на PowerBuilder и Java и работающего на Sybase EA Server (Jaguar). Я строю небольшую структуру, чтобы обернуть вокруг функции API Jaguar, доступные в EA Server. Одним из классов является получение статистики времени выполнения от EA Server с использованием 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. Он принимает тип объекта, имя объекта и ключи статистики, которую мы хотим. Этот метод возвращает двойной массив. Я продолжаю печатать заголовок и данные в форматированном виде.

Программа работает, но я хотел бы получить мнение экспертов по аспекту ОО дизайна. Во-первых, я хочу иметь возможность настроить printStats иметь возможность печатать в разных форматах (например, полный отчет или однострочник). Помимо этого, я также думаю показать статистику на веб-странице или экране PowerBuilder, и в этом случае printStats может даже не иметь отношения к делу. Как бы вы сделали это по-настоящему ОО?

1 ответ

Решение

Ну, это довольно просто. Не печатайте статистику из этого класса. Верните их. И пусть звонящий решит, как должна отображаться возвращаемая статистика.

Теперь, когда вы можете получить статистику, вы можете создать OneLinerStatsPrinter, DetailedStatsPrinter, HtmlStatsFormatterили что хочешь.

Другие вопросы по тегам