Лучший шаблон проекта, чтобы иметь «unitOfWork» на бизнес-уровне - PullRequest
0 голосов
/ 15 декабря 2011

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

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

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

1 Ответ

1 голос
/ 15 декабря 2011

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

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