#advanced #video
Интересное обсуждение на тему того, почему code review – это плохо.
https://www.youtube.com/watch?v=IDj3x__YZgE
Интересное обсуждение на тему того, почему code review – это плохо.
https://www.youtube.com/watch?v=IDj3x__YZgE
YouTube
CodeReview:долго, пл*хо, дорого /Ф. Дельгядо, В. Фабриченко, А. Агейченко, В. Дмитриев, В. Шароватов
Понравилось видео и хочешь узнать что-то еще про тимлидство? Забирай весь плейлист на https://is.gd/kChYnl или купи билет на следующий сезон конференции https://is.gd/auKynm
Подпишись на канал – каждую неделю мы выкладываем новые видео про то, как устроена…
Подпишись на канал – каждую неделю мы выкладываем новые видео про то, как устроена…
#advanced #video
Интервью с Мэтью Брауном, автором статического анализатора Psalm.
http://phptownhall.com/episode-81-the-book-of-psalm/
Интервью с Мэтью Брауном, автором статического анализатора Psalm.
http://phptownhall.com/episode-81-the-book-of-psalm/
#advanced #architecture
Домены, поддомены, ограниченные контексты и другие понятия из мира DDD в большой обзорной статье.
https://medium.com/nick-tune-tech-strategy-blog/domains-subdomain-problem-solution-space-in-ddd-clearly-defined-e0b49c7b586c
Домены, поддомены, ограниченные контексты и другие понятия из мира DDD в большой обзорной статье.
https://medium.com/nick-tune-tech-strategy-blog/domains-subdomain-problem-solution-space-in-ddd-clearly-defined-e0b49c7b586c
Medium
Domain, Subdomain, Bounded Context, Problem/Solution Space in DDD: Clearly Defined
Domain-Driven Design is an approach to designing systems, usually software, that emphasises creating a common language between domain…
#advanced #library
Библиотека для удобного поиска по json с помощью декларативного языка jmespath.
https://github.com/jmespath/jmespath.php
Библиотека для удобного поиска по json с помощью декларативного языка jmespath.
https://github.com/jmespath/jmespath.php
GitHub
GitHub - jmespath/jmespath.php: Declaratively specify how to extract elements from a JSON document, in PHP
Declaratively specify how to extract elements from a JSON document, in PHP - jmespath/jmespath.php
#advanced
Command Bus, или Message Bus, или Event Bus – как только ни называют шину сообщений. Удобный инструмент, который позволяет иметь единую точку входа для сообщений/команд/событий и абстрагироваться от выбора обработчика и их количества. Также некоторые продвинутые шины сообщений позволяют подключать очереди для асинхронной обработки сообщений. На данный момент для php доступны неколько реализаций:
1. https://github.com/SimpleBus/message-bus – шина от Матьяса Нобака. Достаточно скромная реализация, которая тем не менее послужила вдохновением для symfony/messenger.
2. https://github.com/onliner/command-bus – молодой command bus от onliner, очень перспективный проект с хорошим кодом и возможностью использовать брокеры очередей.
3. https://github.com/thephpleague/tactician – command bus от ребят из phpleague, из коробки не умеет откладывать сообщения, но можно подключить bernard, как советуют в документации https://tactician.thephpleague.com/plugins/bernard/.
https://github.com/symfony/messenger - мессенджер Symfony в представлении не нуждается, однако вызывает смешанные чувства. За сложностью реализации скрываются недочеты, некоторые неудобства, а в экспериментальной версии были баги. В целом, инструмент взрослый, можно попробовать.
Command Bus, или Message Bus, или Event Bus – как только ни называют шину сообщений. Удобный инструмент, который позволяет иметь единую точку входа для сообщений/команд/событий и абстрагироваться от выбора обработчика и их количества. Также некоторые продвинутые шины сообщений позволяют подключать очереди для асинхронной обработки сообщений. На данный момент для php доступны неколько реализаций:
1. https://github.com/SimpleBus/message-bus – шина от Матьяса Нобака. Достаточно скромная реализация, которая тем не менее послужила вдохновением для symfony/messenger.
2. https://github.com/onliner/command-bus – молодой command bus от onliner, очень перспективный проект с хорошим кодом и возможностью использовать брокеры очередей.
3. https://github.com/thephpleague/tactician – command bus от ребят из phpleague, из коробки не умеет откладывать сообщения, но можно подключить bernard, как советуют в документации https://tactician.thephpleague.com/plugins/bernard/.
https://github.com/symfony/messenger - мессенджер Symfony в представлении не нуждается, однако вызывает смешанные чувства. За сложностью реализации скрываются недочеты, некоторые неудобства, а в экспериментальной версии были баги. В целом, инструмент взрослый, можно попробовать.
GitHub
GitHub - SimpleBus/message-bus: [READ ONLY] Generic classes and interfaces for messages and message buses. Full documentation can…
[READ ONLY] Generic classes and interfaces for messages and message buses. Full documentation can be found here: - SimpleBus/message-bus
#mustread
Большой репозиторий, в котором собраны ссылки на различные инструменты, программы, утилиты, статьи, книги и видео для разработчиков. Это ваше чтение на лето.
https://github.com/trimstray/the-book-of-secret-knowledge
Большой репозиторий, в котором собраны ссылки на различные инструменты, программы, утилиты, статьи, книги и видео для разработчиков. Это ваше чтение на лето.
https://github.com/trimstray/the-book-of-secret-knowledge
GitHub
GitHub - trimstray/the-book-of-secret-knowledge: A collection of inspiring lists, manuals, cheatsheets, blogs, hacks, one-liners…
A collection of inspiring lists, manuals, cheatsheets, blogs, hacks, one-liners, cli/web tools and more. - trimstray/the-book-of-secret-knowledge
#architecture
Когда возникает вопрос о том, чтобы наша бизнес-сущность имела различные состояния, мы создаем у сущности поле state/status, которое помогает ориентироваться в том, как управлять сущностью и какие операции допустимы. Такой подход кажется не совсем удобным, когда бизнес-операции имеют важное значение в разное время жизни сущности. Во-первых, дублирование каких-то действий, если вы забыли проверить текущий статус, может сломать состояние модели (что если заказ будет оплачен 2 раза?). Во-вторых, у разных состояний разный набор бизнес-операций, а иногда – разный набор данных: где-то больше, где-то меньше. Было бы удобнее не держать все в одном месте, а делать на каждый статус отдельную таблицу. К сожалению, если вы не используете совместно с таким подходом CQRS, вам будет сложно работать с такой структурой при выборках данных. Есть и другой подход – отдельная таблица со статусами. Подробнее можно почитать по ссылке: https://dba.stackexchange.com/questions/158949/should-i-create-multiple-tables-for-different-entity-states-statuses-or-stages.
А расскажите про свой опыт управления сущностями с разными статусами в комментариях.
Когда возникает вопрос о том, чтобы наша бизнес-сущность имела различные состояния, мы создаем у сущности поле state/status, которое помогает ориентироваться в том, как управлять сущностью и какие операции допустимы. Такой подход кажется не совсем удобным, когда бизнес-операции имеют важное значение в разное время жизни сущности. Во-первых, дублирование каких-то действий, если вы забыли проверить текущий статус, может сломать состояние модели (что если заказ будет оплачен 2 раза?). Во-вторых, у разных состояний разный набор бизнес-операций, а иногда – разный набор данных: где-то больше, где-то меньше. Было бы удобнее не держать все в одном месте, а делать на каждый статус отдельную таблицу. К сожалению, если вы не используете совместно с таким подходом CQRS, вам будет сложно работать с такой структурой при выборках данных. Есть и другой подход – отдельная таблица со статусами. Подробнее можно почитать по ссылке: https://dba.stackexchange.com/questions/158949/should-i-create-multiple-tables-for-different-entity-states-statuses-or-stages.
А расскажите про свой опыт управления сущностями с разными статусами в комментариях.
Database Administrators Stack Exchange
Should I create multiple tables for different entity states, statuses or stages?
I have a tasks table in my database and, in the business domain of interest, tasks can have multiple states: “open”, “begun”, “in review” and “completed”.
Despite having “open” and “begun” in the s...
Despite having “open” and “begun” in the s...
#advanced #legacy
Паттерны проектирования для улучшения качества легаси-кода.
https://matthiasnoback.nl/talk/design-patterns-for-modernizing-legacy-code-bases/
Паттерны проектирования для улучшения качества легаси-кода.
https://matthiasnoback.nl/talk/design-patterns-for-modernizing-legacy-code-bases/
matthiasnoback.nl
Design patterns for modernizing legacy code bases
Matthias Noback - Blog | About software development
#advanced #laravel
Библиотека для превращения json данных в модели Eloquent.
https://github.com/swisnl/json-api-client
Библиотека для превращения json данных в модели Eloquent.
https://github.com/swisnl/json-api-client
GitHub
GitHub - swisnl/json-api-client: A PHP package for mapping remote {json:api} resources to Eloquent like models and collections.
A PHP package for mapping remote {json:api} resources to Eloquent like models and collections. - swisnl/json-api-client
#advanced #video
Полезный стрим про чистую архитектуру и DDD и как они связаны.
https://www.youtube.com/watch?v=fx6NWIgjH7w
Полезный стрим про чистую архитектуру и DDD и как они связаны.
https://www.youtube.com/watch?v=fx6NWIgjH7w
YouTube
Чистая архитектура и Domain-Driven Design
Спикеры:
Сергей Бухаров - Senior Developer Consultant в ThoughtWorks.
Евгений Лукьянов - ex-Yandex.Money, ex-Behavox (UK).
Ссылки:
Презентация: https://1drv.ms/b/s!AlCXLk9BEsfKoOA5LXNB8s7CQ-jb8w
Репозиторий: https://github.com/stringconcat/ddd_practice
Сайт…
Сергей Бухаров - Senior Developer Consultant в ThoughtWorks.
Евгений Лукьянов - ex-Yandex.Money, ex-Behavox (UK).
Ссылки:
Презентация: https://1drv.ms/b/s!AlCXLk9BEsfKoOA5LXNB8s7CQ-jb8w
Репозиторий: https://github.com/stringconcat/ddd_practice
Сайт…
#advanced #laravel
IoC, DI, контейнер и сервис-провайдеры — многие могут понимать смысл этих вещей, но не уметь пользоваться ими свободно или делать их сами. Исправляем эту ситуацию и изучаем внедрение зависимостей на примере фреймворка Laravel.
https://blog.farhan.dev/laravel-service-container-and-service-providers-explained
IoC, DI, контейнер и сервис-провайдеры — многие могут понимать смысл этих вещей, но не уметь пользоваться ими свободно или делать их сами. Исправляем эту ситуацию и изучаем внедрение зависимостей на примере фреймворка Laravel.
https://blog.farhan.dev/laravel-service-container-and-service-providers-explained
DEV Community
Laravel Service Container and Service Providers Explained
Laravel's service container is one of the most important pieces of the framework yet it gets so...
#php
Не приняли: https://wiki.php.net/rfc/partial_function_application. А могла бы быть крутая фича в языке.
Не приняли: https://wiki.php.net/rfc/partial_function_application. А могла бы быть крутая фича в языке.
#advanced #mustread
Подробнее про стримы php и их необычные возможности.
https://www.sitepoint.com/understanding-streams-in-php/
Подробнее про стримы php и их необычные возможности.
https://www.sitepoint.com/understanding-streams-in-php/
Sitepoint
PHP Master | Understanding Streams in PHP
Streams were introduced as a way of generalizing file, network, data compression, and other operations which share a common set of functions and uses.
#advanced
Подробное сравнение двух брокеров сообщений – Kafka и RabbitMQ.
https://betterprogramming.pub/rabbitmq-vs-kafka-1779b5b70c41
Подробное сравнение двух брокеров сообщений – Kafka и RabbitMQ.
https://betterprogramming.pub/rabbitmq-vs-kafka-1779b5b70c41
Medium
RabbitMQ vs. Kafka: Head-To-Head
Comparing the strengths and weaknesses of each
#middle #symfony
Большой обзор всех компонентов Symfony: зачем каждый из них нужен, когда применять, какие стандарты реализует и многое другое.
https://alex-daubois.medium.com/ultimate-guide-to-symfony-components-2021-7ac9908f8aa2
Большой обзор всех компонентов Symfony: зачем каждый из них нужен, когда применять, какие стандарты реализует и многое другое.
https://alex-daubois.medium.com/ultimate-guide-to-symfony-components-2021-7ac9908f8aa2
#advanced
Автор phpstan рассказывает, как создавать собственные правила для решения специфических проблем в вашем проекте.
https://phpstan.org/developing-extensions/rules
Автор phpstan рассказывает, как создавать собственные правила для решения специфических проблем в вашем проекте.
https://phpstan.org/developing-extensions/rules
phpstan.org
Custom Rules
#advanced
Список полезных тем для проектирования сложных систем: виды репликаций, кэширование, асинхронная обработка задач (очереди, демоны), протоколы, CDN, конечная согласованность и многое другое.
https://github.com/donnemartin/system-design-primer
Список полезных тем для проектирования сложных систем: виды репликаций, кэширование, асинхронная обработка задач (очереди, демоны), протоколы, CDN, конечная согласованность и многое другое.
https://github.com/donnemartin/system-design-primer
GitHub
GitHub - donnemartin/system-design-primer: Learn how to design large-scale systems. Prep for the system design interview. Includes…
Learn how to design large-scale systems. Prep for the system design interview. Includes Anki flashcards. - donnemartin/system-design-primer
#advanced
Laravel | Route Model binding in Laravel
В статье рассказано, что такое Route-Model Binding, как его использовать и настраивать.
https://dev.to/arifiqbal/route-model-binding-in-laravel-4amk
Laravel | Route Model binding in Laravel
В статье рассказано, что такое Route-Model Binding, как его использовать и настраивать.
https://dev.to/arifiqbal/route-model-binding-in-laravel-4amk
DEV Community
Route Model binding in Laravel
Ep#23@Laracasts: Route Model Binding This post is a part of the Week X of 100DaysOfCode Laravel...
#advanced #video
Познавательное видео про то, почему стоит избегать распределенных транзакций, и чем может помочь паттерн Reservation.
https://www.youtube.com/watch?v=PZm0RQGcs38
Познавательное видео про то, почему стоит избегать распределенных транзакций, и чем может помочь паттерн Reservation.
https://www.youtube.com/watch?v=PZm0RQGcs38
YouTube
Avoiding Distributed Transactions with the Reservation Pattern
Because a long-running business process could last seconds to days, you cannot lock resources within a service using a distributed transaction. So what's the alternative? The real world has a solution, it's a reservation. A reservation allows you to have…