|
Подскажите современную реализацию Unit of Work + EF.
|
|||
---|---|---|---|
#18+
Fungus, упрощенно сервис - это метод который дергается по сети бизнес логика - вызывается сервисом , что то делает полезное и часто но не всегда (один метод бизнес логики всегда другой никогда третий как повезет) использует ORM/DbContext . Сервис перед тем как вызвать бизнес логику создает транзакцию и/или "Entity framework DbContext" как сервис создает и передает транзакцию в бизнес логику - как хочет хоть параметрами хоть IOC interceptor. правило таково что, сервис дергает только методы бизнес логики но не другие методы сервиса, бизнес логика может дергать методы других бизнес логик но не методы сервисов. ну или методы сервисов но тогда исключительно только по сети, но не сервисы которые вызывают твою бизнес логику. это для простоты в принципе сервис может вызвать метод сервиса но зачем, если бизнес логика дергнет другую бизнес логику. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2016, 17:12 |
|
Подскажите современную реализацию Unit of Work + EF.
|
|||
---|---|---|---|
#18+
Var79, Примерно это я и предлагаю. В моем понимании есть репозитории, и сервисы дергающие их и реализующую бизнес логику (без жесткого запрета вызовов друг друга). Я как раз ищу слой, который бы занимался транзакциями. В вашем варианте сервисы это некий дополнительный слой, который и оперирует транзакцией. А "бизнес логика" в вашей реализации, это, то что я называю сервисами. Только мне не ясно в каком виде эта бизнес логика предстает. Что она из себя представляет и в чем ее отличие от сервисов ? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2016, 17:22 |
|
Подскажите современную реализацию Unit of Work + EF.
|
|||
---|---|---|---|
#18+
Var79(один метод бизнес логики всегда другой никогда третий как повезет) Чо ? O.o :) ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2016, 17:27 |
|
Подскажите современную реализацию Unit of Work + EF.
|
|||
---|---|---|---|
#18+
ViPRosskyANAViPRos, в чём ты видишь принципиальную разницу между этим Код: c# 1. 2. 3. 4. 5. 6.
и этим Код: c# 1. 2. 3. 4. 5. 6.
? второй может в себе включить много первого и еще тучу всего но он должен стартануть как и первыйВот он и "стартанёт" в методе Create :) ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2016, 17:28 |
|
Подскажите современную реализацию Unit of Work + EF.
|
|||
---|---|---|---|
#18+
FungusskyANA, Приведенный вами пример кода взят из комментария к статье, в котором также написано "ну вот я набросал на скорую руку" :) Как быть, если проект разбит на несколько DLL, занимающимися разными сферами приложения? Создавать один могучий DbContext который объеденит все сущности всех библиотек что ли ? По идее это реализовывать как отдельные репозитории, сервисы. Но при этом они должны уметь работать под одной транзакцией. Как это реализовать в приведенном примере ? Не вижу, он не походит на реальное решение. И чем же не подходит? Размышления про "все сущности всех библиотек" мне не понятны. Вы в одной транзакции собрались использовать все сущности всех библиотек? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2016, 17:32 |
|
Подскажите современную реализацию Unit of Work + EF.
|
|||
---|---|---|---|
#18+
Fungusпроект разбит на несколько DLL, занимающимися разными сферами приложения FungusПро unit of work разговор уже много за годы. А нормальной реализации, что то не получается найти. Почему так ? Потому что не существует серебряной пули универсального шаблона для автоматизации каши. Мы движемся по кругу. 19924721 ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2016, 17:43 |
|
Подскажите современную реализацию Unit of Work + EF.
|
|||
---|---|---|---|
#18+
skyANA, Если приложение разбито на разные DLL, у которых свои сущности. То у этих DLL должны же быть свои собственные DbContext ? Не один же общий иметь, с куче DbSet'ов. В этом случае не ясно как оперировать несколькими DbContext в рамках UOW - в рамках одной транзакции.EF такое вообще позволяет? Пример. У нас есть DLL которая оперирует пользователями системы, и DLL оперирующая документами системами. Предположим есть процесс "Создать пользователя и документ, соответствующий этому событию". Не ясно как сделать это в рамках предложенного кода. Я и топик то создал в поисках такого решения. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2016, 17:43 |
|
Подскажите современную реализацию Unit of Work + EF.
|
|||
---|---|---|---|
#18+
FungusVar79, Примерно это я и предлагаю. В моем понимании есть репозитории, и сервисы дергающие их и реализующую бизнес логику (без жесткого запрета вызовов друг друга). Я как раз ищу слой, который бы занимался транзакциями. В вашем варианте сервисы это некий дополнительный слой, который и оперирует транзакцией. А "бизнес логика" в вашей реализации, это, то что я называю сервисами. Только мне не ясно в каком виде эта бизнес логика предстает. Что она из себя представляет и в чем ее отличие от сервисов ? сервисы это слой над бизнес логикой, до ужоса примитивный, нужен как обертка для создания всяких транзакций, UoW и всяких прочих инжектирований. сервисы не дергают репозиттории, репозитории это DAL, сервисы дергают только логику, логика чото делает и дергает либо другую логику либо дал DAL, если захочет. сервисы дергают только логику, метод сервиса содержит только грубо говоря одну строку - вызов метода логики ну или еще создания объектов для параметров метода логики например объект транзакции. сервисы точка входа для инжектирования. логика - для алгоритмов. dal/repositories - для внешней среды файликов бдшек (может даже для сети?) автор(один метод бизнес логики - всегда вызывает dal, другой - никогда, третий - как повезет) ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2016, 17:44 |
|
Подскажите современную реализацию Unit of Work + EF.
|
|||
---|---|---|---|
#18+
skyANAно он должен стартануть как и первыйВот он и "стартанёт" в методе Create :)[/quot] ну и фигово, что он стартанет без моего ведома я может их несколько хотел сунуть в еще один и стратануть синхронно ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2016, 17:47 |
|
Подскажите современную реализацию Unit of Work + EF.
|
|||
---|---|---|---|
#18+
СмузиЗапускать в одной транзакции методы разных слоёв - дырка в архитектуре. И чем вас не устраивает, когда в рамках транзакции вызывается несколько сервисов (это один слой) вызывающие внутри себя репозитории(а это уже другой слой). Где тут дырка ? Сервисы и призваны вызывать слой DAL. Вы считаете, что делать это в рамках одной транзакции недопустимо, но как тогда вообще писать программы ? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2016, 17:48 |
|
Подскажите современную реализацию Unit of Work + EF.
|
|||
---|---|---|---|
#18+
FungusskyANA, Если приложение разбито на разные DLL, у которых свои сущности. То у этих DLL должны же быть свои собственные DbContext ? Не один же общий иметь, с куче DbSet'ов. В этом случае не ясно как оперировать несколькими DbContext в рамках UOW - в рамках одной транзакции.EF такое вообще позволяет? Пример. У нас есть DLL которая оперирует пользователями системы, и DLL оперирующая документами системами. Предположим есть процесс "Создать пользователя и документ, соответствующий этому событию". Не ясно как сделать это в рамках предложенного кода. Я и топик то создал в поисках такого решения. засуньте в UoW список тех DbContext-ов которые в данном вызове сервиса использует метод бизнес логики, измините код UoW что бы он пробежался по этому списку и у всех DbContext-ов сделал SaveChanges, если один SaveChanges упал откатываем транзакцию например возможно IOC нужно настроить что бы он смотрел какие DbContext нужны бизнес логики и фигачил в этот лист DbContext ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2016, 17:50 |
|
Подскажите современную реализацию Unit of Work + EF.
|
|||
---|---|---|---|
#18+
FungusСервисы и призваны вызывать слой DAL. что за ерунда. везде пишут что контролеры/ сервисы должны быть тонкими, то что сервис можно сделать толстым не значит что это нужно делать ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2016, 17:52 |
|
Подскажите современную реализацию Unit of Work + EF.
|
|||
---|---|---|---|
#18+
FungusСервисы и призваны вызывать слой DAL. еще раз, для альтернативно одаренных, три слоя сервисы - бизнес логика - DAL Где тут сервисы вызывают DAL? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2016, 17:54 |
|
Подскажите современную реализацию Unit of Work + EF.
|
|||
---|---|---|---|
#18+
FungusСмузиЗапускать в одной транзакции методы разных слоёв - дырка в архитектуре. И чем вас не устраивает, когда в рамках транзакции вызывается несколько сервисов (это один слой) вызывающие внутри себя репозитории(а это уже другой слой). Где тут дырка ? Сервисы и призваны вызывать слой DAL. Вы считаете, что делать это в рамках одной транзакции недопустимо, но как тогда вообще писать программы ? Я считаю, что транзакция - вещь атомарная, переводящая данные из одного целостного состояния в другое целостное состояние. Выводить атомарность в сторонние методы и слои - архитектурная ошибка. Вроде как очевидные вещи. Во-вторых, грубая ошибка иметь несколько экземпляров EF контекстов в сервисах? Думаю, комментировать не требуется. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2016, 18:03 |
|
Подскажите современную реализацию Unit of Work + EF.
|
|||
---|---|---|---|
#18+
Var79, Контроллеры тонкими да. Но сервисы это и есть бизнес логика в моем понимании. И она может выйти весьма жирной: создание сущностей через репы, обращение к другим сервисам. Возможно мы говорим об одном и том же, просто терминология разная. Что у вас понимается под бизнес логикой. Это какие то классы, как выглядят ? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2016, 18:04 |
|
Подскажите современную реализацию Unit of Work + EF.
|
|||
---|---|---|---|
#18+
Fungus, чукча не читатель чукча задаватель вопросов ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2016, 18:10 |
|
Подскажите современную реализацию Unit of Work + EF.
|
|||
---|---|---|---|
#18+
СмузиЯ считаю, что транзакция - вещь атомарная, переводящая данные из одного целостного состояния в другое целостное состояние. Выводить атомарность в сторонние методы и слои - архитектурная ошибка. Вроде как очевидные вещи. Во-вторых, грубая ошибка иметь несколько экземпляров EF контекстов в сервисах? Думаю, комментировать не требуется. Ну так как реализовать то, что я описал в "Примере" тут 19926472 ? Иметь один контекст, в котором будут все все все сущности ? И юзеры, и их роли, и документы бизнес слоя и логирование в придачу. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2016, 18:13 |
|
Подскажите современную реализацию Unit of Work + EF.
|
|||
---|---|---|---|
#18+
FungusVar79, Контроллеры тонкими да. Но сервисы это и есть бизнес логика в моем понимании. И она может выйти весьма жирной: создание сущностей через репы, обращение к другим сервисам. Возможно мы говорим об одном и том же, просто терминология разная. Что у вас понимается под бизнес логикой. Это какие то классы, как выглядят ? бизнес логика - такс пришли бананы на 100 000 USD и арбузы на 20 000 EUR лезем в другую логику за курсом usd и eur получаем тугрики ага но ведь тугрики это не надежно, пересчитаем в банки тушенки для этого вызовем третью логику получили вагон тушенки дал запиши к нам пришло вагон тушенки ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2016, 18:15 |
|
Подскажите современную реализацию Unit of Work + EF.
|
|||
---|---|---|---|
#18+
FungusНо сервисы это и есть бизнес логика в моем понимании. ну так херач всё в сервисах зачем тебе DAL IOC и всякая непонятная фигня, понапридумывают же, сиди мучайся ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2016, 18:18 |
|
Подскажите современную реализацию Unit of Work + EF.
|
|||
---|---|---|---|
#18+
FungusСмузиЯ считаю, что транзакция - вещь атомарная, переводящая данные из одного целостного состояния в другое целостное состояние. Выводить атомарность в сторонние методы и слои - архитектурная ошибка. Вроде как очевидные вещи. Во-вторых, грубая ошибка иметь несколько экземпляров EF контекстов в сервисах? Думаю, комментировать не требуется. Ну так как реализовать то, что я описал в "Примере" тут 19926472 ? Иметь один контекст, в котором будут все все все сущности ? И юзеры, и их роли, и документы бизнес слоя и логирование в придачу. грубая ошибка иметь несколько экземпляров EF контекстов в сервисах - не знаю как на счет в сервисах, но можно иметь много разнотипных контекстов главное что бы в одной транзакции. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2016, 18:23 |
|
Подскажите современную реализацию Unit of Work + EF.
|
|||
---|---|---|---|
#18+
Var79, Мы уходим в сторону. Не хочу начинать холиварить и ругаться, о том какое разделение на слои более правильно,просто потому, что вариантов решения может быть масса. Меня интересует чисто практическое решение паттерна UOW в купе с транзакциями в рамках EF в условиях сложного проекта, состоящего из нескольких модулей разделенных по функционалу. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2016, 18:29 |
|
Подскажите современную реализацию Unit of Work + EF.
|
|||
---|---|---|---|
#18+
FungusИметь один контекст, в котором будут все все все сущности ? И юзеры, и их роли, и документы бизнес слоя и логирование в придачу. если сущности в разных DLL, то наверно у них независимые отношения. раз независимые отношения то можно и скорее нужно разные контексты. хотя не понимаю как юзеры могут быть отделены от ролей. но вот документы и юзеры наверно должны быть в одном контексте если в документе есть ссылка на юзера который создал документ. что будет если в разных типах контекста будет юзер, который будет перезаписываться разными контекстами - как повезет - неожиданное поведение блокировки или всё нормально, самому интересно. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2016, 18:35 |
|
Подскажите современную реализацию Unit of Work + EF.
|
|||
---|---|---|---|
#18+
FungusНу так как реализовать то, что я описал в "Примере" тут 19926472 ? Иметь один контекст, в котором будут все все все сущности ? И юзеры, и их роли, и документы бизнес слоя и логирование в придачу. Контекст ORM - это схема базы данных. Если она одна, значит контекст тоже должен быть один. Типичная ошибка пытаться делить контекст на части. Через время начинаются слёзы о том, что хочется обобщения, бесшовную транзакцию, бизнес-документы с ролями и иже с ними. Разносить нужно сервисы, а не контекст. Один сервис под документы, другой под роли, третий под боли. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2016, 18:39 |
|
Подскажите современную реализацию Unit of Work + EF.
|
|||
---|---|---|---|
#18+
FungusVar79, Мы уходим в сторону. Не хочу начинать холиварить и ругаться, о том какое разделение на слои более правильно,просто потому, что вариантов решения может быть масса. Он не уходит в сторону, он ясно говорит о том, что допущена серьезная архитектурная ошибка. Нужно начинать с обобщения всего в единый контекст и рефакторинга кода. Как можно говорить о чистоте сервисов, если есть такой ржавый гвоздь в коробке. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2016, 18:41 |
|
|
start [/forum/topic.php?fid=20&msg=39352913&tid=1399948]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
44ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
60ms |
get tp. blocked users: |
1ms |
others: | 281ms |
total: | 428ms |
0 / 0 |