ну и опять мы вернулись IQuariable, вы же сами указывали
If you have a specific ORM in mind, then be explicit about it. Don't hide it behind an interface. It creates the illusion that you can replace one implementation with another. In practice, that's impossible.
Build(filtrate,query.Paging) надо будет скопипастить как минимум в половине билдеров.
тоже самое что и рассматривать за копипаст Skip(n).Take(k), для особого извращения это все можно сделать с помощью рефлексии ( крайне не рекомендую ) универсально.
А твой подход рождает изрядное количество копипасты.
запросы изменяются для каждого репозитория отдельно, причем эти запросы специфический, такие запросф как Paging с точки зрения предметной области меняться не будут, может меняться только их построение.
А кто помешает программисту написать любой запрос внутри репозитария?
ни кто, но так он будет находиться в конкретном месте.
кроме компилятора рассчитывать не на что.
к сожалению компилятор не в силах распознать LINQ запросы которые приведут к краху, тк с точки зрения статического анализа они верны, но перевести их в SQL imposible.
Каждый билет имеет уникальный номер ( признак ), на уровне бд делаем уникальность по полю, и в таблицу блокировок одни и те же билеты (места) не попадут ( хотя это можно расценивать как паранойю
Параноики еще и в самом хранилище делают проверки.
Ух, это жесть. Плохо, что она не лишена обсуждаемой сдесь проблемы, вам все равно нужно будет любой запрос перевести в дерево и передать его провайдеру, слабое звено в пищевой цепочки скармливания деревьев — провайдер, он просто может не переварить приготовленную кухню.
вот именно! каждый из репозиториев будет принимать свой тип запроса.
случай работает сильно медленнее
а вы можите написать выражение которое будет делать скип и тэйк быстрее?
Тогда репозиторий превратится в бизнес-логику.
то есть если query является составным query.UserOptions и query.OrderOptions то обработка этого запроса это бизнес уровень, а написать LINQ запрос который будет получать пользователей по определенному критерию заказов — это нет. А в чем разница?
Думаешь у программистов, которые пишут репозитории другая совесть?
таже, но ограничив запросы предметной области идет естественное ограничение совести, тк нет универсального построителя в котором безсовестно можно писать все что угодно.
ставить — когда начнем редактировать данные о билете.
снимать — когда подтверждаем изменения, на тот случай если кто то уснет при редактировании timeout по истечению которого блокировка считается не действительной.
ни кто, но это будет не в 10 местах по коду, а в одном, и так же легко поправиться
почитайте внимательно, то о чем я пишу, такой проблемы не будет.
а где я про это писал?
100% рабочий вариант, спору нет, но чем он лучше? проще — да, но попытка комбинирования запросов приводит к разрастанию интерфейса — это нормально?
снимать — когда подтверждаем изменения, на тот случай если кто то уснет при редактировании timeout по истечению которого блокировка считается не действительной.