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
Обзор “Азбуки системного мышления”
Недавно я с большим удовольствием прочитал “Азбуку системного мышления” за авторством Донелла Медоуз. В книге дается краткое, но наглядное…
"New book: Code That Fits in Your Head" by Mark Seemann
https://blog.ploeh.dk/2021/06/14/new-book-code-that-fits-in-your-head/
#SoftwareDesign
https://blog.ploeh.dk/2021/06/14/new-book-code-that-fits-in-your-head/
#SoftwareDesign
ploeh blog
New book: Code That Fits in Your Head
The expanded universe.
"Should You Re-Estimate Unfinished Stories?" by Mike Cohn
https://www.mountaingoatsoftware.com/blog/should-you-re-estimate-unfinished-stories
#Agile
https://www.mountaingoatsoftware.com/blog/should-you-re-estimate-unfinished-stories
#Agile
Mountain Goat Software
Backlog Item Not Done at Sprint’s End? What to Do Next
When a team’s half-done, should they re-estimate the unfinished work? Seems harmless, but here's why it’s a trap..
Удачная демонстрация Культа Карго 👇
Forwarded from THINGS PROGRAMMERS DO
This media is not supported in your browser
VIEW IN TELEGRAM
Следую шагам, описанным в документации.
emacsway-log: Software Design, Clean Architecture, DDD, Microservice Architecture, Distributed Systems, XP, Agile, etc.
Новая статья в цикле: "Idempotent Receiver. Identify requests from clients uniquely so they can ignore duplicate requests when client retries" https://martinfowler.com/articles/patterns-of-distributed-systems/idempotent-receiver.html #SoftwareArchitecture…
"Gossip Dissemination" добавлен в "Patterns of Distributed Systems"
- https://martinfowler.com/articles/patterns-of-distributed-systems/
Пара реализаций на Golang, которые я смотрел несколько недель назад:
- https://github.com/hashicorp/memberlist
- https://github.com/libopenstorage/gossip
#DistributedSystems #SoftwareArchitecture
- https://martinfowler.com/articles/patterns-of-distributed-systems/
Пара реализаций на Golang, которые я смотрел несколько недель назад:
- https://github.com/hashicorp/memberlist
- https://github.com/libopenstorage/gossip
#DistributedSystems #SoftwareArchitecture
martinfowler.com
Catalog of Patterns of Distributed Systems
A catalog of patterns to better understand, communicate, and teach the design of distributed systems
emacsway-log: Software Design, Clean Architecture, DDD, Microservice Architecture, Distributed Systems, XP, Agile, etc.
Похоже, что DDD пользуется в Golang растущей популярностью: 📝 "It's 20 days after our e-book was released and it almost hit 1500 downloads today." https://twitter.com/roblaszczak/status/1382697162375622662?s=09 https://threedots.tech/go-with-the-domain/…
"Software Dark Ages" by Robert Laszczak - философско-мотивационная статья о DDD в Golang от разработчиков Watermill.
https://threedots.tech/post/software-dark-ages/
#DDD #Golang #SoftwareDesign #SoftwareArchitecture
https://threedots.tech/post/software-dark-ages/
#DDD #Golang #SoftwareDesign #SoftwareArchitecture
threedots.tech
Software Dark Ages
Are you struggling with complex codebases and slow development cycles? We have been there too. In this article, we reveal how Domain-Driven Design strategic patterns helped us overcome the Software Dark Ages in multiple projects. Learn practical ways to boost…
Возможно, эта ссылка кому-нибудь окажется полезной: https://martinfowler.com/bliki/DecreedStories.html
Не самое исчерпывающее разъяснение, но зато кратко, метко и авторитетно.
#Agile
Не самое исчерпывающее разъяснение, но зато кратко, метко и авторитетно.
#Agile
martinfowler.com
bliki: Decreed Stories
a bliki entry for Decreed Stories