Мне бы хотелось услышать, что вы думаете о дизайне этого выпуска. Я должен написать веб-сервис, чтобы позволить пользователю изменять словари в базе данных.
Я получил XML-схему, которая выглядит следующим образом (она упрощена):
AdminService, который является корневым и имеет выбор:
- AddCode [@DictionaryName, @Code, @Description]
- RemoveCode [@DictionaryName, @Code, @Description]
- DeleteCode (@dictionaryName, @Code, @Description]
Проблема в том, что для некоторых словарей нужно вставить более двух этих атрибутов - иногда они содержат дополнительный код, который будет жестко закодирован (это сложнее, но я упростил его ради этого вопроса, вообще говоря, код будет отличаться для каждого словаря). Вот что у меня есть:
Вначале входящий XML преобразуется в объект Java с помощью Jaxb, они передают мне этот объект Java <- он был реализован таким образом, и я не могу его изменить. </p>
Вот моя часть:
У меня есть своего рода роутер, который содержит список зарегистрированных сервисов (я использую Java, Spring, Hibernate). Внутри этого маршрутизатора есть метод, который проверяет, содержит ли объект, созданный из XML, AddCode Obj или RemoveCode Obj. На основе словаря и имени словаря он использует один из зарегистрированных сервисов для обработки запроса, поэтому, например, существует сервис типа:
class Add[DictionaryName]CodeService implements Service {
execute(ObjectfromXML);
}
, который используется для создания кода, когда запрос пришел с элементом CreateCode. То, что возвращается этим сервисом (java obj или xml response), находится вне области действия.
Проблема в том, что, используя подход, мне нужно будет создать 3 класса, например:
Добавить [DictionaryName] CodeService,
Удалить [DictionaryName] CodeService,
Удалить [DictionaryName] CodeService.
при добавлении нового словаря.
Это также означает, что мне нужно будет каждый раз добавлять эти 3 службы в маршрутизатор, и размер маршрутизатора будет увеличиваться. Мне интересно, должен ли я добавить набор классов и сделать это так, как показано ниже, или использовать другой подход.
Маршрутизатор будет содержать только 3 службы AddCodeService, RemoveCodeService, DeleteCodeService и AddService будут содержать все службы, которые используются для добавления определенных кодов, т. Е. Добавить службу [DictionaryName1], добавить службу [DictionaryName2] и т. Д.
Есть идеи? У меня также были проблемы с именованием классов ... Я пытался использовать DictionaryService вместо Router и добавить CodeAction [DictionaryName] вместо Add [DictionaryName] CodeService, но Service & Router звучит лучше - есть какие-нибудь комментарии по этому поводу?