Вопрос дизайна Java: это хороший дизайн? - PullRequest
1 голос
/ 05 апреля 2011

Я пишу Java-клиент, который связывается с удаленным сервером через HTTP / XML.

Сервер отправляет команды моему клиенту в формате XML, например:

<command>
<name>C1</name>
<param>
.....
</param>
</command>

Существует около 10 или более различных команд (C1, C2, ...), каждая из которых имеет свой набор параметров.

Мой клиент обработает команду, затем сервер ответа с результатом выполнения выглядит следующим образом:

<C1>
<code>200</code>
<desc>xxx</desc>
</C1>

Я только знаком с C, но очень плохо знаком с Java и ООП,

Итак, мой вопрос прост: как изящно спроектировать следующую логику ООП?

1. Преобразуйте строку XML в объект XML
2. Определить исполнителя, отвечающего за кодирование, на основе элемента name в XML и проанализировать параметры.
3. Выполните команду вместе с параметрами
4. преобразовать результат в объект XML
5. Преобразуйте объект XML в строку XML

Это хороший дизайн?

1. Определите абстрактный базовый класс и множество подклассов для каждой команды, включая следующий метод:

void parseCommand(MyXMLObject obj);
void execute();
MyXMLObject generateResult();

или просто простой метод:

MyXMLObject execute(MyXMLObject obj);

и эти поля:

String mCommandName;
int mRetCode;
String mRetDesc;

2. Затем определите фабричный класс для возврата экземпляра одного из подклассов на основе объекта XML.

3. Код логической части:

MyXMLObject obj = MyXMLUtil.getXMLObject(XMLString);
MyCommand command = MyCommandFactory.getCommand(obj);
MyXMLObject retObj = command.execute();
String retStr = MyXMLUtil.getString(retObj);
...//network operation

Ответы [ 3 ]

2 голосов
/ 05 апреля 2011

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

Большая проблема в том, что это во многом переосмысление колеса. Существует множество платформ, которые обрабатывают отображение из POJO (объектов Java) в структурированные текстовые форматы (такие как XML или JSON). Кроме того, существует много общих реализаций командных сред. Возможно, стоит изучить доступные варианты, прежде чем предоставить собственную реализацию.

0 голосов
/ 05 апреля 2011

Как говорили другие, дизайн выглядит довольно хорошо.Чтобы упростить свою жизнь, вам нужно взглянуть на Простой XML , чтобы проанализировать XML -> Java и создать XML из объектов Java.

0 голосов
/ 05 апреля 2011

В принципе да, так все и работает.Но я думаю, что вы должны разделить различные проблемы.

По сути, я бы сказал, что у вас есть сервисный уровень, который должен выполнять команды и возвращать результаты.Этот уровень не должен ничего знать о XML, поэтому я разработал бы простую объектную модель Java, а затем беспокоился о ее привязке к вашей инфраструктуре XML, возможно, с использованием существующей технологии отображения XML, такой как XStream.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...