2013-04-29 8 views
0

Обычно я пытаюсь сфокусировать парадигмы, такие как DDD, имеют чистую архитектуру приложения, соленную с ORM, IoC и так далее. Теперь мне нужно настроить службу WCF, которая предоставляет полные таблицы данных (с ALOT столбцов), но редко имеет любую бизнес-логику/алгоритмы. Данные поступают из приложений CRM, которые просто необходимо передать через общую конечную точку (услугу WCF).WCF Service и большие таблицы данных - любые альтернативы ddd/бизнес-объектам?

Применение проектов DDD или других объектов, связанных с объектами и бизнес-объектами, заканчивается написанием большого количества кода boillerplate, конфигураций ORM xml и кода инфраструктуры, которые кажутся слишком негативными для этих несколько примитивных требований.

Лучшим было бы иметь подход DataTable/DataSet, но, похоже, использование их с WCF является анти-шаблоном и считается плохим дизайном.

Итак, каковы альтернативы? Может быть, некоторые сериализации XML на основе анализа? Существуют ли общие шаблоны?

Редактировать: Данные из CRM записываются в базу данных SQL-сервера, которую я должен прочитать перед передачей данных. Схема изменяется довольно часто (добавляются новые столбцы), но мне не нужно заботиться о структуре, поскольку мне просто нужно передать данные в другое место. Вот почему мне понравилась идея заполнения DataSet/DataTables

Спасибо заранее.

ответ

1

Вы правы, говоря, что настройка всего этого только для службы WCF слишком высока.

DDD полезен, когда вы хотите создать бизнес-приложение, когда вам нужно смоделировать домен, с которым имеете дело. В вашем случае бизнес-приложение, похоже, является CRM, а не службой WCF.

Я предполагаю, что вы извлекаете данные из своего CRM-приложения через API.

Что бы я делал в первую очередь, это создать все службы DTO, которые служба WCF передаст и определит контракт на обслуживание WCF. Сначала разработав свой контракт, а DTO позволит потребителю интегрировать его в свое приложение и посмотреть, соответствует ли он требованиям.

Возможно, вам удастся перенести огромные графы объектов, но это лучше, чем пытаться перенести DataTables. То, что я хотел бы сделать, также заключается в том, чтобы инкапсулировать граф объекта ответа в объект methodName + Response (и, если необходимо, объект запроса в объект Name + объект запроса) для цели удобочитаемости.

Как только ваш контракт DTO и контракт на обслуживание были разработаны, все, что вам нужно сделать, это просто позвонить вашему CRM API, получить данные, а затем сопоставить их с DTO.

Убедитесь, что правильно отдельные вещи в вашей .sln, вот как я делал при работе с WCF услуг:

enter image description here

.WCF: веб-проект, который будет развернут, он содержит только файл .svc и файл .config.

. Интерфейс: Где я размещаю все контракты DTO и услуги.

.Implementation: Реализация сервиса (где вы будете называть ваш CRM API)

.Mapping: В DTO <> CRM отображение данных классов

Таким образом, все правильно разделены ,

Надеюсь, что это поможет!

+0

Благодарим вас за ответ. Я пропустил, чтобы указать, что я извлекаю данные из CRM-формы из базы данных SQL Server. API отсутствует. Поэтому я также должен заботиться о поиске данных. Схема меняется довольно часто (новые столбцы добавляются, чтобы быть точно, это довольно плохой дизайн db). Поскольку мне не нужно много заботиться о структуре db (данные просто нужно перенести куда-то), мне понравилась идея просто заполнить некоторую таблицу данных. – mbue

+1

Ну, вам нужен легкий уровень доступа к данным. Вместо использования DataTables, почему бы не использовать EntityFramework? Проектирование файлов EDMX довольно просто и идеально справляется с этой задачей. – MaxSC

+0

Фредди, спасибо за ваш ответ. Я протестировал Entity Framework. Используя генератор PBCO DbContext, я могу генерировать скудные POCOs из моей базы данных, которые кажутся совершенно подходящими для перемещения по каналу через WCF. Спасибо, что указали на этот подход. – mbue