Здравствуйте, Gengzu, Вы писали:
Z>>С этого места подробнее. Сколько было сущностей, как абстрагированы и сколько всего пришлось переделать за пределами абстракций.
G>С десяток сущностей. Много отношений много-ко-многим. Изначально использовался EF 4.0, как маппер. После EF 4.1 CodeFirst, в итоге перешли на NHibernate, так как гибкости EF в маппингах сильно не хватало.
Я так и не услышал ответа на весь вопрос. Впрочем дам совет, хоть он и не будет воспринят сейчас: не надо напирать на хитрые маппинги, чем они прозрачнее, тем проще разработчику работать с базой. Этот факт все равно не скроешь, хоть 50 абстракций наверни сверху.
G>не понимаю к чему это.
G>изменение Score у вложенной сущности? как бы это выглядело в вашем случае?
Очень и очень вложенной, обычная N+1 проблема навигационного доступа. В гибернейте, в моем случае, это выглядело бы как
запрос к нужным сущностям, апдейт и сохранение. Именно таким запросам мешают различные репозитарии вкупе с запретом на IQueryable. В bltoolkit вообще, прямой апдейт в БД.
Z>>Он отлично реализован в .net через ExpressionTree. Именно его я и советую применять выставляя наружу IQueryable.
G>всё что необходимо скрыть, нужно скрывать. в данном случае IQueryable остаётся и никому не мешает в силу лени создания экстеншин метода, написать сразу запрос по месту.
Я рад, что развеял заблуждение:
выносить наружу IQueriable плохо тем, что любой разработчик сможет дописать что угодно в запрос, а это приведёт в свою очередь как к дублированию кода, так и к кривым SQL запросам.
G>другое дело, если ваше приложение получит доп. уровень абстракции, и данные будут выгребаться через веб-сервисы. в случаи нормального абстрагирования, нужно будет переписать лишь репозитории, и IQueriable там увы не подойдёт.
Когда получит тогда и надо вводить его. Сто процентов что, введенный сейчас он не ляжет на неожиданно возникшие вебсервисы органично, будут нюансы.
G>но всё сильно от задачь зависит. в HomePage такие абстракции лишние.
Ну мы то сейчас не о HomePage, впрочем в одном моем домашнем проекте сущностей уже больше 10. И логика меняется постоянно. И все абстракции, кроме используемой платформы — выкинуты. Полет нормальный.
P.S. Я сам несколько лет назад любил NH именно за хитрые маппинги. Но тогда не было строготипизированного доступа к БД, который дает LINQ.