Какой вариант вам было проще всего понять?
Final Results
13%
Вариант №1
28%
Вариант №2
0%
Вариант №3
11%
Вариант №4
30%
Вариант №5
2%
Вариант №6
2%
Вариант №7
4%
Вариант №8
2%
Вариант №9
7%
Вариант №10
Эргономичный код
Какой вариант вам было проще всего понять?
Привет!
Фух, вы видели эту гонку? Она была валидольной:)
Не в обиду автору второго варианта, но вчера вечером 5-ый вариант лидировал с перевесом в один (мой:)) голос. И сегодня с утра я с замиранием сердца открывал канал, потому что победа второго варианта поставила бы меня в неловкое положение.
Второй вариант соответствует всем критериям челленджа и объективно является самым понятным. Потому что львиную долю сложности спрятал в стандартной библиотеке. Но в целом он выглядит как хитрый солюшен под конкретные условия задачи и такой код в образовательном материале я бы не хотел приводить. Но, слава богу, обошлось без переобувки в воздухе.
Ну и да, 5ый вариант, очевидно, был одним из моих:) На самом деле первым вариантом, который я, подглядев у одного из участников, упростил заменив isNegative на sign :)
Ещё раз спасибо всем отозвавшимся - если хотите, напишете мне в личку - опубликую пост с именными благодарностями:)
Фух, вы видели эту гонку? Она была валидольной:)
Не в обиду автору второго варианта, но вчера вечером 5-ый вариант лидировал с перевесом в один (мой:)) голос. И сегодня с утра я с замиранием сердца открывал канал, потому что победа второго варианта поставила бы меня в неловкое положение.
Второй вариант соответствует всем критериям челленджа и объективно является самым понятным. Потому что львиную долю сложности спрятал в стандартной библиотеке. Но в целом он выглядит как хитрый солюшен под конкретные условия задачи и такой код в образовательном материале я бы не хотел приводить. Но, слава богу, обошлось без переобувки в воздухе.
Ну и да, 5ый вариант, очевидно, был одним из моих:) На самом деле первым вариантом, который я, подглядев у одного из участников, упростил заменив isNegative на sign :)
Ещё раз спасибо всем отозвавшимся - если хотите, напишете мне в личку - опубликую пост с именными благодарностями:)
👍9
А, ну и конечно спасибо всем проголосовавшим - вы помогли мне свериться с реальностью и выбрать объективно наилучший вариант для статьи:)
❤7
Привет!
У меня одна большая и несколько маленьких новостей:)
Большая новость
Я начал новый этап работы над Эргономичным подходом.
Изначально я хотел (и всё ещё хочу) написать книгу о том, как разрабатывать поддерживаемый код. И даже начал её писать , но полгода спустя понял, что с кондачка у меня это не выходит.
Поэтому я завёл сначала этот канал, а потом блог, предполагая, что книгу можно будет собрать из постов. Это помогло мне сильно продвинуться в проработке Эргономичного подхода и теперь я знаю, как систематически делать поддерживаемые проекты.
Но значительная доля этого знания всё ещё не описана.
Поэтому я решил перейти на формат структурированной вики и запустил отдельный сайт для Эргономичного подхода — https://ergowiki.azhidkov.pro 🎉🎉🎉
Пока что он больше похож на индексный указатель моего блога, но у него намного более наглядная структура и я планирую существенную часть 25-ого года посвятить тому, чтобы методично наполнять этот сайт.
Обращайте внимание на версии статей - если вторым числом стоит 0, то внутри либо набор ссылок, либо несколько тезисных предложений, либо неотредактированный черновик.
Однако кое-что интересненькое там уже есть:
1. свежак и с версией v1.1.0 — гайдлайн обработки ошибок, в котором я вернул в милость выброс исключений в коде приложения;
2. Несколько шаблонов работы со Spring Data JDBC;
3. Три черновых подхода к описанию модели неизменяемых реляционных данных. Они написаны в режиме потока сознания, но, на мой взгляд, содержат оригинальные и любопытные идеи.
Наконец, самое главное — по многочисленным просьбам подписчиков, там есть автоматическая поддержка тёмной темы:) Кроме подсветки синтаксиса. И картинок:)
Маленькие новости
Помимо запуска сайта для ЭП, я ещё и причесал личный сайт. Изменений там довольно много, подсвечу только те, что вам могут быть интересны на мой взгляд.
Во-первых, я собрал на основной странице блога все свои посты за всё время — всего там сейчас 62 поста.
Во-вторых, я протегал все эти 62 поста.
Избранные подборки:
- Кейсы
- Функциональная архитектура
- Эргономичный подход
- Эргономичное тестирование
В-третьих, я завёл страничку со списком своих публичных выступлений, где, кроме самих записей есть и ссылки на слайды.
У меня одна большая и несколько маленьких новостей:)
Большая новость
Я начал новый этап работы над Эргономичным подходом.
Изначально я хотел (и всё ещё хочу) написать книгу о том, как разрабатывать поддерживаемый код. И даже начал её писать , но полгода спустя понял, что с кондачка у меня это не выходит.
Поэтому я завёл сначала этот канал, а потом блог, предполагая, что книгу можно будет собрать из постов. Это помогло мне сильно продвинуться в проработке Эргономичного подхода и теперь я знаю, как систематически делать поддерживаемые проекты.
Но значительная доля этого знания всё ещё не описана.
Поэтому я решил перейти на формат структурированной вики и запустил отдельный сайт для Эргономичного подхода — https://ergowiki.azhidkov.pro 🎉🎉🎉
Пока что он больше похож на индексный указатель моего блога, но у него намного более наглядная структура и я планирую существенную часть 25-ого года посвятить тому, чтобы методично наполнять этот сайт.
Обращайте внимание на версии статей - если вторым числом стоит 0, то внутри либо набор ссылок, либо несколько тезисных предложений, либо неотредактированный черновик.
Однако кое-что интересненькое там уже есть:
1. свежак и с версией v1.1.0 — гайдлайн обработки ошибок, в котором я вернул в милость выброс исключений в коде приложения;
2. Несколько шаблонов работы со Spring Data JDBC;
3. Три черновых подхода к описанию модели неизменяемых реляционных данных. Они написаны в режиме потока сознания, но, на мой взгляд, содержат оригинальные и любопытные идеи.
Наконец, самое главное — по многочисленным просьбам подписчиков, там есть автоматическая поддержка тёмной темы:) Кроме подсветки синтаксиса. И картинок:)
Маленькие новости
Помимо запуска сайта для ЭП, я ещё и причесал личный сайт. Изменений там довольно много, подсвечу только те, что вам могут быть интересны на мой взгляд.
Во-первых, я собрал на основной странице блога все свои посты за всё время — всего там сейчас 62 поста.
Во-вторых, я протегал все эти 62 поста.
Избранные подборки:
- Кейсы
- Функциональная архитектура
- Эргономичный подход
- Эргономичное тестирование
В-третьих, я завёл страничку со списком своих публичных выступлений, где, кроме самих записей есть и ссылки на слайды.
Эргономичный подход
Способ быстро создавать кодовые базы, которые легко менять для поддержки новых требований
🔥14👍8❤5
Привет!
Мысли в слух.
Наткнулся на очередную свеженькую статью по чистой архитектуре.
В двух словах: чистая архитектура - это не про пакеты - не заводите пакеты domain, application, infrastructure, web, заводите пакеты по фичам.
В целом ничего супероригинального, но любопытный аргумент в пользу пакетирования по фичам там есть — по мере жизни приложения, у него появляются новые фичи, а новые слои — практически никогда.
И так как покой мне только снится, это меня натолкнуло на мысль о потенциальной эргономичной структуре программ в4. в3 выглядит так, напомню.
Сейчас она у меня в целом работает и серьёзных нареканий нет, но мне не нравится фактическое дублирование содержания пакетов app и core, в случае если app декомпозируется по фичам.
И вот глядя на этот пост, я подумал, что гипотетически, в в4 я мог бы вернуться к декомпозиции по домену/фичам на первом уровне, но для решения проблемы лишних зависимостей добавил бы компоненты без состояния.
#posts@ergonomic_code #clean_architecture@ergonomic_code #ergo_approach@ergonomic_code #ergo_arch@ergonomic_code
Мысли в слух.
Наткнулся на очередную свеженькую статью по чистой архитектуре.
В двух словах: чистая архитектура - это не про пакеты - не заводите пакеты domain, application, infrastructure, web, заводите пакеты по фичам.
В целом ничего супероригинального, но любопытный аргумент в пользу пакетирования по фичам там есть — по мере жизни приложения, у него появляются новые фичи, а новые слои — практически никогда.
И так как покой мне только снится, это меня натолкнуло на мысль о потенциальной эргономичной структуре программ в4. в3 выглядит так, напомню.
Сейчас она у меня в целом работает и серьёзных нареканий нет, но мне не нравится фактическое дублирование содержания пакетов app и core, в случае если app декомпозируется по фичам.
И вот глядя на этот пост, я подумал, что гипотетически, в в4 я мог бы вернуться к декомпозиции по домену/фичам на первом уровне, но для решения проблемы лишних зависимостей добавил бы компоненты без состояния.
#posts@ergonomic_code #clean_architecture@ergonomic_code #ergo_approach@ergonomic_code #ergo_arch@ergonomic_code
Medium
Clean Architecture is NOT a project structure.
Countless articles are written about Clean Architecture, and some of the basic stuff people get right. But there’s one common issue I see over and over again. They recommend a project structure that…
Привет!
Из своих планов на "до отпуска" я не осилил только записать и выложить запись лайтненинга про Spring Data JDBC.
Зато запустил вики, поэтому решил таки пойти в отпуск до 1 апреля.
Поэтому в канале будет некоторое затишье - писать что-то буду, скорее всего, но по мелочи, плюс, может быть, осилю в фоновом режиме написать пару статей на эрговики.
И чтобы вы не скучали эти три месяца - подготовил для вас карту канала - уверен, в ней вы сможете найти себе что-то интересненькое почитать/посмотреть как минимум на каникулы, а то и до 1 апреля.
PS>
А ну и лайтенинг тоже собираюсь таки дозаписать в отпуске. Ещё минут 20 к записанным 2 на текущий момент:)
Из своих планов на "до отпуска" я не осилил только записать и выложить запись лайтненинга про Spring Data JDBC.
Зато запустил вики, поэтому решил таки пойти в отпуск до 1 апреля.
Поэтому в канале будет некоторое затишье - писать что-то буду, скорее всего, но по мелочи, плюс, может быть, осилю в фоновом режиме написать пару статей на эрговики.
И чтобы вы не скучали эти три месяца - подготовил для вас карту канала - уверен, в ней вы сможете найти себе что-то интересненькое почитать/посмотреть как минимум на каникулы, а то и до 1 апреля.
PS>
А ну и лайтенинг тоже собираюсь таки дозаписать в отпуске. Ещё минут 20 к записанным 2 на текущий момент:)
Telegram
Эргономичный код
Привет!
Так, ну большая веха пройдена, расскажу про свои ближайшие планы.
И главный ближайший план - отдохнуть. До марта.
У меня с июля идёт жёсткий спринт, где я жонглирую домом с младенцем и старшим ребёнком, который за 3 месяца сходил в сад 7 дней, выступлением…
Так, ну большая веха пройдена, расскажу про свои ближайшие планы.
И главный ближайший план - отдохнуть. До марта.
У меня с июля идёт жёсткий спринт, где я жонглирую домом с младенцем и старшим ребёнком, который за 3 месяца сходил в сад 7 дней, выступлением…
Карта канала
Добро пожаловать на канал "Эргономичный код" — канал о разработке поддерживаемых кодовых баз в общем и моём подходе к этой задаче — Эргономичном подходе.
Что такое Эргономичный подход?
По большому счёту это небольшой набор принципов, взятых в основном из классической школы TDD, функциональной архитектуры и DDD, и большой набор рецептов — моделей, методик и шаблонов —, которые позволяют команде быстро создавать кодовые базы, соответствующие этим принципам и, как следствие, лёгкие в поддержке.
Подробности на сайте Эргономичного подхода
В Эргономичном подходе есть что-то уникальное?
Да. Идея представления системы как модели её эффектов в виде диаграммы эффектов и методика проектирования на базе этой модели.
"Слова дёшевы, покажи мне код!"
Trainer Advisor — некоммерческий, но реальный (~17K строк Котлин кода, 15 таблиц, 2 настоящих пользователя, горки костылей, "компромиссных решений" и исторических наслоений) проект с открытым исходным кодом, разрабатываемый по Эргономичному подходу. В этот проект можно поконтрибьютить и на своём опыте прочувствовать работу с эргономичной кодовой базой.
Project Mariotte — минимальный демонстрационный пример кодовой базы, написанной по Эргономичному подходу, на примере операции бронирования номера в отеле
Есть что посмотреть или послушать?
Да, все мои публичные выступления собраны на одной странице
А почитать, кроме канала?
Да, в блоге
В блоге и канале есть подборки:
- Кейсы (в блоге, в канале #case@ergonomic_code)
- Примеры кода (в блоге)
- Эргономичный подход (в блоге, в канале #ergo_approach@ergonomic_code)
- Эргономичное тестирование (в блоге, в канале #ergo_testing@ergonomic_code)
- Функциональная архитектура (в блоге, в канале #functional_architecture@ergonomic_code)
- Эргономиный персистанс (в блоге, в канале #ergo_persistance@ergonomic_code)
- Что ещё почитать (в блоге, в канале #books@ergonomic_code, #posts@ergonomic_code, #papers@ergonomic_code)
- Что ещё посмотреть (в блоге, в канале #talks@ergonomic_code)
А у меня вопрос!
Приходите в группу - там целому сообществу (более 100 крутых инженеров) можно задать любой вопрос по тематике канала - Эргономичный подход, классическая школа ТДД, ФА, ФП, в целом дизайн модели и системный дизайн
Добро пожаловать на канал "Эргономичный код" — канал о разработке поддерживаемых кодовых баз в общем и моём подходе к этой задаче — Эргономичном подходе.
Что такое Эргономичный подход?
По большому счёту это небольшой набор принципов, взятых в основном из классической школы TDD, функциональной архитектуры и DDD, и большой набор рецептов — моделей, методик и шаблонов —, которые позволяют команде быстро создавать кодовые базы, соответствующие этим принципам и, как следствие, лёгкие в поддержке.
Подробности на сайте Эргономичного подхода
В Эргономичном подходе есть что-то уникальное?
Да. Идея представления системы как модели её эффектов в виде диаграммы эффектов и методика проектирования на базе этой модели.
"Слова дёшевы, покажи мне код!"
Trainer Advisor — некоммерческий, но реальный (~17K строк Котлин кода, 15 таблиц, 2 настоящих пользователя, горки костылей, "компромиссных решений" и исторических наслоений) проект с открытым исходным кодом, разрабатываемый по Эргономичному подходу. В этот проект можно поконтрибьютить и на своём опыте прочувствовать работу с эргономичной кодовой базой.
Project Mariotte — минимальный демонстрационный пример кодовой базы, написанной по Эргономичному подходу, на примере операции бронирования номера в отеле
Есть что посмотреть или послушать?
Да, все мои публичные выступления собраны на одной странице
А почитать, кроме канала?
Да, в блоге
В блоге и канале есть подборки:
- Кейсы (в блоге, в канале #case@ergonomic_code)
- Примеры кода (в блоге)
- Эргономичный подход (в блоге, в канале #ergo_approach@ergonomic_code)
- Эргономичное тестирование (в блоге, в канале #ergo_testing@ergonomic_code)
- Функциональная архитектура (в блоге, в канале #functional_architecture@ergonomic_code)
- Эргономиный персистанс (в блоге, в канале #ergo_persistance@ergonomic_code)
- Что ещё почитать (в блоге, в канале #books@ergonomic_code, #posts@ergonomic_code, #papers@ergonomic_code)
- Что ещё посмотреть (в блоге, в канале #talks@ergonomic_code)
А у меня вопрос!
Приходите в группу - там целому сообществу (более 100 крутых инженеров) можно задать любой вопрос по тематике канала - Эргономичный подход, классическая школа ТДД, ФА, ФП, в целом дизайн модели и системный дизайн
Эргономичный подход
Способ быстро создавать кодовые базы, которые легко менять для поддержки новых требований
🔥6❤4👍3
Эргономичный код pinned «Карта канала Добро пожаловать на канал "Эргономичный код" — канал о разработке поддерживаемых кодовых баз в общем и моём подходе к этой задаче — Эргономичном подходе. Что такое Эргономичный подход? По большому счёту это небольшой набор принципов, взятых…»
Привет!
С наступившим новым годом!
Принципы программирования от разработчика HTMX - Prefer if statements to polymorpism
Особенно понравилось:
Сразу видно - человек давно в индустрии:)
#posts@ergonomic_code #design@ergonomic_code #htmx@ergonomic_code
С наступившим новым годом!
Принципы программирования от разработчика HTMX - Prefer if statements to polymorpism
Особенно понравилось:
It states that a high-level module can depend on a low-level module, because that’s how software works.
Сразу видно - человек давно в индустрии:)
#posts@ergonomic_code #design@ergonomic_code #htmx@ergonomic_code
htmx.org
</> htmx ~ Prefer If Statements To Polymorphism...
In this collection of tweets, Carson Gross explores unconventional programming principles, including favoring if statements over polymorphism, minimizing abstractions, and prioritizing practical, implementation-driven development. He challenges traditional…
👍4❤2
Привет!
Молния! Похоже, JPA-тусовка начала двигаться в сторону эргономичности.
Я про Jakarta Data слышу впервые и пост только по диагонали просканировал, но судя по фразе:
В одном проекте можно будет совместить JPA под прикрытием Jakarta Data и Эргономичный подход.
А для меня это означает, что порог входа в ЭП снижается.
Молния! Похоже, JPA-тусовка начала двигаться в сторону эргономичности.
Я про Jakarta Data слышу впервые и пост только по диагонали просканировал, но судя по фразе:
Заметьте, что update — это отдельная операция, а репозитории Jakarta Data всегда stateless
В одном проекте можно будет совместить JPA под прикрытием Jakarta Data и Эргономичный подход.
А для меня это означает, что порог входа в ЭП снижается.
Хабр
Jakarta Data и Persistence: Инструменты, которые меняют подход к работе с данными
Команда Spring АйО перевела и адаптировала доклад "Jakarta Data and Jakarta Persistence by Gavin King" Гевина Кинга с последнего Devoxx. В своем выступлении Гевин Кинг рассказал о преимуществах и...
❤4👍4
Привет!
Рубрика "балуемся с ИИ"
Подарили ребёнку Алису на новый, решил попробовать YandexGPT 4 Pro.
В диалоге умом не блещет, а вот адовый shell-скрипт, который я из говна, палок и с её же помощью побырому собрал
круто разобрала и правильно поняла:
Рубрика "балуемся с ИИ"
Подарили ребёнку Алису на новый, решил попробовать YandexGPT 4 Pro.
В диалоге умом не блещет, а вот адовый shell-скрипт, который я из говна, палок и с её же помощью побырому собрал
gdbus call --session --dest org.gnome.Shell --object-path /org/gnome/Shell/Extensions/WindowCommander --method org.gnome.Shell.Extensions.WindowCommander.Place -- $(gdbus call --session --dest org.gnome.Shell --object-path /org/gnome/Shell/Extensions/WindowCommander --method org.gnome.Shell.Extensions.WindowCommander.List | cut -c 3- | rev | cut -c4- | rev | jq -c '.[] | select (.in_current_workspace == true) | .id' | xargs -I {} -d "\n" sh -c 'echo -n "{};"; gdbus call --session --dest org.gnome.Shell --object-path /org/gnome/Shell/Extensions/WindowCommander --method org.gnome.Shell.Extensions.WindowCommander.GetDetails {} | cut -c 3- | rev | cut -c4- | rev | jq | grep \"wm_class\"' | grep "firefox" | sed 's/;.*//') 0 30 1920 1165
?
круто разобрала и правильно поняла:
Эта команда выполняет следующие действия:
1. gdbus call --session --dest org.gnome.Shell --object-path /org/gnome/Shell/Extensions/WindowCommander --method org.gnome.Shell.Extensions.WindowCommander.List: Вызывает метод org.gnome.Shell.Extensions.WindowCommander.List для получения списка окон.
2. cut -c 3- | rev | cut -c4- | rev:
* cut -c 3- удаляет первые два символа из каждой строки.
* rev реверсирует строку.
* cut -c4- удаляет первый символ реверсированной строки.
* rev снова реверсирует строку, приводя её к исходному порядку.
Эти команды используются для корректного парсинга вывода.
3. jq -c ‘.[] | select (.in_current_workspace == true) | .id’:
* Использует jq для фильтрации списка окон, оставляя только те, которые находятся в текущей рабочей области.
* Извлекает идентификаторы этих окон.
4. xargs -I {} -d “\n” sh -c ‘echo -n “{};”; gdbus call --session --dest org.gnome.Shell --object-path /org/gnome/Shell/Extensions/WindowCommander --method org.gnome.Shell.Extensions.WindowCommander.GetDetails {} | cut -c 3- | rev | cut -c4- | rev | jq | grep “wm_class”’:
* xargs выполняет команду для каждого идентификатора окна.
* Команда внутри sh -c вызывает метод org.gnome.Shell.Extensions.WindowCommander.GetDetails для каждого окна.
* Вывод команды фильтруется с помощью jq и grep для получения WM_класса окна.
5. grep “firefox” | sed ‘s/;.*//’:
* Фильтрует вывод, оставляя только те строки, которые содержат “firefox”.
* sed удаляет часть строки после первого “;”.
6. gdbus call --session --dest org.gnome.Shell --object-path /org/gnome/Shell/Extensions/WindowCommander --method org.gnome.Shell.Extensions.WindowCommander.Place –:
* Вызывает метод org.gnome.Shell.Extensions.WindowCommander.Place, передавая ему параметры, которые следуют после “–”.
* Эти параметры (0 30 1920 1165) вероятно задают позицию и размер окна.
Таким образом, команда получает список окон в текущей рабочей области, фильтрует окна Firefox, извлекает их WM_классы и параметры, а затем размещает одно из этих окон в заданной позиции и размере.
👍3
Привет!
Если вы не знали - у нас есть группа, в которой недавно появился новый участник, который задает много классных вопросов, на которые я даю развёрнутые ответы (пример №1 и №2) - заходите и туда тоже:)
И за одно если пропустили - ещё один развёрнутый ответ в комментах.
Если вы не знали - у нас есть группа, в которой недавно появился новый участник, который задает много классных вопросов, на которые я даю развёрнутые ответы (пример №1 и №2) - заходите и туда тоже:)
И за одно если пропустили - ещё один развёрнутый ответ в комментах.
Telegram
Эргономичный код - группа
Помогаем друг другу применять на практике основные идеи Эргономичного подхода - модульные монолиты, неизменяемую модель данных, функциональную архитектуру, интеграционные тесты, outside in TTD, data-oriented programming.
Канал: https://t.me/ergonomic_code
Канал: https://t.me/ergonomic_code
🔥7❤2
Привет!
Собрал на вики страничку с экспресс-курсом Spring Data JDBC :)
Плюс накидал несколько заготовок паттернов:
1. SDJ
1.1 Маппинг исключений на DataAccessException (v1.0.0)
2. Реализация домена
2.1 UUIDv7 в качестве идентификаторов сущностей (v0.0.0)
3. Проектирование HTTP/JSON (REST) API
3.1 Добавляйте название сущности к параметрам идентификаторов (v1.0.0)
3.2 Используйте в маппинге эндпоинтов полные пути (v1.0.0)
#spring_data_jdbc@ergonomic_code #ergo_persistance@ergonomic_code #ergowiki@ergonomic_code
Собрал на вики страничку с экспресс-курсом Spring Data JDBC :)
Плюс накидал несколько заготовок паттернов:
1. SDJ
1.1 Маппинг исключений на DataAccessException (v1.0.0)
2. Реализация домена
2.1 UUIDv7 в качестве идентификаторов сущностей (v0.0.0)
3. Проектирование HTTP/JSON (REST) API
3.1 Добавляйте название сущности к параметрам идентификаторов (v1.0.0)
3.2 Используйте в маппинге эндпоинтов полные пути (v1.0.0)
#spring_data_jdbc@ergonomic_code #ergo_persistance@ergonomic_code #ergowiki@ergonomic_code
Эргономичный подход
Spring Data JDBC
Шаблоны проектирования и реализации агрегатов на базе Spring Data JDBC.
SDJ на одной странице По сути своей SDJ - простой как три копейки:
Он работает с агрегатами
Агрегат - это дерево с корнем
Корень агрегата - это класс с аннотацией Table
Границы агрегата…
SDJ на одной странице По сути своей SDJ - простой как три копейки:
Он работает с агрегатами
Агрегат - это дерево с корнем
Корень агрегата - это класс с аннотацией Table
Границы агрегата…
👍3🔥3❤2
Привет!
Или я что-то не понимаю, или в Чистой архитектуре есть дыра.
Во-первых, у нас есть правило зависимостей: Зависимости исходного кода должны указывать только внутрь, на политики более высокого уровня.
Во-вторых, у нас есть самый внешний слой фреймворков и драйверов, который "как правило, состоит из фреймворков и инструментов, таких как база данных и веб-фреймворк."
А в третьих, есть адаптеры интерфейсов, про которые анкл Боб пишет: "Никакой код, находящийся внутри этого круга, вообще ничего не должен знать о базе данных. Если база данных является базой данных SQL, то весь SQL должен быть ограничен этим уровнем и, в частности, теми частями этого уровня, которые имеют отношение к базе данных."
То есть, получается, что слой адаптеров должен знать про БД, которая находится уровнем выше и нарушать правило зависимостей?
Что как бы намекает "что модули верхнего уровня могут зависеть от модулей нижнего уровня, потому что это то, как работает софт" 🤔
#clean_architecture@ergonomic_code
Или я что-то не понимаю, или в Чистой архитектуре есть дыра.
Во-первых, у нас есть правило зависимостей: Зависимости исходного кода должны указывать только внутрь, на политики более высокого уровня.
Во-вторых, у нас есть самый внешний слой фреймворков и драйверов, который "как правило, состоит из фреймворков и инструментов, таких как база данных и веб-фреймворк."
А в третьих, есть адаптеры интерфейсов, про которые анкл Боб пишет: "Никакой код, находящийся внутри этого круга, вообще ничего не должен знать о базе данных. Если база данных является базой данных SQL, то весь SQL должен быть ограничен этим уровнем и, в частности, теми частями этого уровня, которые имеют отношение к базе данных."
То есть, получается, что слой адаптеров должен знать про БД, которая находится уровнем выше и нарушать правило зависимостей?
Что как бы намекает "что модули верхнего уровня могут зависеть от модулей нижнего уровня, потому что это то, как работает софт" 🤔
#clean_architecture@ergonomic_code
🔥2🤔1🤯1
Привет!
Наконец-то опубликовали официальную запись моего доклада "Структурный дизайн. Древний секрет простого и быстрого кода" с Joker '24 ! 🎉🎉🎉
#talks@ergonomic_code #ergo_approach@ergonomic_code #functional_architecture@ergonomic_code #structured_design@ergonomic_code
Наконец-то опубликовали официальную запись моего доклада "Структурный дизайн. Древний секрет простого и быстрого кода" с Joker '24 ! 🎉🎉🎉
#talks@ergonomic_code #ergo_approach@ergonomic_code #functional_architecture@ergonomic_code #structured_design@ergonomic_code
YouTube
Алексей Жидков — Структурный дизайн. Древний секрет простого и быстрого кода
Подробнее о Java-конференциях:
— весной — JPoint: https://jrg.su/gTrwHx
— осенью — Joker: https://jrg.su/h7yvG4
— —
Скачать презентацию с сайта Joker — https://jrg.su/TWOpZS
В докладе — краткий экскурс в структурный дизайн и, в частности, в понятие сбалансированных…
— весной — JPoint: https://jrg.su/gTrwHx
— осенью — Joker: https://jrg.su/h7yvG4
— —
Скачать презентацию с сайта Joker — https://jrg.su/TWOpZS
В докладе — краткий экскурс в структурный дизайн и, в частности, в понятие сбалансированных…
👍21🎉13🔥3
Привет!
Прочитал The Problem with Software: Why Smart Engineers Write Bad Code - не однозначная книга.
С одной стороны - я не понимаю для кого она и зачем.
Автор явно разжевывает работу программистов для не программистов.
И рассматривает всё подряд - go to, слоёную архитектуру, объекты, аджайл, обработку ошибок и исключения.
При том разжевывает до такой степени, что объясняет как устроен стек, чтобы объяснить как переполнение локальных массивов в Си позволяет писать вредоносы.
И в целом вроде даёт ответ на вопрос из названия: потому что все - научное сообщество, коммерческие компании и сами разработчики забили на научный подход. Но толком не предлагает решения этой проблемы.
С другой стороны книга написана хорошо и я с интересом её читал.
Советую её прочитать, если вы:
1. не закончили профильный вуз и не писали на Си и/или трансляторы - там как раз такие кишочки есть, что, на мой взгляд полезно разработчику. Хотя автор как раз считает иначе 😂
2. не программист, но вам очень любопытно как работа программиста устроена внутри - похоже вы один из двух людей в мире, являющихся целевой аудиторией этой книги 😂
3. любите историю - в книге многое говориться о становлении индустрии
4. любите древние книги и научные статьи - в тексте прям миллион ссылок на всё подряд
Мой текущий пост (который уже на стадии финальной полировки) очень хорошо иллюстрирует посыл этой книги - в нём есть такие строки:
То бишь сначала анкл Боб бездоказательно заявляет, что в системах будут появляться новые устройства, а потом я так же бездоказательно заявляю, что не будут. Твоё слово против моего, встретимся в суде. Так и живут "инженеры" от современного ИТ...:)
#books@ergonomic_code
Прочитал The Problem with Software: Why Smart Engineers Write Bad Code - не однозначная книга.
С одной стороны - я не понимаю для кого она и зачем.
Автор явно разжевывает работу программистов для не программистов.
И рассматривает всё подряд - go to, слоёную архитектуру, объекты, аджайл, обработку ошибок и исключения.
При том разжевывает до такой степени, что объясняет как устроен стек, чтобы объяснить как переполнение локальных массивов в Си позволяет писать вредоносы.
И в целом вроде даёт ответ на вопрос из названия: потому что все - научное сообщество, коммерческие компании и сами разработчики забили на научный подход. Но толком не предлагает решения этой проблемы.
С другой стороны книга написана хорошо и я с интересом её читал.
Советую её прочитать, если вы:
1. не закончили профильный вуз и не писали на Си и/или трансляторы - там как раз такие кишочки есть, что, на мой взгляд полезно разработчику. Хотя автор как раз считает иначе 😂
2. не программист, но вам очень любопытно как работа программиста устроена внутри - похоже вы один из двух людей в мире, являющихся целевой аудиторией этой книги 😂
3. любите историю - в книге многое говориться о становлении индустрии
4. любите древние книги и научные статьи - в тексте прям миллион ссылок на всё подряд
Мой текущий пост (который уже на стадии финальной полировки) очень хорошо иллюстрирует посыл этой книги - в нём есть такие строки:
И [анкл Боб] тут же говорит - это плохой код, который вносит новые зависимости в систему, и по мере развития системы и появления новых устройств в ней будет появляться всё больше зависимостей. И в итоге система станет жёсткой и хрупкой.
[...]
Однако моя практика показывает, что в современной разработке прикладных приложений бизнес-логика не переиспользуется и новых "устройств" появляться не будет. А, значит, новых зависимостей появляться не будет, система не станет жёсткой и хрупкой и DIP не нужен, ч.т.д.
То бишь сначала анкл Боб бездоказательно заявляет, что в системах будут появляться новые устройства, а потом я так же бездоказательно заявляю, что не будут. Твоё слово против моего, встретимся в суде. Так и живут "инженеры" от современного ИТ...:)
#books@ergonomic_code
👍5😁4❤3
Привет!
Мысли в слух по теме прошлого поста.
Кажется, строительство сооружений и классическое "инженерное дело" — это не верный ориентир для разработки софта.
Как не крути, но в этих областях ТЗ фиксированное — мост и через 10 лет будет выполнять туже функцию и глобально не изменится. А условный айфон - вообще не изменится, если останется жив. А айфон 10 — это уже будет десятый проект с фиксированным ТЗ.
Наиболее близкая, как мне кажется, деятельность к разработке софта - построение бизнеса. Тут одна и та же организация через 10 лет может начать выполнять много новых функций или старые делать по другому.
Ещё более-менее похожая штука - "строительство" городов - города тоже живут долго и сильно меняются.
Других видов деятельности, по "выращиванию" одной сущности в течении длительного срока в меняющихся условиях я пока не придумал.
Надо будет как-нить покопаться что там с научным подходом к бизнесу и строительству городов:)
Мысли в слух по теме прошлого поста.
Кажется, строительство сооружений и классическое "инженерное дело" — это не верный ориентир для разработки софта.
Как не крути, но в этих областях ТЗ фиксированное — мост и через 10 лет будет выполнять туже функцию и глобально не изменится. А условный айфон - вообще не изменится, если останется жив. А айфон 10 — это уже будет десятый проект с фиксированным ТЗ.
Наиболее близкая, как мне кажется, деятельность к разработке софта - построение бизнеса. Тут одна и та же организация через 10 лет может начать выполнять много новых функций или старые делать по другому.
Ещё более-менее похожая штука - "строительство" городов - города тоже живут долго и сильно меняются.
Других видов деятельности, по "выращиванию" одной сущности в течении длительного срока в меняющихся условиях я пока не придумал.
Надо будет как-нить покопаться что там с научным подходом к бизнесу и строительству городов:)
👍5🤔1