powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Тестовое задание
25 сообщений из 153, страница 5 из 7
Тестовое задание
    #39480650
test_task
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostttest_taskтут кроме гибкости добавляется еще б о льшая уверенность в том, что ОРМ сгенерит "нужный SQL" (спецификация тут может подводить). но этот шаблон фактически означает написание готовых параметризированных запросов под разные, возможно, схожие цели

Спецификация не отвечает за генерацию нужного SQL, за это отвечает провайдер. В случае EF, это LINQ провайдер. Поэтому подводить она не может.

может даже не работать в зависимости от EF/NH
...
Рейтинг: 0 / 0
Тестовое задание
    #39480652
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
test_taskможет даже не работать в зависимости от EF/NH

Конкретные реализации могут работать и с EF и с LINQ, и даже с LINQ со своим провайдером. Но в целом, лучше абстрагироваться, чтобы иметь возможность подключать другие источники данных.
...
Рейтинг: 0 / 0
Тестовое задание
    #39480658
test_task
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostttest_taskможет даже не работать в зависимости от EF/NH

Конкретные реализации могут работать и с EF и с LINQ, и даже с LINQ со своим провайдером. Но в целом, лучше абстрагироваться, чтобы иметь возможность подключать другие источники данных.

я про то, что не все так идеально, как хотелось бы.
вот тут
https://github.com/fiqwenbv/ParrotWings/blob/master/ParrotWings.DataService/AmountTransactionService.cs (46)
можно было бы перенести условие выборки до проекции в DТО. и там использовать спецификацию AccountByUserSpecification. и это работает в EF, проверял (какой там SQL я не смотрел), а в NH падает с "не поддерживается".
...
Рейтинг: 0 / 0
Тестовое задание
    #39480659
test_task
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы, hVostt , писали еще про фильтрацию. там еще больше будет различий реализаций EF/NH, особенно в части подзапросов. как вы с этим боретесь?
...
Рейтинг: 0 / 0
Тестовое задание
    #39480696
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
test_taskможно было бы перенести условие выборки до проекции в DТО. и там использовать спецификацию AccountByUserSpecification. и это работает в EF, проверял (какой там SQL я не смотрел), а в NH падает с "не поддерживается".

Всё верно, NH много чего не поддерживается, асинхронный доступ, нормальные проекции с группировкой тоже не работают. Вообще NH шлак по моему скромному мнению.


test_taskВы, hVostt , писали еще про фильтрацию. там еще больше будет различий реализаций EF/NH, особенно в части подзапросов. как вы с этим боретесь?

Мы решили вопрос по-другому, мы обходимся вообще без подзапросов. Вместо этого у нас плоские проекции данных в SQL и ElasticSearch, благодаря архитектуре CQRS / ES. А репозиторий у нас возвращает объекты только по ID, никаких списков, фильтров и прочего. Это не нужно совсем.
...
Рейтинг: 0 / 0
Тестовое задание
    #39480835
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttСериализация/десреиализация это вопрос, решающийся на стыке клиент-серверТак она и решается на стыке. public AjaxJsonGetResult<Paging<UwsRoles>> GetPQList это метод контроллера.

hVosttРепозиторий может выглядеть так:
А он так и выглядит, для Paging отдельный метод: repo.GetList

hVosttИнтерфейс IPaging опять же, у тебя решает несколько задач, и вообще по виду призван обслуживать прикладные запросы клиентского кода. Его в сервисах тоже не должно быть, на мой взгляд. Результат запроса по пейджингу: это срез + общее количество элементов. А IPageabe это больше относится к view model, так информация HasNext/HasPrevious и проч. нужна для презентации, в логике она не нужна.Да, это как-то выпало из внимания.

hVosttПо моему же глубокому убеждение, методов, возвращающих коллекции репозиторий иметь не должен. Он должен уметь извлечь сущность из хранилища по ID, добавить и удалить. Всё.Тогда какой в нем смысл? Все это контекст умеет делать.
...
Рейтинг: 0 / 0
Тестовое задание
    #39480856
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyТогда какой в нем смысл?
Прозрачность хранения данных.

Пишешь: дай мне объект по идентификатору, - и тебе возвращается объект. А откуда: из кэша, памяти, сетевой шары, SQL базы, NoSQL базы, стороннего сервиса, - тебе по фигу.
А контекст он прибит к конкретному типу хранилища.
...
Рейтинг: 0 / 0
Тестовое задание
    #39480877
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А репозитарий разве не прибит к конкретному типу хранилища? Или его можно прибивать сразу к нескольким типам хранилищ?
...
Рейтинг: 0 / 0
Тестовое задание
    #39480895
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyА репозитарий разве не прибит к конкретному типу хранилища? Или его можно прибивать сразу к нескольким типам хранилищ?
Конкретная реализация прибита. Но обычно же используют DI.
Также можно декорирование считать за "прибивать сразу к нескольким типам хранилищ".

В комбинации получаем, что не трогая код изменили конфигурацию, и данные начали выбираться согласно последней.
...
Рейтинг: 0 / 0
Тестовое задание
    #39481035
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyТак она и решается на стыке. public AjaxJsonGetResult<Paging<UwsRoles>> GetPQList это метод контроллера.

Точно, не сразу понял, что это у тебя контроллер.

AntonariyhVosttПо моему же глубокому убеждение, методов, возвращающих коллекции репозиторий иметь не должен. Он должен уметь извлечь сущность из хранилища по ID, добавить и удалить. Всё.Тогда какой в нем смысл? Все это контекст умеет делать.

Сущность тебе нужна, чтобы произвести изменения. А приложению обычно нужны всякие разные срезы данных, с группировкой, подсчётами, фильтрацией + безопасность. Я считаю, это выходит за рамки ответственности репозитория.

С DbCobtext-ом это решается через LINQ-проекции. Это довольно неплохой и эффективный способ получать данные быстро без накладных расходов. Автоматическая генерация SQL с подзапросами опять же. Но здесь есть предел гибкости. Кеширование приделать довольно трудоёмко и сложно (инвалидация), разнести данные по разным хранилищам практически никак.

Масштабируется такое решение совсем плохо. С микросервисной архитектурой такой подход не дружит совсем, в общем информационном пространстве, но с разными ограниченными контекстами.
...
Рейтинг: 0 / 0
Тестовое задание
    #39481155
Парамон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttНу да, твой, ты предложил добавить GetBy1, GetBy2, это твоё видение, а не моё. По моим выкладкам я сказал, какому принципу это соответствует. С чем не согласен?

A уровнем выше тоже нет обертки в GetBy1() ?
Типа в контроллере будет repo.Find(someSpecification) ?
...
Рейтинг: 0 / 0
Тестовое задание
    #39481175
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПарамонhVosttНу да, твой, ты предложил добавить GetBy1, GetBy2, это твоё видение, а не моё. По моим выкладкам я сказал, какому принципу это соответствует. С чем не согласен?

A уровнем выше тоже нет обертки в GetBy1() ?
Типа в контроллере будет repo.Find(someSpecification) ?
Хм, к примеру на контроллер прилетает следующее: "А найди мне проживание в Праге с 1-го по 14-е августа для двух взрослых и ребёнка до 12 лет в таком-то ценовом диапазоне".
И в GetByЧто вы это превратите?
...
Рейтинг: 0 / 0
Тестовое задание
    #39481188
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПарамонA уровнем выше тоже нет обертки в GetBy1() ?
Типа в контроллере будет repo.Find(someSpecification) ?

Это может быть сервис, работающий с конкретными спецификациями. В контроллере дёргаем этот сервис.

Часто, когда программистами создаётся кучу всяких слоёв: репозитории, дата-сервисы, uow, менеджеры, провайдеры и ещё +100500 интерфейсов... Это вообще никак не приводит к тому, чтобы в контроллерах не писалась бизнес-логика. Она всё равно там пишется, а ещё размазывается по классам. Только используя интерфейсы, чтобы.. ну типа связать всё в одно. Подобное легко обнаружить, глядя на конструктор контроллера: видишь там 5-10 зависимостей, сразу понимаешь ниже будет треш
...
Рейтинг: 0 / 0
Тестовое задание
    #39481190
Парамон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAХм, к примеру на контроллер прилетает следующее: "А найди мне проживание в Праге с 1-го по 14-е августа для двух взрослых и ребёнка до 12 лет в таком-то ценовом диапазоне".
И в GetByЧто вы это превратите?

А у спецификации не будет названия?
...
Рейтинг: 0 / 0
Тестовое задание
    #39481195
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПарамонskyANAХм, к примеру на контроллер прилетает следующее: "А найди мне проживание в Праге с 1-го по 14-е августа для двух взрослых и ребёнка до 12 лет в таком-то ценовом диапазоне".
И в GetByЧто вы это превратите?

А у спецификации не будет названия?
В какой именно момент?
...
Рейтинг: 0 / 0
Тестовое задание
    #39481202
Парамон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAПарамонпропущено...


А у спецификации не будет названия?
В какой именно момент?
У вас строго типизированая спецификация или Generic?
Класс, который реализует конкретную спецификацию как назовете?
...
Рейтинг: 0 / 0
Тестовое задание
    #39481217
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПарамонskyANAпропущено...

В какой именно момент?
У вас строго типизированая спецификация или Generic?
Класс, который реализует конкретную спецификацию как назовете?
Класс назову к примеру AccomodationSpecification, а интерфейс, что он реализует ISpecification :)
...
Рейтинг: 0 / 0
Тестовое задание
    #39481228
Парамон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAПарамонпропущено...

У вас строго типизированая спецификация или Generic?
Класс, который реализует конкретную спецификацию как назовете?
Класс назову к примеру AccomodationSpecification, а интерфейс, что он реализует ISpecification :)

И как такое название намекает на ваши условия? Или передаём Expression прямо из контроллера?
...
Рейтинг: 0 / 0
Тестовое задание
    #39481250
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПарамонskyANAпропущено...

Класс назову к примеру AccomodationSpecification, а интерфейс, что он реализует ISpecification :)

И как такое название намекает на ваши условия? Или передаём Expression прямо из контроллера?
Разверните первый вопрос, не понимаю.
...
Рейтинг: 0 / 0
Тестовое задание
    #39481264
Парамон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAПарамонпропущено...


И как такое название намекает на ваши условия? Или передаём Expression прямо из контроллера?
Разверните первый вопрос, не понимаю.
Если второй понятен, то первый отпадает :)
...
Рейтинг: 0 / 0
Тестовое задание
    #39481273
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет, Expression прямо из контроллера не передаём.
...
Рейтинг: 0 / 0
Тестовое задание
    #39481284
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA,

Он просит показать спецификацию для условия "А найди мне проживание в Праге с 1-го по 14-е августа для двух взрослых и ребёнка до 12 лет в таком-то ценовом диапазоне".

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
public class AccomodationSpecification : ISpecification
{

   public Guid? CityId {get;set;}
   public DateTime? StartDate {get;set;}
   public DateTime? FinishDate {get;set;}
   public int AdultCount {get;set;}
   public int ChildrenCount {get;set;}
   public decimal? StartPrice {get;set;}
   public decimal? FinishPrice {get;set;}

   // interface specific methods
   
   ...
}



Можно разбить на несколько спецификаций и смешивать их. Или сделать Строителя.
...
Рейтинг: 0 / 0
Тестовое задание
    #39481286
Парамон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAНет, Expression прямо из контроллера не передаём.
AccomodationSpecification конкретно реализует только те условия, которые были в вашем примере?
Это сложно понять из названия, оно слишком общее.

skyANAИ в GetByЧто вы это превратите?
GetAccomodationHotels()
...
Рейтинг: 0 / 0
Тестовое задание
    #39481287
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПарамонЭто сложно понять из названия, оно слишком общее.

В контексте букинга, сложно придумать другой смысл :)
...
Рейтинг: 0 / 0
Тестовое задание
    #39481288
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПарамонAccomodationSpecification конкретно реализует только те условия, которые были в вашем примере?
AccomodationSpecification внутри себя содержит выражение, которому должны удовлетворять искомые услуги проживания.
Выражение это может состоять из тех условий, что я озвучил, а может и из меньшего количества, а может и из большего.
...
Рейтинг: 0 / 0
25 сообщений из 153, страница 5 из 7
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Тестовое задание
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]