Created DTO logic #3

Merged
jezv merged 5 commits from feature/dto into develop 2026-03-02 20:10:05 +08:00
Owner

Структура такая:
Внутри DTO модели есть метод Map, который заполняет её по значениям из БД.
Метод Map реализует цепочку обязаностей из 3-ёх звеньев:
OperationHandler - создаёт Enum операции по айди,
IdHandler - заполняет соответсвующий айди от типа операции,
FieldsHandler - заполняет все остальные поля, согласно их названиям из кастомного атрибута

Структура такая: Внутри DTO модели есть метод Map, который заполняет её по значениям из БД. Метод Map реализует цепочку обязаностей из 3-ёх звеньев: OperationHandler - создаёт Enum операции по айди, IdHandler - заполняет соответсвующий айди от типа операции, FieldsHandler - заполняет все остальные поля, согласно их названиям из кастомного атрибута
VolovikovAlexander left a comment
First-time contributor

Код нужно доделывать. Значительно.

Код нужно доделывать. Значительно.
@ -0,0 +1,10 @@
namespace Src.PersonalAccount.Domain.Core;
public abstract class DTOBase
First-time contributor
Оформление кода. https://gitverse.ru/VolovikovAlexander/PersonalAccount2026/content/master/_docs/CONTRIBUTING.md Нейминг
@ -0,0 +4,4 @@
{
public override void HandleRequest(object condition)
{
throw new NotImplementedException();
First-time contributor

Зачем нужны классы в которых нет реализации?

Зачем нужны классы в которых нет реализации?
@ -0,0 +28,4 @@
/// <summary>
/// Идентификатор сотрудника
/// </summary>
public uint? EmployeeId { get; set; }
First-time contributor

Нет атрибутов. Как определяется код сотрудника?

Нет атрибутов. Как определяется код сотрудника?
VolovikovAlexander left a comment
First-time contributor

В целом, решение понятно. Принято.
Однако, нужно доработать

  • Коментарии в код. Коментарии к тестам
  • Сделать загрузку данных: День, Месяц, Квартал
В целом, решение понятно. Принято. Однако, нужно доработать - Коментарии в код. Коментарии к тестам - Сделать загрузку данных: `День, Месяц, Квартал`
@ -0,0 +2,4 @@
namespace Src.PersonalAccount.Domain.Core;
public abstract class DTOBase
First-time contributor

Коментарии в код добавьте пжл.
Назначение данного класса? Для чего используется каждое свойство?

Коментарии в код добавьте пжл. Назначение данного класса? Для чего используется каждое свойство?
@ -0,0 +16,4 @@
Attribute = p.GetCustomAttribute<DTOFieldName>()
})
.Where(f => f.Attribute != null && f.Attribute.FieldType.IsEnum)
.ToList()
First-time contributor

Понятное, но спорное решение. Ведь у Вас в каждом Handler разница только в Where

 .Where(f => f.Attribute != null && f.Attribute.FieldType.IsEnum)
 .Where(f => 
                  f.Attribute != null && (f.Attribute.FieldType.IsPrimitive || f.Attribute.FieldType == typeof(string)))

Полагаю, что можно унифицировать.
Но в целом - годиться.

Понятное, но спорное решение. Ведь у Вас в каждом Handler разница только в Where ``` .Where(f => f.Attribute != null && f.Attribute.FieldType.IsEnum) .Where(f => f.Attribute != null && (f.Attribute.FieldType.IsPrimitive || f.Attribute.FieldType == typeof(string))) ``` Полагаю, что можно унифицировать. Но в целом - годиться.
@ -0,0 +158,4 @@
var fieldsHandler = new FieldsHandler();
var journalHandler = new JournalIdHandler();
enumHandler.Successor = fieldsHandler;
First-time contributor

Вот тут у Вас в тестах - формируется цепочка ответственности. Ок
Но где же решение для:

В рамках данного модуля создать методы
Загрузкой транзакций задень
Загрузка транзакций за месяц
Загрузка транзакций за квартал
Для каждой загрузки сделать замер по времени работы.

Тогда сделайте тесты. Так же, можно сделать менеджер класс, который для определенного варианта сформирует нужную цепочку ответственности.

Вот тут у Вас в тестах - формируется цепочка ответственности. Ок Но где же решение для: ``` В рамках данного модуля создать методы Загрузкой транзакций задень Загрузка транзакций за месяц Загрузка транзакций за квартал Для каждой загрузки сделать замер по времени работы. ``` Тогда сделайте тесты. Так же, можно сделать менеджер класс, который для определенного варианта сформирует нужную цепочку ответственности.
Author
Owner

Обработка за один день сделана за 314 ms
Обработка за один месяц сделана за 814 ms
Обработка за один квартал сделана за 438 ms

Короче вся обработка занимает очень мало времени и всё время уходит на задержку обращения к БД, поэтому показатели нестабильные между 300-800 мс везде.

Обработка за один день сделана за 314 ms Обработка за один месяц сделана за 814 ms Обработка за один квартал сделана за 438 ms Короче вся обработка занимает очень мало времени и всё время уходит на задержку обращения к БД, поэтому показатели нестабильные между 300-800 мс везде.
jezv changed title from WIP: Created DTO logic to Created DTO logic 2026-02-24 19:17:42 +08:00
VolovikovAlexander left a comment
First-time contributor

В целом хорошо. Запросы не верно. Но не страшно. 99% не верно сделали)

В целом хорошо. Запросы не верно. Но не страшно. 99% не верно сделали)
@ -0,0 +23,4 @@
using var connect = new SqlConnection(options.ConnectionString);
connect.Open();
var sql = @"SELECT t2.storeid, t1.PreviewGroupType as transtype, t2.receiptn,
First-time contributor

Не верно. У Вас согласно запросу не 1, 3, 6 месяцев получится. А три раза ДО указанной даты.

Не верно. У Вас согласно запросу не 1, 3, 6 месяцев получится. А три раза ДО указанной даты.
jezv merged commit e4e9eab259 into develop 2026-03-02 20:10:05 +08:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
jezv/VolovikovASPNET!3
No description provided.