powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Подскажите современную реализацию Unit of Work + EF.
25 сообщений из 96, страница 3 из 4
Подскажите современную реализацию Unit of Work + EF.
    #39352896
Var79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fungus,

упрощенно
сервис - это метод который дергается по сети
бизнес логика - вызывается сервисом , что то делает полезное и часто но не всегда (один метод бизнес логики всегда другой никогда третий как повезет) использует ORM/DbContext .

Сервис перед тем как вызвать бизнес логику создает транзакцию и/или "Entity framework DbContext"

как сервис создает и передает транзакцию в бизнес логику - как хочет хоть параметрами хоть IOC interceptor.

правило таково что, сервис дергает только методы бизнес логики но не другие методы сервиса, бизнес логика может дергать методы других бизнес логик но не методы сервисов. ну или методы сервисов но тогда исключительно только по сети, но не сервисы которые вызывают твою бизнес логику.
это для простоты в принципе сервис может вызвать метод сервиса но зачем, если бизнес логика дергнет другую бизнес логику.
...
Рейтинг: 0 / 0
Подскажите современную реализацию Unit of Work + EF.
    #39352904
Fungus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Var79,
Примерно это я и предлагаю. В моем понимании есть репозитории, и сервисы дергающие их и реализующую бизнес логику (без жесткого запрета вызовов друг друга). Я как раз ищу слой, который бы занимался транзакциями.
В вашем варианте сервисы это некий дополнительный слой, который и оперирует транзакцией. А "бизнес логика" в вашей реализации, это, то что я называю сервисами. Только мне не ясно в каком виде эта бизнес логика предстает. Что она из себя представляет и в чем ее отличие от сервисов ?
...
Рейтинг: 0 / 0
Подскажите современную реализацию Unit of Work + EF.
    #39352907
Fungus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Var79(один метод бизнес логики всегда другой никогда третий как повезет)

Чо ? O.o
:)
...
Рейтинг: 0 / 0
Подскажите современную реализацию Unit of Work + EF.
    #39352909
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosskyANAViPRos, в чём ты видишь принципиальную разницу между этим

Код: c#
1.
2.
3.
4.
5.
6.
using (SqlTransaction transaction = connection.BeginTransaction("SampleTransaction"))
{
    // ...
    
    transaction.Commit();
}



и этим

Код: c#
1.
2.
3.
4.
5.
6.
using (IUnitOfWork unitOfWork = unitOfWorkFactory.Create())
{
    // ...

    unitOfWork.Commit();
}



?

второй может в себе включить много первого и еще тучу всего
но он должен стартануть как и первыйВот он и "стартанёт" в методе Create :)
...
Рейтинг: 0 / 0
Подскажите современную реализацию Unit of Work + EF.
    #39352913
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FungusskyANA,

Приведенный вами пример кода взят из комментария к статье, в котором также написано "ну вот я набросал на скорую руку" :) Как быть, если проект разбит на несколько DLL, занимающимися разными сферами приложения? Создавать один могучий DbContext который объеденит все сущности всех библиотек что ли ? По идее это реализовывать как отдельные репозитории, сервисы. Но при этом они должны уметь работать под одной транзакцией. Как это реализовать в приведенном примере ? Не вижу, он не походит на реальное решение.
И чем же не подходит?

Размышления про "все сущности всех библиотек" мне не понятны. Вы в одной транзакции собрались использовать все сущности всех библиотек?
...
Рейтинг: 0 / 0
Подскажите современную реализацию Unit of Work + EF.
    #39352920
Фотография Смузи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fungusпроект разбит на несколько DLL, занимающимися разными сферами приложения

FungusПро unit of work разговор уже много за годы. А нормальной реализации, что то не получается найти. Почему так ?

Потому что не существует серебряной пули универсального шаблона для автоматизации каши. Мы движемся по кругу. 19924721
...
Рейтинг: 0 / 0
Подскажите современную реализацию Unit of Work + EF.
    #39352921
Fungus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANA,

Если приложение разбито на разные DLL, у которых свои сущности. То у этих DLL должны же быть свои собственные DbContext ? Не один же общий иметь, с куче DbSet'ов. В этом случае не ясно как оперировать несколькими DbContext в рамках UOW - в рамках одной транзакции.EF такое вообще позволяет?
Пример. У нас есть DLL которая оперирует пользователями системы, и DLL оперирующая документами системами. Предположим есть процесс "Создать пользователя и документ, соответствующий этому событию". Не ясно как сделать это в рамках предложенного кода. Я и топик то создал в поисках такого решения.
...
Рейтинг: 0 / 0
Подскажите современную реализацию Unit of Work + EF.
    #39352923
Var79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FungusVar79,
Примерно это я и предлагаю. В моем понимании есть репозитории, и сервисы дергающие их и реализующую бизнес логику (без жесткого запрета вызовов друг друга). Я как раз ищу слой, который бы занимался транзакциями.
В вашем варианте сервисы это некий дополнительный слой, который и оперирует транзакцией. А "бизнес логика" в вашей реализации, это, то что я называю сервисами. Только мне не ясно в каком виде эта бизнес логика предстает. Что она из себя представляет и в чем ее отличие от сервисов ?


сервисы это слой над бизнес логикой, до ужоса примитивный, нужен как обертка для создания всяких транзакций, UoW и всяких прочих инжектирований.
сервисы не дергают репозиттории, репозитории это DAL, сервисы дергают только логику, логика чото делает и дергает либо другую логику либо дал DAL, если захочет.
сервисы дергают только логику, метод сервиса содержит только грубо говоря одну строку - вызов метода логики ну или еще создания объектов для параметров метода логики например объект транзакции.
сервисы точка входа для инжектирования. логика - для алгоритмов. dal/repositories - для внешней среды файликов бдшек (может даже для сети?)

автор(один метод бизнес логики - всегда вызывает dal, другой - никогда, третий - как повезет)
...
Рейтинг: 0 / 0
Подскажите современную реализацию Unit of Work + EF.
    #39352926
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAно он должен стартануть как и первыйВот он и "стартанёт" в методе Create :)[/quot]
ну и фигово, что он стартанет без моего ведома
я может их несколько хотел сунуть в еще один и стратануть синхронно
...
Рейтинг: 0 / 0
Подскажите современную реализацию Unit of Work + EF.
    #39352927
Fungus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
СмузиЗапускать в одной транзакции методы разных слоёв - дырка в архитектуре.

И чем вас не устраивает, когда в рамках транзакции вызывается несколько сервисов (это один слой) вызывающие внутри себя репозитории(а это уже другой слой). Где тут дырка ?
Сервисы и призваны вызывать слой DAL. Вы считаете, что делать это в рамках одной транзакции недопустимо, но как тогда вообще писать программы ?
...
Рейтинг: 0 / 0
Подскажите современную реализацию Unit of Work + EF.
    #39352930
Var79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FungusskyANA,

Если приложение разбито на разные DLL, у которых свои сущности. То у этих DLL должны же быть свои собственные DbContext ? Не один же общий иметь, с куче DbSet'ов. В этом случае не ясно как оперировать несколькими DbContext в рамках UOW - в рамках одной транзакции.EF такое вообще позволяет?
Пример. У нас есть DLL которая оперирует пользователями системы, и DLL оперирующая документами системами. Предположим есть процесс "Создать пользователя и документ, соответствующий этому событию". Не ясно как сделать это в рамках предложенного кода. Я и топик то создал в поисках такого решения.
засуньте в UoW список тех DbContext-ов которые в данном вызове сервиса использует метод бизнес логики, измините код UoW что бы он пробежался по этому списку и у всех DbContext-ов сделал SaveChanges, если один SaveChanges упал откатываем транзакцию например
возможно IOC нужно настроить что бы он смотрел какие DbContext нужны бизнес логики и фигачил в этот лист DbContext
...
Рейтинг: 0 / 0
Подскажите современную реализацию Unit of Work + EF.
    #39352932
Var79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FungusСервисы и призваны вызывать слой DAL.
что за ерунда. везде пишут что контролеры/ сервисы должны быть тонкими, то что сервис можно сделать толстым не значит что это нужно делать
...
Рейтинг: 0 / 0
Подскажите современную реализацию Unit of Work + EF.
    #39352935
Var79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FungusСервисы и призваны вызывать слой DAL. еще раз, для альтернативно одаренных, три слоя сервисы - бизнес логика - DAL

Где тут сервисы вызывают DAL?
...
Рейтинг: 0 / 0
Подскажите современную реализацию Unit of Work + EF.
    #39352939
Фотография Смузи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FungusСмузиЗапускать в одной транзакции методы разных слоёв - дырка в архитектуре.

И чем вас не устраивает, когда в рамках транзакции вызывается несколько сервисов (это один слой) вызывающие внутри себя репозитории(а это уже другой слой). Где тут дырка ?
Сервисы и призваны вызывать слой DAL. Вы считаете, что делать это в рамках одной транзакции недопустимо, но как тогда вообще писать программы ?
Я считаю, что транзакция - вещь атомарная, переводящая данные из одного целостного состояния в другое целостное состояние. Выводить атомарность в сторонние методы и слои - архитектурная ошибка. Вроде как очевидные вещи. Во-вторых, грубая ошибка иметь несколько экземпляров EF контекстов в сервисах? Думаю, комментировать не требуется.
...
Рейтинг: 0 / 0
Подскажите современную реализацию Unit of Work + EF.
    #39352941
Fungus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Var79,

Контроллеры тонкими да. Но сервисы это и есть бизнес логика в моем понимании. И она может выйти весьма жирной: создание сущностей через репы, обращение к другим сервисам. Возможно мы говорим об одном и том же, просто терминология разная. Что у вас понимается под бизнес логикой. Это какие то классы, как выглядят ?
...
Рейтинг: 0 / 0
Подскажите современную реализацию Unit of Work + EF.
    #39352947
Var79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fungus,

чукча не читатель чукча задаватель вопросов
...
Рейтинг: 0 / 0
Подскажите современную реализацию Unit of Work + EF.
    #39352950
Fungus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
СмузиЯ считаю, что транзакция - вещь атомарная, переводящая данные из одного целостного состояния в другое целостное состояние. Выводить атомарность в сторонние методы и слои - архитектурная ошибка. Вроде как очевидные вещи. Во-вторых, грубая ошибка иметь несколько экземпляров EF контекстов в сервисах? Думаю, комментировать не требуется.

Ну так как реализовать то, что я описал в "Примере" тут 19926472 ? Иметь один контекст, в котором будут все все все сущности ? И юзеры, и их роли, и документы бизнес слоя и логирование в придачу.
...
Рейтинг: 0 / 0
Подскажите современную реализацию Unit of Work + EF.
    #39352952
Var79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FungusVar79,

Контроллеры тонкими да. Но сервисы это и есть бизнес логика в моем понимании. И она может выйти весьма жирной: создание сущностей через репы, обращение к другим сервисам. Возможно мы говорим об одном и том же, просто терминология разная. Что у вас понимается под бизнес логикой. Это какие то классы, как выглядят ?
бизнес логика -
такс пришли бананы на 100 000 USD
и арбузы на 20 000 EUR
лезем в другую логику за курсом usd и eur
получаем тугрики
ага но ведь тугрики это не надежно, пересчитаем в банки тушенки для этого вызовем третью логику
получили вагон тушенки
дал запиши к нам пришло вагон тушенки
...
Рейтинг: 0 / 0
Подскажите современную реализацию Unit of Work + EF.
    #39352956
Var79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FungusНо сервисы это и есть бизнес логика в моем понимании. ну так херач всё в сервисах зачем тебе DAL IOC и всякая непонятная фигня, понапридумывают же, сиди мучайся
...
Рейтинг: 0 / 0
Подскажите современную реализацию Unit of Work + EF.
    #39352959
Var79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FungusСмузиЯ считаю, что транзакция - вещь атомарная, переводящая данные из одного целостного состояния в другое целостное состояние. Выводить атомарность в сторонние методы и слои - архитектурная ошибка. Вроде как очевидные вещи. Во-вторых, грубая ошибка иметь несколько экземпляров EF контекстов в сервисах? Думаю, комментировать не требуется.

Ну так как реализовать то, что я описал в "Примере" тут 19926472 ? Иметь один контекст, в котором будут все все все сущности ? И юзеры, и их роли, и документы бизнес слоя и логирование в придачу.
грубая ошибка иметь несколько экземпляров EF контекстов в сервисах - не знаю как на счет в сервисах, но можно иметь много разнотипных контекстов главное что бы в одной транзакции.
...
Рейтинг: 0 / 0
Подскажите современную реализацию Unit of Work + EF.
    #39352966
Fungus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Var79,

Мы уходим в сторону. Не хочу начинать холиварить и ругаться, о том какое разделение на слои более правильно,просто потому, что вариантов решения может быть масса.
Меня интересует чисто практическое решение паттерна UOW в купе с транзакциями в рамках EF в условиях сложного проекта, состоящего из нескольких модулей разделенных по функционалу.
...
Рейтинг: 0 / 0
Подскажите современную реализацию Unit of Work + EF.
    #39352972
Var79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FungusИметь один контекст, в котором будут все все все сущности ? И юзеры, и их роли, и документы бизнес слоя и логирование в придачу.

если сущности в разных DLL, то наверно у них независимые отношения. раз независимые отношения то можно и скорее нужно разные контексты.
хотя не понимаю как юзеры могут быть отделены от ролей.
но вот документы и юзеры наверно должны быть в одном контексте если в документе есть ссылка на юзера который создал документ.

что будет если в разных типах контекста будет юзер, который будет перезаписываться разными контекстами - как повезет - неожиданное поведение блокировки или всё нормально, самому интересно.
...
Рейтинг: 0 / 0
Подскажите современную реализацию Unit of Work + EF.
    #39352977
Фотография Смузи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FungusНу так как реализовать то, что я описал в "Примере" тут 19926472 ? Иметь один контекст, в котором будут все все все сущности ? И юзеры, и их роли, и документы бизнес слоя и логирование в придачу.
Контекст ORM - это схема базы данных. Если она одна, значит контекст тоже должен быть один. Типичная ошибка пытаться делить контекст на части. Через время начинаются слёзы о том, что хочется обобщения, бесшовную транзакцию, бизнес-документы с ролями и иже с ними. Разносить нужно сервисы, а не контекст. Один сервис под документы, другой под роли, третий под боли.
...
Рейтинг: 0 / 0
Подскажите современную реализацию Unit of Work + EF.
    #39352982
Фотография Смузи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FungusVar79, Мы уходим в сторону. Не хочу начинать холиварить и ругаться, о том какое разделение на слои более правильно,просто потому, что вариантов решения может быть масса.
Он не уходит в сторону, он ясно говорит о том, что допущена серьезная архитектурная ошибка. Нужно начинать с обобщения всего в единый контекст и рефакторинга кода. Как можно говорить о чистоте сервисов, если есть такой ржавый гвоздь в коробке.
...
Рейтинг: 0 / 0
Подскажите современную реализацию Unit of Work + EF.
    #39352992
Fungus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну ок. Я не претендую, а ищу реальный пример :)
...
Рейтинг: 0 / 0
25 сообщений из 96, страница 3 из 4
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Подскажите современную реализацию Unit of Work + EF.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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