Классы передачи данных в SOA - PullRequest
0 голосов
/ 14 апреля 2011

Мое WebApplication вызывает методы WebService для выполнения операций CRUD над базой данных.

Все методы в WebService получают входные данные как классы запросов и возвращают выходные данные как классы ответов. например:

если я хочу получить таблицу Customer из таблицы Customer, то метод для использования в WebService:

CustomerResponse GetCustomer (запрос CustomerRequest)

CustomerRequest содержит свойства, такие как ID; который затем будет использоваться для получения клиента по этому идентификатору из БД.

CustomerResponse содержит все свойства, которые я хочу передать веб-приложению, такие как идентификатор, имя, адрес

Пока, так хорошо ...

если я хочу получить всех клиентов, мне нужно создать для этого 2 дополнительных класса, один из которых: CustomersRequest, а второй CustomersResponse. итого у меня 4 класса передачи данных:

CustomerRequest CustomerResponse CustomersRequest CustomersResponse

, где CustomersResponse имеет свойство List, которое содержит все объекты CustomerResponse.

это хороший подход, или это должно быть сделано в 2 классах, хотим ли мы коллекцию или отдельные объекты определенного класса?

потому что, если я буду продолжать это делать, каждая таблица в БД будет, по крайней мере, иметь 4 класса.

Ответы [ 2 ]

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

Полагаю, это некоторые рекомендации по разработке приложений SOA. Основой является поддержание вашего бизнеса отдельно от объектов, которые представляют бизнес, от объектов в контракте, предоставляемых услугами.

См. Шаблоны SOA Стандартизованный сервисный контракт и Параллельные контракты

EDIT
Правильный ответ: «зависит от контракта, который вы хотите выставить».

Полагаю, вы все равно должны определить два: <xs:complexType name="CustomersResponse"> <xs:sequence> <xs:element name="Customer" minOccurs="1" maxOccurs="unbounded" /> <!-- other fields --> </xs:sequence> </xs:complexType> <xs:complexType name="CustomerResponse"> <xs:sequence> <xs:element name="Customer" minOccurs="1" maxOccurs="1" /> <!-- other fields --> </xs:sequence> </xs:complexType> Внутренне вы могли бы поддерживать единственную реализацию List<Customer>getCustomers(query);, которая собирает список. Исходя из этого, вы можете отобразить свой внутренний ответ службы на эти объекты.

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

Хороший подход к использованию основанных на REST интерфейсов CRUD.Интерфейсы SOA должны быть более специализированными.

...