Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
1 / 1 / 1
Регистрация: 07.03.2018
Сообщений: 93
.NET 8

Консультация по организации сервиса (DataBase Repository)

10.03.2025, 05:28. Показов 1496. Ответов 3

Студворк — интернет-сервис помощи студентам
Для контекста: использую Mapster, Serilog.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
public class UserService(IUserRepository repository, ILogger logger)
{
    public async Task<TDto?> GetByIdAsync<TDto>(int userId, Func<IQueryable<User>, IQueryable<User>>? include = null,
        CancellationToken cancellationToken = default)
    {
        try
        {
            var entity = await repository.GetByIdAsync(userId, include, cancellationToken);
 
            return entity is null ? default : entity.Adapt<TDto?>();
        }
        catch (OracleException ex) when (ex.Number == 1013)
        {
            logger.Information("Запрос был отменён.");
            return default;
        }
    }
 
    public async Task<IEnumerable<TDto>> GetByNameAsync<TDto>(string name,
        CancellationToken cancellationToken = default)
    {
        try
        {
            var entities = await repository.GetByNameAlnumAsync(name, cancellationToken);
 
            return entities.Adapt<IEnumerable<TDto>>();
        }
        catch (OracleException ex) when (ex.Number == 1013)
        {
            logger.Information("Запрос был отменён.");
            return [];
        }
    }
 
    public async Task<IEnumerable<TDto>> GetByFilterAsync<TDto>(Filter filter,
        CancellationToken cancellationToken = default)
    {
        try
        {
            var entities = await repository.GetByFilterAsync(filter, cancellationToken);
 
            return entities.Adapt<IEnumerable<TDto>>();
 
        }
        catch (OracleException ex) when (ex.Number == 1013)
        {
            logger.Information("Запрос был отменён.");
            return [];
        }
    }
}
  1. Допустимо ли такое использование TDto? Я правильно делаю это?
  2. GetByIdAsync. Допустимо ли здесь использовать аргумент include? Допустим User имеет множество внешних зависимостей, и они везде по-разному используются. На каждое использование делать свой метод отличающихся от множества подобных другим набором .Include()?
  3. Как лучше организовать try catch блоки? Result-объект? Что на счёт повторения? Не делать же в этом сервисе метод который будет обрабатывать Exception? Сервис обработчик?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.03.2025, 05:28
Ответы с готовыми решениями:

Нужна консультация по разработке веб-сервиса
Всем привет! У меня есть одна идея, которую я хотел бы реализовать (http://blog.bnkomi.ru/post-6404/). Вся проблема в том, что мне...

Требуется консультация по организации работы программистов
Требуется человек, который готов периодически платно консультировать меня по организации работы 20-30 программистов над одним проектом на...

Нужна консультация по созданию небольшого веб-сервиса(не коммерческого)
Здравствуйте, уважаемые опытные программисты. Не знал в какой теме проконсультироваться на счет своего вопроса, но думаю что эта тема...

3
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
10.03.2025, 06:40
Цитата Сообщение от Stormhead Посмотреть сообщение
C#
1
2
3
4
5
catch (OracleException ex) when (ex.Number == 1013)
        {
            logger.Information("Запрос был отменён.");
            return default;
        }
Я не уверен что это хорошее решение. Вызывающая сторона не будет понимать, это нет записи в БД или было отменено. Плюс у меня большие сомнения насчет информативности такого лога: если там не записывается стектрейс, то будет просто запись "я что-то там отменил", и что именно -- поди догадайся.
0
1 / 1 / 1
Регистрация: 07.03.2018
Сообщений: 93
10.03.2025, 08:07  [ТС]
Wolfdp, это я понимаю. В данном примере это скорее заглушка и далее я бы заменил её на что то более информативное. Но раз уж об этом зашла речь можете поделиться опытом и рассказать как лучше подавать такую информацию?
0
 Аватар для Calabonga
14 / 13 / 1
Регистрация: 13.02.2025
Сообщений: 33
14.03.2025, 04:08
Есть много способов реализации паттерна Repository и для каждого есть своё обоснование. Я придерживаюсь того, чтобы не использовать в репозиториях DTO в принципе. Вот тут понятно всё разъясняется. Если кратко, то "создание DTO из Model - это другая зона ответственности".

Вообще, если честно, создавать абстракцию на уровне доступа к данным вручную похоже на создание своего "велосипеда". Вроде и красиво, но всё уже придумали до нас. Есть куча nuget-пакетов, которые прекрасно справляются с этой задачей. Я себе свой "велосипед" создал очень давно, а выложил его в nuget.org в 2019 (и даже видео по использованию UnitOfWork сделал). Теперь использую его в разных проектах. К чему это я? А кто тому, что если вы будете делать репозиторий для использования в разных проектах, то DTO вам точно не получится в него "впендюрить", а если получится, то какой смысл, когда вы будете использовать проект, в котором нет DTO (так тоже бывает). Да, и впендюренные DTO, скорее всего придется сделать generic, а как же mapping? Он будет вне репозитория или тоже в репозиторий встроите?

Настоятельно рекомендую перед реализацией (любой задача) спрашивать себя "а чья это зона ответственности?". Сразу многое становится понятным.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.03.2025, 04:08
Помогаю со студенческими работами здесь

Необходима консультация по поводу организации взаимодействия Access и Excel
Добрый день всем. Сначала вкратце опишу предысторию. Есть мебельный салон, который имеет склад, производственный цех и т.д....

нужна помощь,точнее консультация сетевика по поводу организации Wi-Fi сети.
Здравствуйте,ребят нужна помощь,точнее консультация сетевика по поводу организации Wi-Fi сети.если есть желающие помоч... в личку...

SQLite DataBase - почему подчеркивает DataBase db: пишет (DataBase cannot be resolved to a type)
Здравствуйте! помогите понять почему подчеркивает DataBase db; пишет (DataBase cannot be resolved to a type), чем это можно исправить ...

Автоматический старт сервиса сервиса httpd при падении на сервере CentOS 7.5 + Vesta CP
Приветствую! У меня есть такая проблема на сервере, периодически отключается сервис httpd и не работают сайты. Сервер у...

Как после старта сервиса сообщить init-процессу об успешном/безуспешном запуске сервиса?
Нужно при после старта сервиса сообщить init-процессу о статусе запуска сервиса, т.е. успешно или с ошибками, чтобы сервис знал, можно ли...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru