Шикарная статья для тех, кто намерен использовать PostgreSQL JSONB для хранения Агрегатов:
"Борьба с TOAST или будущее JSONB в PostgreSQL"
- https://habr.com/ru/company/oleg-bunin/blog/646987/
Статья является продолжением статьи
"Проклятье TOAST и с каким маслом его ест JSONB" by Oleg Bartunov
- https://habr.com/ru/company/oleg-bunin/blog/597187/
Обе статьи уместны в контексте статьи "The Ideal Domain-Driven Design Aggregate Store?" by Vaughn Vernon
- https://kalele.io/the-ideal-domain-driven-design-aggregate-store/
#DDD #Database #PostgreSQL
"Борьба с TOAST или будущее JSONB в PostgreSQL"
- https://habr.com/ru/company/oleg-bunin/blog/646987/
Статья является продолжением статьи
"Проклятье TOAST и с каким маслом его ест JSONB" by Oleg Bartunov
- https://habr.com/ru/company/oleg-bunin/blog/597187/
Обе статьи уместны в контексте статьи "The Ideal Domain-Driven Design Aggregate Store?" by Vaughn Vernon
- https://kalele.io/the-ideal-domain-driven-design-aggregate-store/
#DDD #Database #PostgreSQL
Хабр
Борьба с TOAST или будущее JSONB в PostgreSQL
В PostgreSQL есть два типа данных: JSON и JSONB. Первый формат является текстовым хранилищем, в котором json хранится "as is", второй — бинарным, в нем ключи отсортированы (сначала по...
👍4
"UUID версии 7, или как не потеряться во времени при создании идентификатора"
- https://habr.com/ru/post/572700/
Интересны комментарии статьи и ссылки в них.
Thanks to @pantafive )) Кстати, у него недавно появился тг-канал, посвященный разработке на Golang:
- https://news.1rj.ru/str/smokycode
- https://habr.com/ru/post/572700/
Интересны комментарии статьи и ссылки в них.
Thanks to @pantafive )) Кстати, у него недавно появился тг-канал, посвященный разработке на Golang:
- https://news.1rj.ru/str/smokycode
Хабр
UUID версии 7, или как не потеряться во времени при создании идентификатора
Будьте аккуратны, при сохранении даты в UUID В течение многих лет я противостоял засилью UUID как ключей в базах данных, но со временем и практикой до меня дошло. Они действительно удобны, когда речь...
😁2👍1🔥1
Eric Evens в своей синей книге пишет, что, в общем-то не очень хорошо, когда Specification Pattern осведомлен об SQL
💬 "Now this design has some problems. Most important, the details of the table structure have leaked into the DOMAIN LAYER ; they should be isolated in a mapping layer that relates the domain objects to the relational tables. Implicitly duplicating that information here could hurt the modifiability and maintainability of the Invoice and Customer objects, because any change to their mappings now have to be tracked in more than one place. But this example is a simple illustration of how to keep the rule in just one place. Some object-relational mapping frameworks provide the means to express such a query in terms of the model objects and attributes, generating the actual SQL in the infrastructure layer. This would let us have our cake and eat it too."
— "Domain-Driven Design: Tackling Complexity in the Heart of Software" by Eric Evans
В C# для этого есть мощный механизм Expression Tree, что значительно упрощает дело. Примеры хорошо демонстрирует Vladimir Khorikov:
- https://enterprisecraftsmanship.com/posts/specification-pattern-c-implementation/
- https://enterprisecraftsmanship.com/posts/specification-pattern-always-valid-domain-model/
- https://github.com/vkhorikov/SpecificationPattern
- https://github.com/vkhorikov/SpecPattern
В Golang дело немного усложняется отсутствием нативной поддержки Expression Tree, и поддержку этих функций приходится брать на себя.
В общем, как получилась первая итерация (пока еще не финал), можно посмотреть здесь:
Абстрактная реализация + inMemory evaluator:
- https://github.com/emacsway/grade/blob/main/grade/internal/domain/seedwork/specification/
Конкретная реализация inMemory evaluator без использования рефлекции:
- https://github.com/emacsway/grade/blob/main/grade/internal/domain/endorser/specifications.go
Абстрактная реализация строителя PostgreSQL-запроса с учетом приоритетов операторов для исключения лишних скобочек:
- https://github.com/emacsway/grade/blob/main/grade/internal/infrastructure/specification/
Конкретная реализация строителя PostgreSQL-запроса с гибкой возможностью маппинга атрибутов:
- https://github.com/emacsway/grade/blob/main/grade/internal/infrastructure/repositories/endorser/endorser_specifications.go
Заложена (но до конца не раскрыта) возможность просмотра коллекций сущностей внутри агрегата и поиск удовлетворения условия хотя бы одним из элементов коллекции.
#DDD #SoftwareDesign
💬 "Now this design has some problems. Most important, the details of the table structure have leaked into the DOMAIN LAYER ; they should be isolated in a mapping layer that relates the domain objects to the relational tables. Implicitly duplicating that information here could hurt the modifiability and maintainability of the Invoice and Customer objects, because any change to their mappings now have to be tracked in more than one place. But this example is a simple illustration of how to keep the rule in just one place. Some object-relational mapping frameworks provide the means to express such a query in terms of the model objects and attributes, generating the actual SQL in the infrastructure layer. This would let us have our cake and eat it too."
— "Domain-Driven Design: Tackling Complexity in the Heart of Software" by Eric Evans
В C# для этого есть мощный механизм Expression Tree, что значительно упрощает дело. Примеры хорошо демонстрирует Vladimir Khorikov:
- https://enterprisecraftsmanship.com/posts/specification-pattern-c-implementation/
- https://enterprisecraftsmanship.com/posts/specification-pattern-always-valid-domain-model/
- https://github.com/vkhorikov/SpecificationPattern
- https://github.com/vkhorikov/SpecPattern
В Golang дело немного усложняется отсутствием нативной поддержки Expression Tree, и поддержку этих функций приходится брать на себя.
В общем, как получилась первая итерация (пока еще не финал), можно посмотреть здесь:
Абстрактная реализация + inMemory evaluator:
- https://github.com/emacsway/grade/blob/main/grade/internal/domain/seedwork/specification/
Конкретная реализация inMemory evaluator без использования рефлекции:
- https://github.com/emacsway/grade/blob/main/grade/internal/domain/endorser/specifications.go
Абстрактная реализация строителя PostgreSQL-запроса с учетом приоритетов операторов для исключения лишних скобочек:
- https://github.com/emacsway/grade/blob/main/grade/internal/infrastructure/specification/
Конкретная реализация строителя PostgreSQL-запроса с гибкой возможностью маппинга атрибутов:
- https://github.com/emacsway/grade/blob/main/grade/internal/infrastructure/repositories/endorser/endorser_specifications.go
Заложена (но до конца не раскрыта) возможность просмотра коллекций сущностей внутри агрегата и поиск удовлетворения условия хотя бы одним из элементов коллекции.
#DDD #SoftwareDesign
Docs
Деревья выражений - C#
Узнайте о деревьях выражений. Узнайте, как компилировать и запускать код, представленный этими структурами данных, где каждый узел является выражением.
🔥8👍2
emacsway-log: Software Design, Clean Architecture, DDD, Microservice Architecture, Distributed Systems, XP, Agile, etc.
Eric Evens в своей синей книге пишет, что, в общем-то не очень хорошо, когда Specification Pattern осведомлен об SQL 💬 "Now this design has some problems. Most important, the details of the table structure have leaked into the DOMAIN LAYER ; they should…
Идея экспортера, предложенная by Allen Holub:
- https://www.infoworld.com/article/2072302/more-on-getters-and-setters.html
удачно ложится на полностью искапсулированный объект построения SQL-запроса:
- https://github.com/emacsway/grade/blob/main/grade/internal/infrastructure/repositories/recognizer/insert_query.go
#DDD #OOP #SoftwareDesign
- https://www.infoworld.com/article/2072302/more-on-getters-and-setters.html
удачно ложится на полностью искапсулированный объект построения SQL-запроса:
- https://github.com/emacsway/grade/blob/main/grade/internal/infrastructure/repositories/recognizer/insert_query.go
#DDD #OOP #SoftwareDesign
InfoWorld
More on getters and setters
Allen Holub's past Java Toolbox column, " Why Getter and Setter Methods Are Evil," discussed the downside of the getter/setter idiom. That article presented a design-level solution. (By keeping your design in the problem domain as long as possible and using…
🔥3👍1
💬 "Sometimes, to improve performance, or more likely to tighten security, queries may be implemented on the server as stored procedures. In that case, the SPECIFICATION could carry only the parameters allowed by the stored procedure. For all that, there is no difference in the model between these various implementations. The choice of implementation is free except where specifically constrained by the model. The price comes in a more cumbersome way of writing and maintaining queries.
This discussion barely scratches the surface of the challenges of combining SPECIFICATIONS with databases, and I'll make no attempt to cover all the considerations that may arise. I just want to give a taste of the kind of choices that have to be made."
— "Domain-Driven Design: Tackling Complexity in the Heart of Software" by Eric Evans
Вот так примерно отвечает интеллигентный человек на нечто подобное тому, что в свое время сделала компания LinguaLeo.
#DDD #SoftwareDesign
This discussion barely scratches the surface of the challenges of combining SPECIFICATIONS with databases, and I'll make no attempt to cover all the considerations that may arise. I just want to give a taste of the kind of choices that have to be made."
— "Domain-Driven Design: Tackling Complexity in the Heart of Software" by Eric Evans
Вот так примерно отвечает интеллигентный человек на нечто подобное тому, что в свое время сделала компания LinguaLeo.
#DDD #SoftwareDesign
👍3😁2
Все основные RFC по LDAP в одном месте:
- https://gitlab.com/samba-team/samba/-/tree/master/source4/ldap_server/devdocs
- https://pro-ldap.ru/tr/rfc/ (с переводами)
- https://ldap.com/ldap-related-rfcs/
- https://www.opennet.ru/docs/RUS/ldap_apacheds/apc/
- https://metacpan.org/dist/perl-ldap/view/lib/Net/LDAP/RFC.pod
- https://ldapwiki.com/wiki/LDAP%20Server%20Standards%20and%20Specifications
#LDAP
- https://gitlab.com/samba-team/samba/-/tree/master/source4/ldap_server/devdocs
- https://pro-ldap.ru/tr/rfc/ (с переводами)
- https://ldap.com/ldap-related-rfcs/
- https://www.opennet.ru/docs/RUS/ldap_apacheds/apc/
- https://metacpan.org/dist/perl-ldap/view/lib/Net/LDAP/RFC.pod
- https://ldapwiki.com/wiki/LDAP%20Server%20Standards%20and%20Specifications
#LDAP
GitLab
source4/ldap_server/devdocs · master · The Samba Team / Samba · GitLab
https://gitlab.com/samba-team/samba is the Official GitLab mirror of Samba https://www.samba.org
Forwarded from Evgenia
🔥22👎1🤩1
Forwarded from Russian Association of Software Architects (Eugene Lukianov)
Выступление одного из учередителей нашего Объединения на ArchDays Recap https://www.youtube.com/watch?v=NSN-NXfbEqM
YouTube
Многоликий DDD — Сергей Баранов
👉 Больше полезного — на конференции ArchDays https://archconf.ru/baranov_yt.
Domain Driven Design всегда имел высокий порог входа. Сложность изучения и применения усугублялась туманностью объяснений выгод как для коллег-разработчиков, так и для архитекторов…
Domain Driven Design всегда имел высокий порог входа. Сложность изучения и применения усугублялась туманностью объяснений выгод как для коллег-разработчиков, так и для архитекторов…
👍5
Forwarded from careerspace
Коль уж наш словарь вам по нраву пришелся, то мы продолжение написали! Да не одни, а с Типичным программистом (ученым писарем, стало быть).
🎉11👎5👍2