Added extansions interfaces #7

Open
jezv wants to merge 8 commits from interfaces into develop
Owner

Задание 9: Проектирование интерфейсов

Создание репозиторией поверх EF - дурной тон. Поэтому я вместо этого решил реализовать расшриения EF.
Т.к. у меня нет RawTransaction, то интерфейсы, без них.
Идея такая: реализовать расшрирения для фильтрации RawTransaction по настройкам и автоматического обновления настроек,
а затем, по отфильтрованным данным, тоже при помощи расшриений всё конвертировать в нормальные, потом
все конвертированные данные вставить при помощи InsertOrIgnore (который кстати умеет быть async и bulk).
Что-то типо такого:

backbone = context.RawData.FilterBySettings(company.settings); # Заготовленная часть запроса, но не выполненная
context.Users.InsertOrIgnore(backbone.getUsers());
context.Nomenculature.InsertOrIgnore(backbone.getNomenculature());
context.Category.InsertOrIgnore(backbone.getCategory());
context.SaveChanges();
## Задание 9: Проектирование интерфейсов Создание репозиторией поверх EF - дурной тон. Поэтому я вместо этого решил реализовать расшриения EF. Т.к. у меня нет RawTransaction, то интерфейсы, без них. Идея такая: реализовать расшрирения для фильтрации RawTransaction по настройкам и автоматического обновления настроек, а затем, по отфильтрованным данным, тоже при помощи расшриений всё конвертировать в нормальные, потом все конвертированные данные вставить при помощи InsertOrIgnore (который кстати умеет быть async и bulk). Что-то типо такого: ```cs backbone = context.RawData.FilterBySettings(company.settings); # Заготовленная часть запроса, но не выполненная context.Users.InsertOrIgnore(backbone.getUsers()); context.Nomenculature.InsertOrIgnore(backbone.getNomenculature()); context.Category.InsertOrIgnore(backbone.getCategory()); context.SaveChanges(); ```
First-time contributor
Компания Microsoft с Вами не согласится)) > Создание репозиторией поверх EF - дурной тон. https://learn.microsoft.com/ru-ru/aspnet/mvc/overview/older-versions/getting-started-with-ef-5-using-mvc-4/implementing-the-repository-and-unit-of-work-patterns-in-an-asp-net-mvc-application https://learn.microsoft.com/en-us/previous-versions/msp-n-p/ff649690(v=pandp.10)?redirectedfrom=MSDN
VolovikovAlexander left a comment

Нет. Все не верно. Нет UML диаграм
Горев Артём Дмитриевич - сделал корректно. У него уточните пжл

Нет. Все не верно. Нет UML диаграм Горев Артём Дмитриевич - сделал корректно. У него уточните пжл
DESCRIPTION.md Outdated
@ -145,0 +156,4 @@
context.Users.InsertOrIgnore(backbone.getUsers());
context.Nomenculature.InsertOrIgnore(backbone.getNomenculature());
context.Category.InsertOrIgnore(backbone.getCategory());
context.SaveChanges();
First-time contributor

А как Вы транзакции будете собирать?
https://git.1ffy.ru/jezv/VolovikovASPNET/src/branch/develop/Src/PersonalAccount.Domain/Models/Transaction.cs


  /// <summary>
  /// Номенклатура (товар/услуга)
  /// </summary>
  [Required] 
  public Nomeculature Item { get; set; } = null!;

  /// <summary>
  /// Работник закрывший транзакцию
  /// </summary>
  [Required] 
  public Employee Employee { get; set; } = null!;

Судя по Вашему описанию, Вы добавите новые категории / номенклатуры и т.д. а дальше?

А как Вы транзакции будете собирать? https://git.1ffy.ru/jezv/VolovikovASPNET/src/branch/develop/Src/PersonalAccount.Domain/Models/Transaction.cs ``` /// <summary> /// Номенклатура (товар/услуга) /// </summary> [Required] public Nomeculature Item { get; set; } = null!; /// <summary> /// Работник закрывший транзакцию /// </summary> [Required] public Employee Employee { get; set; } = null!; ``` Судя по Вашему описанию, Вы добавите новые категории / номенклатуры и т.д. а дальше?
Author
Owner

Да, я изменю потом модели.

Да, я изменю потом модели.
@ -0,0 +5,4 @@
/// <summary>
/// Фильтрует сырые транзакции по настройкам компании
/// <\summary>
public static async Task FilterBySettings(this IQueryable<Settings> settings);
First-time contributor

Нет. Расширение в интерфейс "синтаксически" не сделать. Нужен статический класс
https://learn.microsoft.com/ru-ru/dotnet/csharp/programming-guide/classes-and-structs/extension-methods

Нет. Расширение в интерфейс "синтаксически" не сделать. Нужен статический класс https://learn.microsoft.com/ru-ru/dotnet/csharp/programming-guide/classes-and-structs/extension-methods
Author
Owner

Вы правы, исправлю.

Вы правы, исправлю.
Author
Owner
@VolovikovAlexander wrote in https://git.1ffy.ru/jezv/VolovikovASPNET/pulls/7#issuecomment-218: > Компания Microsoft с Вами не согласится)) > > > Создание репозиторией поверх EF - дурной тон. > > https://learn.microsoft.com/ru-ru/aspnet/mvc/overview/older-versions/getting-started-with-ef-5-using-mvc-4/implementing-the-repository-and-unit-of-work-patterns-in-an-asp-net-mvc-application https://learn.microsoft.com/en-us/previous-versions/msp-n-p/ff649690(v=pandp.10)?redirectedfrom=MSDN Неа, копания микромягких не согласиться с вами: https://learn.microsoft.com/en-us/dotnet/architecture/microservices/microservice-ddd-cqrs-patterns/infrastructure-persistence-layer-implementation-entity-framework-core А также целая куча разработчиков: https://stackoverflow.com/questions/15734485/is-there-a-reason-for-using-the-repository-pattern-with-entity-framework-if-i-kn https://habr.com/ru/articles/335856/
First-time contributor

Спасибо за источник, Я ознакомился.

https://learn.microsoft.com/en-us/dotnet/architecture/microservices/microservice-ddd-cqrs-patterns/infrastructure-persistence-layer-implementation-entity-framework-core

В данном статье не утверждается, что шаблон "Репозиторий" - это прямо "зло", а идет сравнение с другим шаблоном программного кода - Query Specification
Который лишен перечисленных выше недостатков.

Если Вы выполните текущую задачу
https://gitverse.ru/VolovikovAlexander/PersonalAccount2026/content/master/Step04.md
используя шаблон Query Specification
+ 5 баллов

Спасибо за источник, Я ознакомился. https://learn.microsoft.com/en-us/dotnet/architecture/microservices/microservice-ddd-cqrs-patterns/infrastructure-persistence-layer-implementation-entity-framework-core В данном статье не утверждается, что шаблон "Репозиторий" - это прямо "зло", а идет сравнение с другим шаблоном программного кода - Query Specification Который лишен перечисленных выше недостатков. Если Вы выполните текущую задачу https://gitverse.ru/VolovikovAlexander/PersonalAccount2026/content/master/Step04.md используя шаблон Query Specification **+ 5 баллов**
VolovikovAlexander left a comment

Нет хорошего подробного опиания. Нет диграим. Не понятно, как будет строиться запись данных. Этого нет в указанных файлах, да и файлы называются IExtansionCategory, а внутри название класса другое.
Задумка ясна. Действуйте.

Нет хорошего подробного опиания. Нет диграим. Не понятно, как будет строиться запись данных. Этого нет в указанных файлах, да и файлы называются IExtansionCategory, а внутри название класса другое. Задумка ясна. Действуйте.
@ -0,0 +6,4 @@
/// <summary>
/// Конвертирует сырые номенклатуры в нормальные.
/// </summary>
public static IQueryable<JournalNoteDto> getNomeculature(this DbSet<JournalNoteDto> journalNotes)
First-time contributor

Тогда в качестве аргумента нужно сделать

IQueryable<JournalNoteDto>

Итого у Вас будет конструкция вида

var result = source.FilterBySettings( .... ).getNomeculature();

Тогда в качестве аргумента нужно сделать `IQueryable<JournalNoteDto> ` Итого у Вас будет конструкция вида `var result = source.FilterBySettings( .... ).getNomeculature();`
Author
Owner
  1. Переписал работу appsettings.json, теперь он один на все приложения в корне и просто туда дублируется при запуске. Добавил его правильную, новую обработку в DI.
  2. Переписал консольное приложение:
    вместо ADO.NET -> Цепочка ответсвенности -> модель через атрибуты,
    сделал просто ViewSetupService, который создаёт View при запуске, а потом через EF берём от туда уже готовые модели. Так получилось гараздо быстрее.
  3. Вынес все бенчмарки в PersonakAccount.Performance
  4. Написал веб-сокет сервер на PersonalAccount.Api
  5. В консольном приложении реализовал Producer-consumer шаблон проектирования, для связывания считывания по батчам из БД и отправки на серверную часть.
1. Переписал работу appsettings.json, теперь он один на все приложения в корне и просто туда дублируется при запуске. Добавил его правильную, новую обработку в DI. 2. Переписал консольное приложение: вместо ADO.NET -> Цепочка ответсвенности -> модель через атрибуты, сделал просто ViewSetupService, который создаёт View при запуске, а потом через EF берём от туда уже готовые модели. Так получилось гараздо быстрее. 3. Вынес все бенчмарки в PersonakAccount.Performance 4. Написал веб-сокет сервер на PersonalAccount.Api 5. В консольном приложении реализовал Producer-consumer шаблон проектирования, для связывания считывания по батчам из БД и отправки на серверную часть.
This pull request can be merged automatically.
You are not authorized to merge this pull request.
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin interfaces:interfaces
git switch interfaces

Merge

Merge the changes and update on Forgejo.

Warning: The "Autodetect manual merge" setting is not enabled for this repository, you will have to mark this pull request as manually merged afterwards.

git switch develop
git merge --no-ff interfaces
git switch interfaces
git rebase develop
git switch develop
git merge --ff-only interfaces
git switch interfaces
git rebase develop
git switch develop
git merge --no-ff interfaces
git switch develop
git merge --squash interfaces
git switch develop
git merge --ff-only interfaces
git switch develop
git merge interfaces
git push origin develop
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!7
No description provided.