Re[5]: Альтернативы EF Core
От: IT Россия linq2db.com
Дата: 15.08.17 22:51
Оценка: 21 (3) +3 -1
Здравствуйте, Spinifex, Вы писали:

S>Возьмем типичную реализацию метода веб сервиса. Предположим у нас метод работает с какими-то там доменными сущностями типа Пользователь.


Т.е. задача редактирования справочника, вписывается в обозначенные мной сценарии. Вопрос, это приложение только создаёт/редактирует Пользователя или обладает ещё какой-то функциональностью?

S>UnitOfWork это во первых транзакция, я всегда могу ее отролбечить,


И в чём проблема? Транзакции — это святое, это наше всё. Зачем для этого UoW?

S>всегда могу из контекста достать данные без обращения в базу. Репозитории содержат в себе логику по доступу к данным. Иногда специфичную для данного ОРМ. Типа QueryOver, желательно Linq (но не всегда это возможно), иногда даже Dapper. Но такие случаи нужно избегать и до последней возможности стараться писать на linq.


Я без всяких UoW работаю только на Linq. Включая временные таблицы, хинты, bulk copy и прочее. Иногда приходится дописывать свои хелперы типа на отключение констрейнов, но это мелочи и разовая работа.

S>Репозитории могут понадобится в других сервисах. Например, получение пользователей для данной организации на данном этаже происходит не только при оповещении о создании нового пользователя, но и при пожарной тревоги.


Техники повторного использования кода вообще-то никто не отменял. Это всё можно сделать массой разных способов. Да и сам репозиторий как паттерн вполне можно использовать без UoW.

S>Отправка сообщений — много где нужна, во многих сервисах. И даже создание пользователя может происходить неявно также во многих случаях.


Техники повторного использования кода. UoW здесь вовсе не панацея.

S>Таким образом мы имеем четкую структуру. Каждый из классов имеет свою обязанность. Смена ОРМ происходит максимально легко. Конечно это не просто подмена файлика — методы репозиториев и быть может даже сервисов нужно будет переписывать.


И сколько раз в своей жизни ты менял ОРМ в своих проектах? Только честно.

S>Теперь вопрос. Что с этой схемой не так? Как выглядит работа с linq2db? Скорее всего это файл сервиса на 2000 строк где все вперемешку.


Это зависит от задачи. Бывает, что 2000 строк это не предел. Бизнес логика — она такая бизнес логика. Если нужно написать кода на 2000 строк, то здесь не поможет никакой UoW.

S>P.S. Здесь говорили что менять ОРМ часто не надо. Забавно, но изначальный пост был как раз про это. ОРМ вам нужно поменять, например, при переходе на Core. И вы хотите минимизировать правки.


linq2db позволяет менять не только Core, но даже БД без изменения кода бизнес логики. Это вообще как бы не вопрос. И, кстати, Core — это не ОРМ, это фреймворк.

В общем, я в очередной раз не понял зачем нужен UoW.

Есть ещё один философский момент. Все эти UoW, Entity Services, Persistence и прочее, всё это от лукавого. Если хочется работать с базой данных эффективно и надёжно, без гемороя и сайд эффектов, то с базой данных нужно работать именно как с базой данных. Любые попытки поставить между базой и кодом магический щит в виде UoW и прочей дребедени заканчивается очень быстро и наступает жестокое разочарование.
Если нам не помогут, то мы тоже никого не пощадим.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.