Какая технология доступа к данным лучше всего подходит для веб-сервисов запросов CQRS? - PullRequest
3 голосов
/ 25 февраля 2011

Какие инструменты люди используют для запросов к своей базе данных Read и заполнения DTO?

В настоящее время у нас есть модель Read в базе данных Sql2008 и мы выполняем все наши запросы через службу WCF. Мы используем Fluent NHibernate длязаполнять контракты данных с помощью автоматического сопоставления, но, может быть, это просто излишество?

Наши требования действительно таковы ...

  1. Нет кода Sql в веб-службе
  2. В Webservice нет кода отображения, в идеале мы хотим отображать соглашениями, поля Read базы данных имеют те же имена, что и свойства нашего контракта данных.Мы не хотим писать и поддерживать код отображения вручную.
  3. Минимальное использование ресурсов на веб-сервере.

Ответы [ 3 ]

3 голосов
/ 25 февраля 2011

ИМХО Overkill.

Я использую только плоскую файловую систему с сериализацией JSON / ProtoBuf. Веб-сервисы очень просты, а схемы могут быть любыми. Стек легко перемещается в облако (с использованием BLOB-объектов хранилища Azure) для практически бесконечной масштабируемости при необходимости.

Детали: http://abdullin.com/journal/2011/1/19/scalable-and-simple-cqrs-views-in-the-cloud.html

1 голос
/ 03 марта 2011

Я пользовался WCF Data Services с большим успехом на стороне чтения.Я написал сообщение в блоге об этом.Проверьте это в http://blog.fossmo.net/post/WCF-Data-Services-A-perfect-fit-for-our-CQRS-implementation.aspx

0 голосов
/ 25 февраля 2011

Я использовал ядро ​​ADO.NET с хранимыми процедурами в базе данных.Затем, используя инструмент, который я написал, весь код доступа к данным генерируется с использованием результата каждой хранимой процедуры в качестве структуры Dtos.

Инструмент с исходным кодом доступен в моем блоге ДанныеУровень доступа CodeGen

Теперь, поскольку вы просто возвращаете данные через службу WCF, нет необходимости переходить из DataReader в Dto и затем сериализовать DTO.Другими словами, вы перебираете свой набор результатов 3 раза в процессе отправки данных.Поэтому, если вы хотите уменьшить использование ресурсов на вашем сервере и получить более высокую производительность, вы можете использовать классы «DataReader-Wrapper», которые генерирует инструмент (вместе с кодом доступа к данным).

Классы-оболочки DataReaderпохожи на строго типизированные DataReaders.У меня есть еще один пост, где я рассказываю об этих и их преимуществах DataReader Wrappers - TypeSafe

Конечно, вы можете изменить инструмент (так как у вас также есть исходный код), чтобы генерировать всеВаш код, включая сервис WCF.Так что все, что вам действительно нужно сделать, это написать хранимую процедуру, и все готово.Весь код DataAccess (с использованием ADO.NET Core - так он легок и очень быстр), код бизнес-уровня и код WCF - это действительно просто «занятая работа», если вы понимаете, о чем я.

РЕДАКТИРОВАТЬ Причина использования хранимых процедур

  1. Хранимая процедура может возвращать несколько результирующих наборов за один вызов.
  2. Хранимая процедура может принимать параметры.
  3. Хранимая процедураПроцедура может иметь операторы управления потоком и может вызывать другие хранимые процедуры (так что вы можете использовать процедуру повторно, например, реструктурировать метод, так что вы можете вызывать его из нескольких других методов).
  4. Гораздо проще оптимизироватьхранимая процедура, поскольку инструменты работают с ними очень хорошо
...