Разработка для уменьшения избыточности кода - Java / WebServices - PullRequest
0 голосов
/ 15 июля 2010

Сценарий: Я работаю над проектом веб-сервисов. Он поддерживает SOAP и REST. Запрос и ответ SOAP обрабатываются XmlObjects. Архитектура REST использует простые POJO для запроса и ответа. У меня есть общий контроллер для обработки запросов от SOAP и REST. Этот контроллер понимает общий объект (объект запроса). И контроллер отправляет обратно Transfer Object. Перед контроллером у меня есть переводчик запросов для перевода объектов SOAP / POJO в общий объект запроса. А также переводчик ответов для преобразования объектов переноса в объекты представления SOAP / REST.

Проблема: У меня есть 2 переводчика запросов и ответов. Переводчики запросов и ответов SOAP / REST выглядят одинаково. Но они принимают другой объект в качестве входных данных. Похоже, у меня один и тот же код 2 раза.

Как избежать этой избыточности?

Решения, о которых я подумал: отображение бобов.

Есть ли что-нибудь более элегантное, чем это?

Ответы [ 2 ]

2 голосов
/ 15 июля 2010

Я полагаю, что ваши API-интерфейсы "REST" и "SOAP" должны выполнять одно и то же и поэтому являются довольно параллельными.Вы должны (пере) прочитать описание Роя Филдинга архитектурного подхода REST, а затем решить, действительно ли эти API-интерфейсы RESTful в очень точном определении этого термина.Если они равны и RESTful, просто отбросьте API-интерфейсы SOAP: SOAP сложнее в использовании, не использует HTTP-кэши и ничего не добавляет к вашим REST API.

Если они оба не -RESTful (т. Е. Они имеют разновидность удаленного вызова процедуры и API REST просто выполняют операции RPC с использованием HTTP и XML), то при условии, что выневозможно преобразовать их в архитектурный стиль REST, вы можете, по крайней мере, выделить XML-отображения POJO <==>, используя такую ​​библиотеку, как XStream.

0 голосов
/ 15 июля 2010

Вы правы. Если только XML-запрос / ответ отличается только макетом и данные одинаковы, вы можете сделать XSLT для них обоих, которые преобразуют его в правильный XML согласно вашему POJO.

Тогда вы можете использовать преобразование Castor для XML в объект POJO, верно? И вы получите нужный вам объект. Но вы должны сделать объект общим для кода, верно?

Что я имею в виду, используйте общий объект для вашей логики и используйте некоторую другую логику, чтобы получить этот объект из ваших объектов Request / Response для SOAP / REST. Поскольку данные, которые вы отправляете, будут одинаковыми в обоих видах методов, вам просто нужно обработать преобразование объекта в объект. Это можно сделать напрямую ИЛИ используя Object в XML и XML в object.depends, которые вы предпочитаете.

надеюсь, это поможет.

Parth.

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