Вопрос о дизайне Java: хороший ли это дизайн?

Я пишу клиент 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.Найти соответствующего исполнителя на основе элемента «имя» 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

person bhh    schedule 05.04.2011    source источник


Ответы (3)


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

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

person Uri    schedule 05.04.2011
comment
Спасибо за ваше предложение. Я искал некоторые «командные рамки», но пока не нашел хороших примеров :( - person bhh; 05.04.2011
comment
@bhh: Почти в каждой компании, в которой я был, есть очень хорошая и проверенная реализация команды patter. Я уверен, что есть также альтернативы с открытым исходным кодом (хотя это может заслуживать отдельного вопроса о стеке). Но определенно есть готовые решения для перехода от POJO к таким форматам, как XML или JSON. - person Uri; 06.04.2011

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

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

person Sean Patrick Floyd    schedule 05.04.2011
comment
JAXB — это стандарт (JSR-222) для сопоставления объектов с XML: bdoughan.blogspot.com/2010/10/. XStream — это технология сериализации: xstream.codehaus.org/faq.html#Uses - person bdoughan; 05.04.2011

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

person Aaron Digulla    schedule 05.04.2011
comment
Проверьте: bdoughan.blogspot.com/2010 /10/ - person bdoughan; 05.04.2011
comment
@ Блейз: +1. Я обычно с подозрением отношусь к стандартам Java, но, поскольку вы сравниваете Simple и JAXB бок о бок, я попробую его для своего следующего проекта. - person Aaron Digulla; 08.04.2011