Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
hVostttest_taskтут кроме гибкости добавляется еще б о льшая уверенность в том, что ОРМ сгенерит "нужный SQL" (спецификация тут может подводить). но этот шаблон фактически означает написание готовых параметризированных запросов под разные, возможно, схожие цели Спецификация не отвечает за генерацию нужного SQL, за это отвечает провайдер. В случае EF, это LINQ провайдер. Поэтому подводить она не может. может даже не работать в зависимости от EF/NH ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2017, 19:39 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
test_taskможет даже не работать в зависимости от EF/NH Конкретные реализации могут работать и с EF и с LINQ, и даже с LINQ со своим провайдером. Но в целом, лучше абстрагироваться, чтобы иметь возможность подключать другие источники данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2017, 19:43 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
hVostttest_taskможет даже не работать в зависимости от EF/NH Конкретные реализации могут работать и с EF и с LINQ, и даже с LINQ со своим провайдером. Но в целом, лучше абстрагироваться, чтобы иметь возможность подключать другие источники данных. я про то, что не все так идеально, как хотелось бы. вот тут https://github.com/fiqwenbv/ParrotWings/blob/master/ParrotWings.DataService/AmountTransactionService.cs (46) можно было бы перенести условие выборки до проекции в DТО. и там использовать спецификацию AccountByUserSpecification. и это работает в EF, проверял (какой там SQL я не смотрел), а в NH падает с "не поддерживается". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2017, 19:52 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
Вы, hVostt , писали еще про фильтрацию. там еще больше будет различий реализаций EF/NH, особенно в части подзапросов. как вы с этим боретесь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2017, 19:59 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
test_taskможно было бы перенести условие выборки до проекции в DТО. и там использовать спецификацию AccountByUserSpecification. и это работает в EF, проверял (какой там SQL я не смотрел), а в NH падает с "не поддерживается". Всё верно, NH много чего не поддерживается, асинхронный доступ, нормальные проекции с группировкой тоже не работают. Вообще NH шлак по моему скромному мнению. test_taskВы, hVostt , писали еще про фильтрацию. там еще больше будет различий реализаций EF/NH, особенно в части подзапросов. как вы с этим боретесь? Мы решили вопрос по-другому, мы обходимся вообще без подзапросов. Вместо этого у нас плоские проекции данных в SQL и ElasticSearch, благодаря архитектуре CQRS / ES. А репозиторий у нас возвращает объекты только по ID, никаких списков, фильтров и прочего. Это не нужно совсем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2017, 20:57 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
hVosttСериализация/десреиализация это вопрос, решающийся на стыке клиент-серверТак она и решается на стыке. public AjaxJsonGetResult<Paging<UwsRoles>> GetPQList это метод контроллера. hVosttРепозиторий может выглядеть так: А он так и выглядит, для Paging отдельный метод: repo.GetList hVosttИнтерфейс IPaging опять же, у тебя решает несколько задач, и вообще по виду призван обслуживать прикладные запросы клиентского кода. Его в сервисах тоже не должно быть, на мой взгляд. Результат запроса по пейджингу: это срез + общее количество элементов. А IPageabe это больше относится к view model, так информация HasNext/HasPrevious и проч. нужна для презентации, в логике она не нужна.Да, это как-то выпало из внимания. hVosttПо моему же глубокому убеждение, методов, возвращающих коллекции репозиторий иметь не должен. Он должен уметь извлечь сущность из хранилища по ID, добавить и удалить. Всё.Тогда какой в нем смысл? Все это контекст умеет делать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2017, 11:21 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
AntonariyТогда какой в нем смысл? Прозрачность хранения данных. Пишешь: дай мне объект по идентификатору, - и тебе возвращается объект. А откуда: из кэша, памяти, сетевой шары, SQL базы, NoSQL базы, стороннего сервиса, - тебе по фигу. А контекст он прибит к конкретному типу хранилища. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2017, 12:08 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
А репозитарий разве не прибит к конкретному типу хранилища? Или его можно прибивать сразу к нескольким типам хранилищ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2017, 13:06 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
AntonariyА репозитарий разве не прибит к конкретному типу хранилища? Или его можно прибивать сразу к нескольким типам хранилищ? Конкретная реализация прибита. Но обычно же используют DI. Также можно декорирование считать за "прибивать сразу к нескольким типам хранилищ". В комбинации получаем, что не трогая код изменили конфигурацию, и данные начали выбираться согласно последней. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2017, 13:41 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
AntonariyТак она и решается на стыке. public AjaxJsonGetResult<Paging<UwsRoles>> GetPQList это метод контроллера. Точно, не сразу понял, что это у тебя контроллер. AntonariyhVosttПо моему же глубокому убеждение, методов, возвращающих коллекции репозиторий иметь не должен. Он должен уметь извлечь сущность из хранилища по ID, добавить и удалить. Всё.Тогда какой в нем смысл? Все это контекст умеет делать. Сущность тебе нужна, чтобы произвести изменения. А приложению обычно нужны всякие разные срезы данных, с группировкой, подсчётами, фильтрацией + безопасность. Я считаю, это выходит за рамки ответственности репозитория. С DbCobtext-ом это решается через LINQ-проекции. Это довольно неплохой и эффективный способ получать данные быстро без накладных расходов. Автоматическая генерация SQL с подзапросами опять же. Но здесь есть предел гибкости. Кеширование приделать довольно трудоёмко и сложно (инвалидация), разнести данные по разным хранилищам практически никак. Масштабируется такое решение совсем плохо. С микросервисной архитектурой такой подход не дружит совсем, в общем информационном пространстве, но с разными ограниченными контекстами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2017, 02:38 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
hVosttНу да, твой, ты предложил добавить GetBy1, GetBy2, это твоё видение, а не моё. По моим выкладкам я сказал, какому принципу это соответствует. С чем не согласен? A уровнем выше тоже нет обертки в GetBy1() ? Типа в контроллере будет repo.Find(someSpecification) ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2017, 13:21 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
ПарамонhVosttНу да, твой, ты предложил добавить GetBy1, GetBy2, это твоё видение, а не моё. По моим выкладкам я сказал, какому принципу это соответствует. С чем не согласен? A уровнем выше тоже нет обертки в GetBy1() ? Типа в контроллере будет repo.Find(someSpecification) ? Хм, к примеру на контроллер прилетает следующее: "А найди мне проживание в Праге с 1-го по 14-е августа для двух взрослых и ребёнка до 12 лет в таком-то ценовом диапазоне". И в GetByЧто вы это превратите? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2017, 14:45 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
ПарамонA уровнем выше тоже нет обертки в GetBy1() ? Типа в контроллере будет repo.Find(someSpecification) ? Это может быть сервис, работающий с конкретными спецификациями. В контроллере дёргаем этот сервис. Часто, когда программистами создаётся кучу всяких слоёв: репозитории, дата-сервисы, uow, менеджеры, провайдеры и ещё +100500 интерфейсов... Это вообще никак не приводит к тому, чтобы в контроллерах не писалась бизнес-логика. Она всё равно там пишется, а ещё размазывается по классам. Только используя интерфейсы, чтобы.. ну типа связать всё в одно. Подобное легко обнаружить, глядя на конструктор контроллера: видишь там 5-10 зависимостей, сразу понимаешь ниже будет треш ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2017, 15:29 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
skyANAХм, к примеру на контроллер прилетает следующее: "А найди мне проживание в Праге с 1-го по 14-е августа для двух взрослых и ребёнка до 12 лет в таком-то ценовом диапазоне". И в GetByЧто вы это превратите? А у спецификации не будет названия? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2017, 15:37 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
ПарамонskyANAХм, к примеру на контроллер прилетает следующее: "А найди мне проживание в Праге с 1-го по 14-е августа для двух взрослых и ребёнка до 12 лет в таком-то ценовом диапазоне". И в GetByЧто вы это превратите? А у спецификации не будет названия? В какой именно момент? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2017, 15:42 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
skyANAПарамонпропущено... А у спецификации не будет названия? В какой именно момент? У вас строго типизированая спецификация или Generic? Класс, который реализует конкретную спецификацию как назовете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2017, 16:00 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
ПарамонskyANAпропущено... В какой именно момент? У вас строго типизированая спецификация или Generic? Класс, который реализует конкретную спецификацию как назовете? Класс назову к примеру AccomodationSpecification, а интерфейс, что он реализует ISpecification :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2017, 16:36 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
skyANAПарамонпропущено... У вас строго типизированая спецификация или Generic? Класс, который реализует конкретную спецификацию как назовете? Класс назову к примеру AccomodationSpecification, а интерфейс, что он реализует ISpecification :) И как такое название намекает на ваши условия? Или передаём Expression прямо из контроллера? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2017, 16:52 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
ПарамонskyANAпропущено... Класс назову к примеру AccomodationSpecification, а интерфейс, что он реализует ISpecification :) И как такое название намекает на ваши условия? Или передаём Expression прямо из контроллера? Разверните первый вопрос, не понимаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2017, 17:09 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
skyANAПарамонпропущено... И как такое название намекает на ваши условия? Или передаём Expression прямо из контроллера? Разверните первый вопрос, не понимаю. Если второй понятен, то первый отпадает :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2017, 17:37 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
Нет, Expression прямо из контроллера не передаём. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2017, 17:46 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
skyANA, Он просит показать спецификацию для условия "А найди мне проживание в Праге с 1-го по 14-е августа для двух взрослых и ребёнка до 12 лет в таком-то ценовом диапазоне". Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Можно разбить на несколько спецификаций и смешивать их. Или сделать Строителя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2017, 18:07 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
skyANAНет, Expression прямо из контроллера не передаём. AccomodationSpecification конкретно реализует только те условия, которые были в вашем примере? Это сложно понять из названия, оно слишком общее. skyANAИ в GetByЧто вы это превратите? GetAccomodationHotels() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2017, 18:09 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
ПарамонЭто сложно понять из названия, оно слишком общее. В контексте букинга, сложно придумать другой смысл :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2017, 18:16 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
ПарамонAccomodationSpecification конкретно реализует только те условия, которые были в вашем примере? AccomodationSpecification внутри себя содержит выражение, которому должны удовлетворять искомые услуги проживания. Выражение это может состоять из тех условий, что я озвучил, а может и из меньшего количества, а может и из большего. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2017, 18:17 |
|
||
|
|

start [/forum/topic.php?fid=18&msg=39481228&tid=1355492]: |
0ms |
get settings: |
8ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
27ms |
get topic data: |
15ms |
get forum data: |
3ms |
get page messages: |
70ms |
get tp. blocked users: |
2ms |
| others: | 247ms |
| total: | 395ms |

| 0 / 0 |
