Экспонирование модели EF для различных клиентов - PullRequest
0 голосов
/ 22 июля 2010

Эй, ребята, я надеюсь, что у всех все хорошо.

У меня (более-менее) широкий вопрос, касающийся представления модели различным клиентам.

Вот моя ситуация: у меня есть модель (расположенная поверх Oracle), которая создаетсяиспользуя EF 4.0 и стороннего провайдера Oracle.Модель находится в библиотеке, поэтому на нее могут легко ссылаться несколько проектов.

Моя цель - сделать модель доступной для максимально возможного числа клиентов:

  1. .код клиента .Net (Silverlight, WPF и ASP.Net, службы и т. Д.).
  2. Приложения MS Office (Excel)

Теперь я не хочу заниматься созданием пользовательских методов для модели (например, GetCustomersWhoAreVeryUpsetOrderedByUpsetRank ()).Я хотел бы иметь возможность представить модель таким образом, чтобы клиентский код мог решить (во время выполнения), как построить запросы.Должен ли я взять IQueriable, выполнить его в службе и вернуть набор данных результатов?Или я позволю клиенту выполнять всю работу с помощью модели?

Я действительно дал снимок oData, но похоже, что библиотека на стороне клиента, используемая для написания запросов Linq к модели, довольно ограничивающая.Кроме того, протокол не поддерживает обновления.

Поэтому мой вопрос заключается в том, каков наилучший подход / технология / реализация для представления Модели на основе вышеупомянутых критериев?

Большое спасибо заранее.

1 Ответ

1 голос
/ 22 июля 2010

Я бы посоветовал вам не делиться своей моделью 1: 1 с вашими клиентами или использовать ее 1: 1 для разных клиентов.

Чтобы поделиться с заинтересованными сторонами, используйте несколько простых DTO . Код отображения может быть создан автоматически с помощью инструмента CASE, преобразования T4 или любого другого создания исходного кода. Если вы поделитесь своей собственной моделью, у вас возникнут проблемы, как только вы захотите / захотите что-то реорганизовать или если у одного клиента будут какие-то особые требования.

Почти то же самое зависит от методов запроса от EF (DAL). Определите некоторые DataMappers интерфейсы с общими требованиями и реализуйте поведение по умолчанию. Если вам когда-либо понадобится ваш GetCustomersWhoAreVeryUpsetOrderedByUpsetRank(), у вас все в порядке, так как вы можете добавить этот запрос в преобразователь данных, полученный из преобразователя по умолчанию. При таком подходе базовая система остается понятной и многократно используемой, и каждый клиент может получить свои собственные функции.

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