2011-12-15 1 views
0

У меня есть рабочий проект на C# .NET, который структурирован в: gui, бизнес и уровнях доступа к данным. Каждый класс бизнес-уровня представляет собой объект базы данных. Я использую linq для доступа к базе данных. Но способ реализации проекта сегодня не позволяет делать много операций атомарно, и мне нужно, чтобы это было сделано на бизнес-уровне.Лучший шаблон проекта, который имеет «unitOfWork» на бизнес-уровне

Я искал некоторые шаблоны проектирования и нашел unitOfWork, что делает все операции на уровне данных в том же контексте и после внесения всех изменений. Это будет работать, чтобы сделать операции атомными. Но проблема в том, что операции, которые я хочу выполнить, должны быть проверены раньше, это означает, что вместо вызова метода из уровня данных мне нужно вызвать метод из бизнес-уровня, который должен быть проверен ранее. Этот вызов в бизнес-слое создаст другой unitOfWork и, следовательно, создаст другой контекст, нарушающий атомарность большей операции, которую я пытаюсь сделать.

Вопрос: Каков наилучший шаблон проекта для вызова одного или нескольких методов бизнес-уровня из бизнес-уровня в одном и том же контексте linq?

ответ

1

Один из способов сделать это будет:

  • Создайте слой сервиса на верхней части бизнес-слоя.
  • Этот сервисный уровень состоит из 2 сервисов (могут быть реальными услугами WCF или просто обычными классами C#): один для чтения и один для записи.
  • Служба чтения не является транзакционной, она содержит только методы, которые выполняют запросы (т. Е. Считывают данные).
  • Письменная служба является транзакционной; все его методы либо создают контекст транзакции, либо следуют единице рабочего шаблона.
  • Служба записи обращается к службе чтения для проверки перед выполнением операций C/U/D на своем бизнес-уровне.
+0

Кажется, что это хорошо. У этого шаблона проекта есть имя? Я хотел бы узнать больше об этом? Благодаря! – joaocarlospf

+0

Это свободно основано на CQRS: Сегрегация ответственности за команду/запрос. –

Смежные вопросы