Является ли этот код генерации статистики 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
или что хочешь.