You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+7-4Lines changed: 7 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -5,6 +5,10 @@
5
5
6
6
Система квалификационной классификации участников экспертных сообществ на основе хорошо зарекомендовавшего себя на практике алгоритма спортивной разрядности, где уровень мастерства спортсмена определяется уровнем мастерства других спортсменов.
7
7
8
+
## Golang DDD Framework
9
+
10
+
Общие файлы проекта были выделены в отдельный [Golang DDD Framework](https://github.com/krew-solutions/ascetic-ddd-go).
11
+
8
12
9
13
## Бизнес-требования
10
14
@@ -135,17 +139,16 @@ Karma bot for Slack: https://karmabot.chat/
135
139
136
140
Specification Pattern с применением Abstract [Expression Tree](https://docs.microsoft.com/ru-ru/dotnet/csharp/programming-guide/concepts/expression-trees/).
-[Конкретная реализация inMemory evaluator без использования рефлекции](./grade/internal/domain/endorser/specifications.go)
140
-
-[Абстрактная реализация строителя PostgreSQL-запроса с учетом приоритетов операторов для исключения лишних скобочек](./grade/internal/seedwork/infrastructure/specification)
144
+
-[Абстрактная реализация строителя PostgreSQL-запроса с учетом приоритетов операторов для исключения лишних скобочек](https://github.com/krew-solutions/ascetic-ddd-go/tree/main/asceticddd/specification/infrastructure)
141
145
-[Конкретная реализация строителя PostgreSQL-запроса с гибкой возможностью маппинга атрибутов](./grade/internal/infrastructure/repositories/endorser/endorser_specifications.go)
142
146
143
147
Заложена (но до конца не продемонстрирована) возможность просмотра коллекций сущностей внутри агрегата и поиск удовлетворения условия хотя бы одним из элементов коллекции.
144
148
145
149
Подробности см. [здесь](https://dckms.github.io/system-architecture/emacsway/it/ddd/grade/domain/specification.html).
146
150
147
151
148
-
149
152
### Aggregate Encapsulation
150
153
151
154
Использование Mediator Pattern (часто ошибочно воспринимаемый за Memento Pattern) для гарантирования инкапсуляции агрегата:
RDBMS устроена немного по другому, нежели агрегато-(документо-)ориентированные хранилища на LSM-tree, - чем больше записей сохраняется за один коммит, тем лучше Performance.
171
174
Главное, чтоб не страдал уровень параллелизма, не возникали ожидания и взаимные блокировки.
172
175
А как сказал Nick Tune, на операциях Insert взаимные блокировки и ожидания впринципе невозможны, и такие запросы можно пакетировать, что обычно в ORM выполняет UoW.
173
-
В данном проекте [продемонстрировано, как этого можно достигнуть без ORM](https://github.com/emacsway/grade/tree/main/grade/internal/seedwork/infrastructure/repositories/batch), а заодно и решить проблему N+1 при загрузке агрегатов из БД.
176
+
В данном проекте [продемонстрировано, как этого можно достигнуть без ORM](https://github.com/krew-solutions/ascetic-ddd-go/tree/main/asceticddd/batch), а заодно и решить проблему N+1 при загрузке агрегатов из БД.
174
177
175
178
Подробности см. [здесь](https://dckms.github.io/system-architecture/emacsway/it/ddd/tactical-design/domain-model/domain-events/domain-events-in-ddd.html#performance).
0 commit comments