emacsway-log: Software Design, Clean Architecture, DDD, Microservice Architecture, Distributed Systems, XP, Agile, etc. – Telegram
emacsway-log: Software Design, Clean Architecture, DDD, Microservice Architecture, Distributed Systems, XP, Agile, etc.
3.48K subscribers
119 photos
15 videos
22 files
1.14K links
Software Design, Clean Architecture, DDD, Microservice Architecture, Distributed Systems, Extreme Programming, SDLC, Agile, etc.

Chat: https://news.1rj.ru/str/emacsway_chat

Persistence: https://dckms.github.io/system-architecture/
Download Telegram
В Миро удобно, а чтоб быстрее шло - деление на комнаты в zoom.
Forwarded from Электронное облако
#инструментарий
Хорошая альтернатива клиентам удаленного управления TeamViewer и AnyDesk: RustDesk (github.com/rustdesk/rustdesk) - открытая, бесплатная, мультиплатформенная и написанная почти полностью на Rust! А собственный релейный сервер или рандевузации, можно поднять хоть на Synolgy, хоть на RPi
Думаю, что это архитектурное описание вполне можно использовать в качестве примера https://github.com/team7katas/sysopsquad Идея со стикерами нефункциональных требований, так вообще зачетная ;-)
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
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
Forwarded from DDDevotion
Вы наверняка слышали про Уди Дахана, он эксперт по SOA и DDD. Его курс по распределенным системам снова доступен бесплатно. Отличный курс, много информации, примеров и разборов. Рекомендую разработчикам претендующим на синьорство и архитектуру. Все примеры из мира дотнет, но прям language-specific частей немного.

https://learn.particular.net/courses/distributed-systems-design-fundamentals-online#cta-block
Enjoy!
Одной из частых проблем, с которой сталкиваются разработчики ПО на практике, является разрешение противоречия между обобщением кода (функциональности) и владением интерфейсом.

Когда некая функциональность встречается в коде два и более раз, возникает желание устранить дубликаты и обобщить переиспользуемый код. В качестве примера можно привести главу "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