Эргономичный код
823 subscribers
82 photos
3 videos
20 files
401 links
Канал о разработке поддерживаемых бакэндов - про классическую школу TDD, прагматичное функциональное программирование и архитектуру и немного DDD.

Группа: https://t.me/+QJRqaHI8YD

https://azhidkov.pro
Download Telegram
Привет!

На днях перевёл Проект Р и Trainer Advisor на Kotlin 2.1.0 и Spring Boot 3.4.0
В целом всё прошло без проблем, делюсь впечатлениями

Проект Р/Котлин 2.0.0 -> 2.1.0
1. Т.к. переходил с версии 2.0.0 так же возникла проблема с пропажей продовых зависимостей в testFixtures source sets. И со второй попытки я её определил и починил быстро
2. В паре data классов с приватными конструкторами пришлось развесить @ConsistentCopyVisibility, чтобы варнинг убрать

Проект Р/Спринг 3.3.1 -> 3.4.0
1. Тест на корс, который ломился без авторизации на закрытый урл начал валиться по 401/3 (забыл уже) - перевёл его на запрос к публичному пути - заработало

Trainer Adviser/Котлин 2.0.21 -> 2.1.0
1. Заглючила идея 2024.2 и опять на testsFixtures - гредлом всё ок собирается, в редакторе ошибок нет, но при попытке сборки проектов идеевским билд тулом (я юзаю его для разработки, так как он быстрее гредлового) - ругается что не может в коде тестов найти символ из кода фикстур. Это поличилось обновлением самой идеи до 2024.3

Trainer Advisor/Спринг 3.3.5 -> 3.4.0
1. Начало взрываться responseEntity.contentLength = storedFileInputStream.metaData.size при size = 0. Добавил if (size > 0) - завелось
2. В одном из эндпоинтов на параметр принципала не был навешан @AuthenticationPrincipal. Раньше это как-то работало, после преезда перестало, после добавления аннотации снова заработало.



На обновление Проекта Р у меня ушло часа три.
Львиная доля ушла на:
1. переход на обратнонесовместимый Kover 0.8.3
2. datafaker в котором задепрекейтили один из методов
3. не связанные с обновлением разборки с гредлом

Trainer Advisor вообще за час максимум обновил.

Держите свои зависимости актуальными - если это делать своевременно, то это требует минимума усилий. А вот нагонять большое отставание - это уже беда. Для некоторых трудозатраты на такое приключение становятся фактически заградительными и проект начинает планомерно превращаться в мамонта.

#kotlin@ergonomic_code #spring@ergonomic_code #projectr@ergonomic_code #trainer_advisor@ergonomic_code
👍43👌1
Привет!

Новая рубрика в канале - челлендж! :)

Предыстория

Собрался я тут писать на свою вики статью "Функциональная (типизированная) обработка ошибок". Текст написал, решил сдобрить примерами. В качестве задачи решил взять парсинг строк в инты. Сначала запилил тупую императивную реализацию. Потом подумал, что это как-то не конгруэнтно и попробовал переписать в декларативном стиле. И такое ощущение, что получилось заметно хуже - и медленнее и сложнее.

История

Предлагаю вам поучаствовать в челлендже на самую понятную и эффективную реализацию функции парсинга:)

Условия:
1. Надо форкнуть репоз-фреймворк, реализовать функцию parseInt так, чтобы проходили тесты
2. Завести пуллреквест со своей реализацией. Ограничений на реализацию нет - можно писать и в императивном стиле, и в декларативном, и с помощью ии
3. Через выходные 16-ого декабря я опубликую в канале все варианты включая свои и заведу голосовалку, какой из вариантов наиболее понятен
4. Победитель получит почёт, свой код в вики эргономичного подхода и ссылки на себя в вики, репозе и канале:)
👍8🔥3
Эргономичный код
Привет! Новая рубрика в канале - челлендж! :) Предыстория Собрался я тут писать на свою вики статью "Функциональная (типизированная) обработка ошибок". Текст написал, решил сдобрить примерами. В качестве задачи решил взять парсинг строк в инты. Сначала…
Привет!

Так, ну чтош, обещанная голосовалка.

В первую очередь, спасибо всем кто отозвался и прислал варианты.

Всего вышло аш 10 вариантов - 5 моих и 5 от подписчиков.
Я решил, что корректнее будет если я не буду их выделять, поэтому варианты идут в случайном порядке.

Сейчас запилю пост с опросом - голосуем:)

Напомню, моя цель выбрать вариант, который проще всего прочитать и понять широкой аудитории.
Эргономичный код
Какой вариант вам было проще всего понять?
Привет!

Фух, вы видели эту гонку? Она была валидольной:)

Не в обиду автору второго варианта, но вчера вечером 5-ый вариант лидировал с перевесом в один (мой:)) голос. И сегодня с утра я с замиранием сердца открывал канал, потому что победа второго варианта поставила бы меня в неловкое положение.

Второй вариант соответствует всем критериям челленджа и объективно является самым понятным. Потому что львиную долю сложности спрятал в стандартной библиотеке. Но в целом он выглядит как хитрый солюшен под конкретные условия задачи и такой код в образовательном материале я бы не хотел приводить. Но, слава богу, обошлось без переобувки в воздухе.

Ну и да, 5ый вариант, очевидно, был одним из моих:) На самом деле первым вариантом, который я, подглядев у одного из участников, упростил заменив isNegative на sign :)

Ещё раз спасибо всем отозвавшимся - если хотите, напишете мне в личку - опубликую пост с именными благодарностями:)
👍9
А, ну и конечно спасибо всем проголосовавшим - вы помогли мне свериться с реальностью и выбрать объективно наилучший вариант для статьи:)
7
Привет!

У меня одна большая и несколько маленьких новостей:)

Большая новость

Я начал новый этап работы над Эргономичным подходом.

Изначально я хотел (и всё ещё хочу) написать книгу о том, как разрабатывать поддерживаемый код. И даже начал её писать , но полгода спустя понял, что с кондачка у меня это не выходит.

Поэтому я завёл сначала этот канал, а потом блог, предполагая, что книгу можно будет собрать из постов. Это помогло мне сильно продвинуться в проработке Эргономичного подхода и теперь я знаю, как систематически делать поддерживаемые проекты.
Но значительная доля этого знания всё ещё не описана.

Поэтому я решил перейти на формат структурированной вики и запустил отдельный сайт для Эргономичного подхода — https://ergowiki.azhidkov.pro 🎉🎉🎉

Пока что он больше похож на индексный указатель моего блога, но у него намного более наглядная структура и я планирую существенную часть 25-ого года посвятить тому, чтобы методично наполнять этот сайт.
Обращайте внимание на версии статей - если вторым числом стоит 0, то внутри либо набор ссылок, либо несколько тезисных предложений, либо неотредактированный черновик.

Однако кое-что интересненькое там уже есть:
1. свежак и с версией v1.1.0 — гайдлайн обработки ошибок, в котором я вернул в милость выброс исключений в коде приложения;
2. Несколько шаблонов работы со Spring Data JDBC;
3. Три черновых подхода к описанию модели неизменяемых реляционных данных. Они написаны в режиме потока сознания, но, на мой взгляд, содержат оригинальные и любопытные идеи.

Наконец, самое главное — по многочисленным просьбам подписчиков, там есть автоматическая поддержка тёмной темы:) Кроме подсветки синтаксиса. И картинок:)

Маленькие новости

Помимо запуска сайта для ЭП, я ещё и причесал личный сайт. Изменений там довольно много, подсвечу только те, что вам могут быть интересны на мой взгляд.

Во-первых, я собрал на основной странице блога все свои посты за всё время — всего там сейчас 62 поста.

Во-вторых, я протегал все эти 62 поста.
Избранные подборки:
- Кейсы
- Функциональная архитектура
- Эргономичный подход
- Эргономичное тестирование

В-третьих, я завёл страничку со списком своих публичных выступлений, где, кроме самих записей есть и ссылки на слайды.
🔥14👍85
Привет!

Мысли в слух.

Наткнулся на очередную свеженькую статью по чистой архитектуре.
В двух словах: чистая архитектура - это не про пакеты - не заводите пакеты 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
Привет!

Из своих планов на "до отпуска" я не осилил только записать и выложить запись лайтненинга про Spring Data JDBC.
Зато запустил вики, поэтому решил таки пойти в отпуск до 1 апреля.

Поэтому в канале будет некоторое затишье - писать что-то буду, скорее всего, но по мелочи, плюс, может быть, осилю в фоновом режиме написать пару статей на эрговики.

И чтобы вы не скучали эти три месяца - подготовил для вас карту канала - уверен, в ней вы сможете найти себе что-то интересненькое почитать/посмотреть как минимум на каникулы, а то и до 1 апреля.

PS>
А ну и лайтенинг тоже собираюсь таки дозаписать в отпуске. Ещё минут 20 к записанным 2 на текущий момент:)