powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Разработка информационных систем [игнор отключен] [закрыт для гостей] / Как решить такую проблему ?
7 сообщений из 7, страница 1 из 1
Как решить такую проблему ?
    #39074641
ProBiotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет. Прошу совета.

Схема работы такая : MyClass1 и MyClass2 что то меняют в БД (Update), используя класс слоя данных DAL.
Метод MyClass2 принимает данные, полученные после работы MyClass1 - т.е. зависит от них.
Класс Manager просто управляет этой работой - вызывает MyClass1 и затем передает результат его работы в MyClass2.

Структура классов :

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
public class Manager
{
  public  void DoWork ()
  {   
    var temp = DoWork1 ();
    var result = DoWork2 (temp);
  }
  private string DoWork1 () {return MyClass1.DoDbWork()}
  private string DoWork2 (string temp) {return MyClass2.DoDbWork(temp)}
}

public MyClass1
{
  public string DoWork1() {return MyDal.DoWorkFor1()}
}

public MyClass1
{
  public string DoWork2(string temp) {return MyDal.DoWorkFor2(temp)}
}

public class Dal
{
   string DoWorkFor1() {using (var conn = GetConnection()){...}}
   string DoWorkFor2() {using (var conn = GetConnection()){...}}
}



Проблема . Как обеспечить, чтобы MyClass1 и MyClass2 делали работу в пределах единой транзакции ?

Теоретически, можно было бы создавать транзацию в Dal.DoWorkFor1 и возвращать ее. И затем передавать в Dal.DoWorkFor2. Однако проблема в том, что эта транзакция пройдет через класс Manager (метод DoWork) - который не должен бы иметь понятия про слой данных и его сущности.

Как решать такую проблему ?
...
Рейтинг: 0 / 0
Как решить такую проблему ?
    #39074671
ProBiotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Крутится в голове термин "Unit of Work".
Это как раз про мой вопрос ?
Но имеется ли там решение моего вопроса : передать транзакцию из одного класса слоя данных в другой - проходя через сторонний класс-управленец, который не должен знать про это (или должен ?)
...
Рейтинг: 0 / 0
Как решить такую проблему ?
    #39075106
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ProBiotek,
решать в конкретной ЯП, т.к. вариантов много и риск написать велосипед огромен.
- есть декларативное описание транзакций (фреймворк по аннотациям-маркерам всё сделает за тебя).
- есть ручное.
...
транзакция обычно привязана к коннекту, поэтому просто передают коннект.
...
есть ОРМ напр. хибер, который и делает DAL и всё отсальное.
Ты же не системный программист?
...
Рейтинг: 0 / 0
Как решить такую проблему ?
    #39075107
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ProBiotek,
по названию темы видно, что велосипед как раз и пишешь.
Первый раз тему создал?
...
Рейтинг: 0 / 0
Как решить такую проблему ?
    #39075261
ProBiotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

Я не понял.
Скажите, Entity Framework позволит такое сделать ? Как-то можно его настроить, чтобы два разных обращения к БД шли в одной транзакции ? Или какой ОРМ это может делать ?


Велосипед я конечно изобретаю, в каком-то смысле.
...
Рейтинг: 0 / 0
Как решить такую проблему ?
    #39075389
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ProBiotek,
не понял какое слово? Что тема не так названа? Что надо в ветку ЯП идти?
Ты задал технический вопрос. Тут в ветке уровень выше.
ЗЫ
Petro123есть ОРМ напр. хибер, который и делает DAL и всё отсальное.
...
Рейтинг: 0 / 0
Как решить такую проблему ?
    #39075822
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Разработка информационных систем [игнор отключен] [закрыт для гостей] / Как решить такую проблему ?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]