Added extansions interfaces #7
No reviewers
Labels
No labels
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
jezv/VolovikovASPNET!7
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "interfaces"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Задание 9: Проектирование интерфейсов
Создание репозиторией поверх EF - дурной тон. Поэтому я вместо этого решил реализовать расшриения EF.
Т.к. у меня нет RawTransaction, то интерфейсы, без них.
Идея такая: реализовать расшрирения для фильтрации RawTransaction по настройкам и автоматического обновления настроек,
а затем, по отфильтрованным данным, тоже при помощи расшриений всё конвертировать в нормальные, потом
все конвертированные данные вставить при помощи InsertOrIgnore (который кстати умеет быть async и bulk).
Что-то типо такого:
Компания Microsoft с Вами не согласится))
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
Нет. Все не верно. Нет UML диаграм
Горев Артём Дмитриевич - сделал корректно. У него уточните пжл
@ -145,0 +156,4 @@context.Users.InsertOrIgnore(backbone.getUsers());context.Nomenculature.InsertOrIgnore(backbone.getNomenculature());context.Category.InsertOrIgnore(backbone.getCategory());context.SaveChanges();А как Вы транзакции будете собирать?
https://git.1ffy.ru/jezv/VolovikovASPNET/src/branch/develop/Src/PersonalAccount.Domain/Models/Transaction.cs
Судя по Вашему описанию, Вы добавите новые категории / номенклатуры и т.д. а дальше?
Да, я изменю потом модели.
@ -0,0 +5,4 @@/// <summary>/// Фильтрует сырые транзакции по настройкам компании/// <\summary>public static async Task FilterBySettings(this IQueryable<Settings> settings);Нет. Расширение в интерфейс "синтаксически" не сделать. Нужен статический класс
https://learn.microsoft.com/ru-ru/dotnet/csharp/programming-guide/classes-and-structs/extension-methods
Вы правы, исправлю.
@VolovikovAlexander wrote in #7 (comment):
Неа, копания микромягких не согласиться с вами:
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/
Спасибо за источник, Я ознакомился.
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 баллов
Нет хорошего подробного опиания. Нет диграим. Не понятно, как будет строиться запись данных. Этого нет в указанных файлах, да и файлы называются IExtansionCategory, а внутри название класса другое.
Задумка ясна. Действуйте.
@ -0,0 +6,4 @@/// <summary>/// Конвертирует сырые номенклатуры в нормальные./// </summary>public static IQueryable<JournalNoteDto> getNomeculature(this DbSet<JournalNoteDto> journalNotes)Тогда в качестве аргумента нужно сделать
IQueryable<JournalNoteDto>Итого у Вас будет конструкция вида
var result = source.FilterBySettings( .... ).getNomeculature();вместо ADO.NET -> Цепочка ответсвенности -> модель через атрибуты,
сделал просто ViewSetupService, который создаёт View при запуске, а потом через EF берём от туда уже готовые модели. Так получилось гараздо быстрее.
View command line instructions
Checkout
From your project repository, check out a new branch and test the changes.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.