2010-02-24 3 views
0

Хотелось бы узнать, что вы думаете о дизайне этой проблемы. Мне нужно написать webservice, чтобы пользователь мог изменять словари в базе данных.пару вопросов относительно дизайна

Я получил XML-схему, которая выглядит следующим образом (это упрощенно):

AdminService, который является корнем и имеет выбор с:

  • AddCode [@DictionaryName, @code, @Description]
  • RemoveCode [@DictionaryName, @code, @Description]
  • DeleteCode (@dictionaryName, @code, @Description]

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

В начале входящий XML преобразуется в объект Java с использованием Jaxb, они передают мне этот объект Java < - он был реализован таким образом, и я не могу его изменить.

Вот моя часть:

У меня есть своего рода маршрутизатор, который содержит список зарегистрированных услуг (я использую Java, Spring, Hibernate). Внутри этого маршрутизатора существует метод, который проверяет, содержит ли объект, созданный из xml, объект AddCode Obj или RemoveCode Obj. На основании и во имя словаря он использует один из зарегистрированных услуг для обработки запроса, так, например, есть услуга, как:

class Add[DictionaryName]CodeService implements Service { 
    execute(ObjectfromXML); 
} 

, который используется для создания коды, когда запрос пришел с CreateCode элементом. То, что возвращается этой службой (java obj или xml-ответ), теперь недоступно.

Проблема заключается в том, что при использовании подхода, мне нужно будет создать 3-х классов, как:

Добавить [DictionaryName] CodeService, Удалить [DictionaryName] CodeService, Удалить [DictionaryName] CodeService.

при добавлении нового словаря.

Это также означает, что мне нужно будет каждый раз добавлять эти сервисы в Router каждый раз, и размер маршрутизатора будет увеличиваться. Мне интересно, добавить ли я набор классов и сделать это таким образом, как показано ниже, или использовать другой подход.

маршрутизатор будет содержать только три услуги AddCodeService, RemoveCodeService, DeleteCodeService и AddService будет содержать все услуги, которые используются для добавления специальных кодов, т.е. добавить [DictionaryName1] Услуги, добавить [DictionaryName2] Услуги и т.д.

Любые идеи ? У меня также были проблемы с классами именования ... Я пытался использовать DictionaryService вместо Router и Добавить [DictionaryName] CodeAction вместо Add [DictionaryName] CodeService, но Service & Маршрутизатор звучит лучше - любые комментарии об этом?

+0

Рамирес, попробуйте изменить название вопроса, чтобы быть более наглядным. –

+0

есть ли способ его изменить? Я не вижу вариант – Ramires

+0

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

ответ

0

Вам нужно будет предоставить дополнительную информацию. Из приведенной информации я не понимаю, зачем вам нужны отдельные классы для каждого Словаря.Если логика для каждого словаря различна, у меня будет что-то вроде «DictionaryService» для словаря, который обрабатывает все разные методы add/delete/remove. Тогда вы можете иметь реестр (карту) для поиска службы, которая будет использоваться для конкретного Словаря.