emacsway-log: Software Design, Clean Architecture, DDD, Microservice Architecture, Distributed Systems, XP, Agile, etc.
Решение? 📝 "While not discussed in detail here, Message Metadata can be used to achieve causal consistency [AMC-Causal Consistency https://queue.acm.org/detail.cfm?id=2610533 ] among Messages (130) that must be replicated across a network with full ordering…
Превосходная статья по Causal Consistency (Causal Dependencies) доступным языком:
"HighLoad++, Михаил Тюленев (MongoDB): Causal consistency: от теории к практике"
https://habr.com/ru/company/ua-hosting/blog/487638/
[UPDATE]: Есть ещё видео-версия:
- https://youtu.be/UnAprFMX1d4
#DDD #Microservices #DistributedSystems #EIP
"HighLoad++, Михаил Тюленев (MongoDB): Causal consistency: от теории к практике"
https://habr.com/ru/company/ua-hosting/blog/487638/
[UPDATE]: Есть ещё видео-версия:
- https://youtu.be/UnAprFMX1d4
#DDD #Microservices #DistributedSystems #EIP
Хабр
HighLoad++, Михаил Тюленев (MongoDB): Causal consistency: от теории к практике
Следующая конференция HighLoad++ пройдет 6 и 7 апреля 2020 года в Санкт-Петербурге. Подробности и билеты по ссылке . HighLoad++ Siberia 2019. Зал «Красноярск». 25 июня, 12:00. Тезисы и презентация ....
emacsway-log: Software Design, Clean Architecture, DDD, Microservice Architecture, Distributed Systems, XP, Agile, etc.
В продолжение темы топологии и платформенных команд - сегодня вышла статья от ребят из ThoughtWorks на сайте M.Fowler: "Mind the platform execution gap. Prerequisite capabilities for successful platform strategies" by Cristóbal García García, Chris Ford …
Немного о топологии DevOps команд в масштабируемом Agile:
"What Team Structure is Right for DevOps to Flourish?" by Matthew Skelton
https://blog.matthewskelton.net/2013/10/22/what-team-structure-is-right-for-devops-to-flourish/
"DevOps Topologies"
https://web.devopstopologies.com/
"System Team"
https://www.scaledagileframework.com/system-team/
#Management #SoftwareArchitecture #Agile #DevOps
"What Team Structure is Right for DevOps to Flourish?" by Matthew Skelton
https://blog.matthewskelton.net/2013/10/22/what-team-structure-is-right-for-devops-to-flourish/
"DevOps Topologies"
https://web.devopstopologies.com/
"System Team"
https://www.scaledagileframework.com/system-team/
#Management #SoftwareArchitecture #Agile #DevOps
Matthew Skelton
What Team Structure is Right for DevOps to Flourish?
Update (2022): my company Conflux now offers consulting and training around DevOps topologies and related practices like Team Topologies. Update (2019): I have co-authored a book – Team Topol…
emacsway-log: Software Design, Clean Architecture, DDD, Microservice Architecture, Distributed Systems, XP, Agile, etc.
Еще немного на тему Operational Transform and CRDT. В конце т.н. "Красной Книги" - "Implementing Domain-Driven Design", Vaughn Vernon рассматривает автоматическое слияние изменений агрегата (автоматический резольв конфликтов версий агрегата), что позволяет…
Превосходный справочно-информационный ресурс по вопросам CRDT от Martin Kleppmann:
- https://crdt.tech/
Source Code:
- https://github.com/ept/crdt-website
Кстати, тем, кто читает его книгу "Designing Data-Intensive Applications", было бы интересно знать, что у него есть проект на GitHub, где он актуализирует все ссылки:
- https://github.com/ept/ddia-references/commit/917f91fbcfe421d0cb2e309625aaf058d910e679
#DistributedSystems #DDD #Microservices #CRDT
- https://crdt.tech/
Source Code:
- https://github.com/ept/crdt-website
Кстати, тем, кто читает его книгу "Designing Data-Intensive Applications", было бы интересно знать, что у него есть проект на GitHub, где он актуализирует все ссылки:
- https://github.com/ept/ddia-references/commit/917f91fbcfe421d0cb2e309625aaf058d910e679
#DistributedSystems #DDD #Microservices #CRDT
Conflict-free Replicated Data Types
About CRDTs • Conflict-free Replicated Data Types
Resources and community around CRDT technology — papers, blog posts, code and more.
emacsway-log: Software Design, Clean Architecture, DDD, Microservice Architecture, Distributed Systems, XP, Agile, etc.
ArchiMate, трассировка требований и Agile. В одном из предыдущих сообщений ( https://news.1rj.ru/str/emacsway_log/501 ), рассматривался стандарт ISO/IEC/IEEE 12207:2017 SDLC в отношении применения автоматизированных средств управления требованиями в Agile-моделе разработки…
Список литературы по аналитике:
- https://www.volere.org/resources/books/
- https://systems.education/books
Список инструментов для управления требованиями:
- https://www.volere.org/tools/
- https://www.volere.org/requirements-tools/
Шаблоны спецификаций требований:
- https://www.volere.org/templates/
#SoftwareArchitecture #Analysis #SoftwareRequirements
- https://www.volere.org/resources/books/
- https://systems.education/books
Список инструментов для управления требованиями:
- https://www.volere.org/tools/
- https://www.volere.org/requirements-tools/
Шаблоны спецификаций требований:
- https://www.volere.org/templates/
#SoftwareArchitecture #Analysis #SoftwareRequirements
Volere Requirements
Books – Volere Requirements
DDDevotion
Саша Поломодов (руководитель управления разработки цифровых экосистем в Тинькофф) много читает и делится впечатлениями от прочитанного. В последнем посте вы найдете отличную подборку книг по архитектуре и дизайну ПО. Лично я прочитал чуть больше половины…
Alexander Polomodov (Director of digital ecosystem development department at Tinkoff), опубликовал на днях пост:
"Современные подходы к разработке программного обеспечения"
Интересен список литературы в конце статьи.
#SoftwareArchitecture #SoftwareDesign
"Современные подходы к разработке программного обеспечения"
Интересен список литературы в конце статьи.
#SoftwareArchitecture #SoftwareDesign
Medium
Современные подходы к разработке программного обеспечения
В октябре прошлого года я выступал на DevFest с докладом на тему, вынесенную в заголовок статьи. Само выступление доступно на Youtube, а…
Forwarded from Архитектура ИТ-решений
Думаю, что это архитектурное описание вполне можно использовать в качестве примера https://github.com/team7katas/sysopsquad Идея со стикерами нефункциональных требований, так вообще зачетная ;-)
GitHub
GitHub - team7katas/sysopsquad: The Sysops Squad Architectural Kata
The Sysops Squad Architectural Kata. Contribute to team7katas/sysopsquad development by creating an account on GitHub.
emacsway-log: Software Design, Clean Architecture, DDD, Microservice Architecture, Distributed Systems, XP, Agile, etc.
Список литературы по аналитике: - https://www.volere.org/resources/books/ - https://systems.education/books Список инструментов для управления требованиями: - https://www.volere.org/tools/ - https://www.volere.org/requirements-tools/ Шаблоны спецификаций…
Два интересных расширения Sphinx-doc для трассировки требований:
1) https://sphinxcontrib-needs.readthedocs.io/en/latest/
2) https://0x6d64.github.io/sphinx-traceability-example/
Первое из них позволяет превратить Sphinx-doc в практически полноценную Open Source систему управления проектом, построенную на одних только текстовых файлах.
P.S.: Ранее Sphinx-doc уже упоминался в контексте систем управления знаниями.
#SoftwareArchitecture #Analysis #SoftwareRequirements
1) https://sphinxcontrib-needs.readthedocs.io/en/latest/
2) https://0x6d64.github.io/sphinx-traceability-example/
Первое из них позволяет превратить Sphinx-doc в практически полноценную Open Source систему управления проектом, построенную на одних только текстовых файлах.
P.S.: Ранее Sphinx-doc уже упоминался в контексте систем управления знаниями.
#SoftwareArchitecture #Analysis #SoftwareRequirements
Telegram
emacsway-log: Software Design, Clean Architecture, DDD, Microservice Architecture, Distributed Systems, XP, Agile, etc.
Мое изучение систем управления знаниями переросло в мини-проект:
- https://github.com/emacsway/dckms-template
Он возник потому, что сегодня мы много пишем там, где не ищем, и ищем там, где стали писать мало. Я, в этом отношении, не являюсь исключением.
…
- https://github.com/emacsway/dckms-template
Он возник потому, что сегодня мы много пишем там, где не ищем, и ищем там, где стали писать мало. Я, в этом отношении, не являюсь исключением.
…
emacsway-log: Software Design, Clean Architecture, DDD, Microservice Architecture, Distributed Systems, XP, Agile, etc.
С поддержкой Generics в Golang открываются новые возможности в использовании приемов функционального программирования. См. главу "Monadic Error Handling": https://awalterschulze.github.io/blog/post/monads-for-goprogrammers/ Это вынуждает по новому взглянуть…
"Functional programming in Go with generics"
- https://ani.dev/2021/05/25/functional-programming-in-go-with-generics/
"Why Go Getting Generics Will Not Change Idiomatic Go"
- http://www.jerf.org/iri/post/2955
#FunctionalProgramming #Golang
- https://ani.dev/2021/05/25/functional-programming-in-go-with-generics/
"Why Go Getting Generics Will Not Change Idiomatic Go"
- http://www.jerf.org/iri/post/2955
#FunctionalProgramming #Golang
ani.dev
Functional programming in Go with generics | ani.dev
emacsway-log: Software Design, Clean Architecture, DDD, Microservice Architecture, Distributed Systems, XP, Agile, etc.
Хочу обратить внимание на одну, на мой взгляд, недооцененную сообществом книгу по алгоритмам. “Introduction to the Design and Analysis of Algorithms” 3d edition by A.Levitin Принципиальной иной взгляд на классификацию алгортимов, хотя автор утверждает, что…
Визуализатор алгоритмов
- https://www.cs.usfca.edu/~galles/visualization/
Visualizing Algorithms
The best way to understand complex data structures is to see them in action. We've developed interactive animations for a variety of data structures and algorithms. Our visualization tool is written in javanoscript using the HTML5 canvas element, and run in just about any modern browser -- including iOS devices like the iPhone and iPad, and even the web browser in the Kindle! (The frame rate is low enough in the Kindle that the visualizations aren't terribly useful, but the tree-based visualizations -- BSTs and AVL Trees -- seem to work well enough)
#Algorithms
- https://www.cs.usfca.edu/~galles/visualization/
Visualizing Algorithms
The best way to understand complex data structures is to see them in action. We've developed interactive animations for a variety of data structures and algorithms. Our visualization tool is written in javanoscript using the HTML5 canvas element, and run in just about any modern browser -- including iOS devices like the iPhone and iPad, and even the web browser in the Kindle! (The frame rate is low enough in the Kindle that the visualizations aren't terribly useful, but the tree-based visualizations -- BSTs and AVL Trees -- seem to work well enough)
#Algorithms
emacsway-log: Software Design, Clean Architecture, DDD, Microservice Architecture, Distributed Systems, XP, Agile, etc.
Тут у меня как-то было дело, что осталась незамеченной одна архи-полезная ссылочка, которую я, вероятно, в спешке неподобающе оформил. Исправляюсь. PostgresPro представил три книги для трех разных уровней подготовленности читателей, от совершенно неосведомленного…
"A pure golang SQL database for database theory research"
- https://github.com/auxten/go-sqldb
#Database #Golang
- https://github.com/auxten/go-sqldb
#Database #Golang
GitHub
GitHub - auxten/go-sqldb: A pure golang SQL database for database theory research
A pure golang SQL database for database theory research - auxten/go-sqldb
"Snapshots in Event Sourcing" by Oskar Dudycz
https://www.eventstore.com/blog/snapshots-in-event-sourcing
#DDD #EventSourcing #Microservices #SoftwareDesign #SoftwareArchitecture
https://www.eventstore.com/blog/snapshots-in-event-sourcing
#DDD #EventSourcing #Microservices #SoftwareDesign #SoftwareArchitecture
www.kurrent.io
Snapshots in Event Sourcing
Developer Advocacy Oskar Dudycz explains snapshots: when you should and shouldn't use them, their pros and cons, and why you should use them tactically.
Forwarded from DDDevotion
Вы наверняка слышали про Уди Дахана, он эксперт по SOA и DDD. Его курс по распределенным системам снова доступен бесплатно. Отличный курс, много информации, примеров и разборов. Рекомендую разработчикам претендующим на синьорство и архитектуру. Все примеры из мира дотнет, но прям language-specific частей немного.
https://learn.particular.net/courses/distributed-systems-design-fundamentals-online#cta-block
Enjoy!
https://learn.particular.net/courses/distributed-systems-design-fundamentals-online#cta-block
Enjoy!
Online education by Particular Software
Distributed Systems Design Fundamentals
Distributed Systems Design Fundamentals provides the building blocks for developing scalable, resilient, and reliable software systems.
emacsway-log: Software Design, Clean Architecture, DDD, Microservice Architecture, Distributed Systems, XP, Agile, etc.
"Always-Valid Domain Model" by Vladimir Khorikov https://enterprisecraftsmanship.com/posts/always-valid-domain-model/ #DDD #SoftwareDesign
Vladimir Khorikov опубликовал статью на актуальную тему "Nulls in Value Objects":
- https://enterprisecraftsmanship.com/posts/nulls-in-value-objects/
Статья разбирает, когда использовать Null-значение, а когда - NullObject-pattern. И какую роль здесь играет Maybe monad.
#DDD #SoftwareDesign #Microservices
- https://enterprisecraftsmanship.com/posts/nulls-in-value-objects/
Статья разбирает, когда использовать Null-значение, а когда - NullObject-pattern. И какую роль здесь играет Maybe monad.
#DDD #SoftwareDesign #Microservices
Enterprise Craftsmanship
Nulls in Value Objects
Today, we’ll discuss an interesting use case of handling nulls in value objects. Should you put null inside the value objects themselves or decorate those value objects using the nullable reference type notation (? or Maybe)?
Jimmy Bogard начал начал работать над циклом статей с демонстрационным кодом "Domain-Driven Refactoring"
- https://jimmybogard.com/domain-driven-refactoring-intro/
#DDD #SoftwareDesign
- https://jimmybogard.com/domain-driven-refactoring-intro/
#DDD #SoftwareDesign
Jimmy Bogard
Domain-Driven Refactoring: Intro
Posts in this series:
* Intro
* Procedural Beginnings
* Long Methods
* Extracting Domain Services
* Defactoring and Pushing Behavior Down
* Encapsulating Data
* Encapsulating Collections
A common theme in domain-driven design are design patterns.…
* Intro
* Procedural Beginnings
* Long Methods
* Extracting Domain Services
* Defactoring and Pushing Behavior Down
* Encapsulating Data
* Encapsulating Collections
A common theme in domain-driven design are design patterns.…
emacsway-log: Software Design, Clean Architecture, DDD, Microservice Architecture, Distributed Systems, XP, Agile, etc.
Код-генератор, трансформирующий AsyncAPI в Golang-код: - https://github.com/asyncapi/go-template - https://github.com/asyncapi/generator Очень гармонично сочетается с генератором Golang кода по OpenAPI и C4-model: - https://news.1rj.ru/str/emacsway_log/170 #Microservices…
По материалам доклада моего коллеги на GopherCon Russia 2020, была написана статья "Как писать кодогенераторы в Go"
- https://habr.com/ru/company/omprussia/blog/558690/
#Golang
- https://habr.com/ru/company/omprussia/blog/558690/
#Golang
Хабр
Как писать кодогенераторы в Go
Однообразный код писать неинтересно, нудно, но приходится. Испокон веков изворотливые программисты ищут Святой Грааль формализма, позволяющего переложить рутинные задачи на машину, писать только раз и...
M.Fowler решил разъяснить, чем отличается integration test от sociable unit test, в новой публикации "On the Diverse And Fantastical Shapes of Testing"
- https://martinfowler.com/articles/2021-test-shapes.html
#Testing
- https://martinfowler.com/articles/2021-test-shapes.html
#Testing
martinfowler.com
On the Diverse And Fantastical Shapes of Testing
My #2 problem with arguing testing pyramids vs honeycombs is the disparate definitions of unit test
emacsway-log: Software Design, Clean Architecture, DDD, Microservice Architecture, Distributed Systems, XP, Agile, etc.
В свое время я собрал целую библиотеку по управленческой психологии, Decision Making и Soft Skills, читал "Harvard Business Review on Decision Making" by Harvard Business School Press. Практически вся необходимая для IT-архитектора информация по этим вопросам…
Хоть и не ново, но вдруг кто не знал - цикл статей Gregor Hohpe "Thinking Like An Architect":
- https://architectelevator.com/architecture/famous-architects-sketch/
#SoftSkills #Career
- https://architectelevator.com/architecture/famous-architects-sketch/
#SoftSkills #Career
The Architect Elevator
Think Like An Architect, Part 1: Famous Architects Sketch
They let others do the blueprints.
Одной из частых проблем, с которой сталкиваются разработчики ПО на практике, является разрешение противоречия между обобщением кода (функциональности) и владением интерфейсом.
Когда некая функциональность встречается в коде два и более раз, возникает желание устранить дубликаты и обобщить переиспользуемый код. В качестве примера можно привести главу "Layer Supertype" книги "Patterns of Enterprise Application Architecture" by Martin Fowler, David Rice, Matthew Foemmel, Edward Hieatt, Robert Mee, Randy Stafford.
Проблема в том, что у интерфейса не может быть два и более владельца. У клиентов возникает зависимость от сторонней библиотеки, которая будет изменяться в другое время, с другой частотой и по другим причинам. Хорошо, если этой библиотекой владеет та же самая команда, которая её и использует. А если нет? А если она используется слоем самого высокого уровня политики - доменным слоем, как в приведенном выше примере, который, кстати, предлагает такое решение:
📝 "You can place the interface in the client's package (as in the sketch) or in a third package (Figure 18.1). If there's only one client for the implementation, or all the clients are in the same package, then you might as well put the interface in with the client. A good way of thinking about this is that the developers of the client package are responsible for defining the interface. Essentially the client package indicates that it will work with any other package that implements the interface it defines. If you have multiple client packages, a third interface package is better. It's also better if you want to show that the interface definition isn't the responsibility of the client package developers. This would be the case if the developers of the implementation were responsible for it."
И все-таки, можно ли избежать образования зависимости доменного слоя приложения от сторонней библиотеки?
Для выравнивания интерфейсов служит паттерн Adapter. По хорошему, приложение должно локализовать изменения используемого стороннего интерфейса посредством адаптера, интерфейсом которого оно владеет. На практике вряд-ли кто-то будет этим заниматься, и код обрастет зависимостями.
Решением могла бы быть генерация этого самого адаптера сторонней библиотекой. В момент генерации, владение интерфейсом переходит от сторонней библиотеки к её клиенту. Таким образом произошло бы отделение обобщенной функциональности от интерфейса, и противоречие было бы разрешено. К такому же выводу приходит и Sam Newman, при решении аналогичной проблемы:
📝 "If your use of shared code ever leaks outside your service boundary, you have introduced a potential form of coupling. Using common code like logging libraries is fine, as they are internal concepts that are invisible to the outside world. RealEstate.com.au makes use of a tailored service template to help bootstrap new service creation. Rather than make this code shared, the company copies it for every new service to ensure that coupling doesn’t leak in."
-- "Building Microservices. Designing Fine-Grained Systems” 2nd edition by Sam Newman
#SoftwareDesign #DIP #DI
Когда некая функциональность встречается в коде два и более раз, возникает желание устранить дубликаты и обобщить переиспользуемый код. В качестве примера можно привести главу "Layer Supertype" книги "Patterns of Enterprise Application Architecture" by Martin Fowler, David Rice, Matthew Foemmel, Edward Hieatt, Robert Mee, Randy Stafford.
Проблема в том, что у интерфейса не может быть два и более владельца. У клиентов возникает зависимость от сторонней библиотеки, которая будет изменяться в другое время, с другой частотой и по другим причинам. Хорошо, если этой библиотекой владеет та же самая команда, которая её и использует. А если нет? А если она используется слоем самого высокого уровня политики - доменным слоем, как в приведенном выше примере, который, кстати, предлагает такое решение:
📝 "You can place the interface in the client's package (as in the sketch) or in a third package (Figure 18.1). If there's only one client for the implementation, or all the clients are in the same package, then you might as well put the interface in with the client. A good way of thinking about this is that the developers of the client package are responsible for defining the interface. Essentially the client package indicates that it will work with any other package that implements the interface it defines. If you have multiple client packages, a third interface package is better. It's also better if you want to show that the interface definition isn't the responsibility of the client package developers. This would be the case if the developers of the implementation were responsible for it."
И все-таки, можно ли избежать образования зависимости доменного слоя приложения от сторонней библиотеки?
Для выравнивания интерфейсов служит паттерн Adapter. По хорошему, приложение должно локализовать изменения используемого стороннего интерфейса посредством адаптера, интерфейсом которого оно владеет. На практике вряд-ли кто-то будет этим заниматься, и код обрастет зависимостями.
Решением могла бы быть генерация этого самого адаптера сторонней библиотекой. В момент генерации, владение интерфейсом переходит от сторонней библиотеки к её клиенту. Таким образом произошло бы отделение обобщенной функциональности от интерфейса, и противоречие было бы разрешено. К такому же выводу приходит и Sam Newman, при решении аналогичной проблемы:
📝 "If your use of shared code ever leaks outside your service boundary, you have introduced a potential form of coupling. Using common code like logging libraries is fine, as they are internal concepts that are invisible to the outside world. RealEstate.com.au makes use of a tailored service template to help bootstrap new service creation. Rather than make this code shared, the company copies it for every new service to ensure that coupling doesn’t leak in."
-- "Building Microservices. Designing Fine-Grained Systems” 2nd edition by Sam Newman
#SoftwareDesign #DIP #DI
Forwarded from THINGS PROGRAMMERS DO
This media is not supported in your browser
VIEW IN TELEGRAM
Стажер показывает свой код.
"Splitting a Domain Across Multiple Bounded Contexts: How designing for business opportunities and the rate of change may give you better contexts."
Published on 14 June 2021 by Mathias Verraes and Rebecca Wirfs-Brock
https://verraes.net/2021/06/split-domain-across-bounded-contexts/
#DDD #Microservices
Published on 14 June 2021 by Mathias Verraes and Rebecca Wirfs-Brock
https://verraes.net/2021/06/split-domain-across-bounded-contexts/
#DDD #Microservices
Mathias Verraes' Blog
Splitting a Domain Across Multiple Bounded Contexts
How designing for business opportunities and the rate of change may give you better contexts.
emacsway-log: Software Design, Clean Architecture, DDD, Microservice Architecture, Distributed Systems, XP, Agile, etc.
И еще одна очень крутая книга попала в мое поле зрения на тему Soft Skills, от известного автора в области психологии, системного мышления и антропологии разработки программного обеспечения, на работы которого ссылаются в своих книгах такие светила, как Kent…
Alexander Polomodov (Director of digital ecosystem development department at Tinkoff), опубликовал на днях пост по системному мышлению:
"Обзор “Азбуки системного мышления”" за авторством Донелла Медоуз
https://apolomodov.medium.com/review-azbuka-sistemnogo-myishleniya-3016221d47fa
#Management #Career #SoftSkills
"Обзор “Азбуки системного мышления”" за авторством Донелла Медоуз
https://apolomodov.medium.com/review-azbuka-sistemnogo-myishleniya-3016221d47fa
#Management #Career #SoftSkills
Medium
Обзор “Азбуки системного мышления”
Недавно я с большим удовольствием прочитал “Азбуку системного мышления” за авторством Донелла Медоуз. В книге дается краткое, но наглядное…