Re[11]: Работа с ORM
От: Gengzu  
Дата: 26.07.11 09:58
Оценка:
Z>Так зачем абстрагировать CRUD, если для этого уже написан и отлажен ORM, он имеет отличный API для этого. Для чего абстрагировать CRUD через ORM?

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

Z>>>Инкапсуляцию чего? Я привел кучу примеров, когда к неправильному коду приводит именно несвобода написать правильный затратив адекватные усилия. Жду примеров, когда писать неправильный код диктует свобода.


Z>Я не вижу никакого дублирования. Нет никакой разницы в дублировании, напишет он вызов YongerThat или u.Age >. Если ограничение на 18 лет имеет свое бизнес название — нет никакой проблемы вынести его в именованый предикат.


собственно это и есть спецификации. другое дело, что предоставление IQueriable не накладывает ограничений на его применение, и пользователь волен поступать как ему заблагорассудится. в случае репозитария у него будет только один контролируемый выход.

Z>Репозитарий для этого совершенно не нужен. Черти какие запросы мы гарантированно получим максимально абстрагировав их от прикладного программиста. Он все равно выберет данные которые ему нужны, только ни о какой эффективности речи не будет, если у него в руках нет прямого способа сделать нужный запрос.


обычно ерунду люди творят тогда, когда могут. в моём случаи — они не могут.
конечно никто не защищён от того что он в любом месте заюзает чистый ADO.NET. но это крайности.
запросы с использованием репозитория вполне нормальные.
возможно у вас проблема в построении самой архитектуры, определении Aggregation Root'ов, либо непонимании предназначения паттерна Repository.
он, кстати, для простых веб-сайтов не очень подходит. да.

Z>Ты пойми, я тебя не уговариваю дублировать код. Я не понимаю, почему для избавления от дублирования нужны репозитарии. Не требуется никаких абстракций от CRUD, останется ровно тот же CRUD. Не требуется никаких абстракций, чтобы устранить дублирование кода запросов кроме экстеншенов к IQueryable, а абстрагироваться от него себе дороже. Что еще ты пытаешься абстрагировать за фасадом репозитария?


репозиторий абстрагирует нас от хранилища данных, и от ORM.
репозиторий не для избавления от дублирования, но в данном случае, и использованием IQueriable, он предохраняет от него. как минимум.
еще раз повторюсь, выставление и протаскивание IQueriable через все слои приводит к очень плохим sql запросам, плохо тестируемому коду, дублированию кода и размазаной логики. это же очевидно.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.