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

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

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

Если вдруг новость прошла мимо вас: вышла идея 2022.1 советую всем обновиться и ознакомиться с новшествами - есть прикольные

#tools@ergonomic_code
О, откапал, что в спринге можно размеры данных указывать с суффиксами аля 2mb и прокидывать их в DataSize

#tools@ergonomic_code #spring@ergonomic_code
Привет!

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

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

Микро правило распределённого проектирования Фаулера: My First Law of Distributed Object Design: Don't distribute your objects.

Пост DHH на ту же тему.

Для того чтобы идти в зону боли и страданий распределённое программирование нужны веские причины.

#posts@ergonomic_code #why_no_microservices@ergonomic_code
Привет!

Пост с наикрутейшей подборкой принципов и техник написания хороших тестов. Представитель вида постов занесённых в красную книгу - посты которые я целиком рекомендую безо всяких но и оговорок:)

#posts@ergonomic_code #ergo_testing@ergonomic_code
👍2
Привет!

Увидев единомышленника в авторе поста о модульном программировании на спринге решил прочитать и его книгу о Чистой архитектуре. С робкой надеждой найти там методику декомпозиции системы на модули.

Но мои надежды не оправдались - как и во всех других книгах эта тема осталась не раскрытой. Всю книгу автор рассматривал структуру реализации одного, спущенного свыше модуля - account. Откуда он взялся, как связан с другими модулями, какой у него интерфейс - это всё осталось за кадром.

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

Вообще в книге есть здравые мысли касательно сокрытия реализации модулей - это стоит почитать. Там есть подробная инструкция как нагенерять гору абстракций и бойлерплейта по чистой архитектуре - это можно почитать, если задача требует жёсткой изоляции домена. И есть глава которую лучше пропустить целиком - 7. Testing Architecture Elements. В этой главе собрана подборка рецептов, как попасть в ад - пирамида тестирования, тестирование отдельных классов, активное использование моков.

Вердикт - рекомендую, при условии, что вы понимаете зачем вам нужна Чистая архитектура и это не карго культ. С другой стороны, если в это понимаете, то и книга вряд ли будет содержать что-то новое для вас.

#books@ergonomic_code
👍4
Привет!

Прочитал одну из самых крутых книг по разработке информационных систем в своей жизни - Unit Testing Principles, Practices, and Patterns.
Не дайте ввести себя в заблуждение скромному названию - эта книга представляет собой кладезь мудрости и принципов программирования и проектирования в целом. Плюс в ней представлено лучшее из известных мне на данный момент описание прагматичной (без монад) функциональной архитектуры.

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

Вердикт - маст рид вне очереди.

Апдейт статуса поста по диаграмме эффектов - первый драфт с подробным описанием примера построения готов. Но предстоит ещё как минимум несколько итераций ревью и вычитки, плюс у меня буквально сегодня ночью появились идеи изменения нотации, поэтому релиз будет недели через две минимум. Стей тюнед, вобщем:)

#books@ergonomic_code #ergo_testing@ergonomic_code #functional_architecture@ergonomic_code
👍7
Привет!

Тестирование свойств мне кажется очень крутой техникой, за освоение которой я сам ещё толком не брался.
Но при случае читаю посты посвящённые ей и сегодня наткнулся на хороший пост, который раскрывает ход мысли при написании тестов свойств - рекомендую почитать:)

#posts@ergonomic_code #ergo_testing@ergonomic_code
Привет!

Во-первых, с радостью обращаю ваше внимание, что наc стало 150:)

Во-вторых, написал микропост о том, как фичи и идиомы Kotlin способствует локализации рассуждений о коде

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

#kotlin@ergonomic_code
👍2
image_2022-05-13_18-16-19.png
13.9 KB
Привет!

Ну скажите же, эта структура намного понятнее, чем свалки из controllers, services и т.д.

Возвращаюсь спустя полгода к проекту, сделанному по ЭП и нарадоваться не могу.

#case@ergonomic_code #why_ergo_approach@ergonomic_code #ergo_approach@ergonomic_code
👍1
Привет!

У меня есть мечта. Я хочу, чтобы данные и код моих программ располагались на одной машине, лучше - в одном процессе. Когда я закончу Эргономичный подход, я вернусь к созданию технологии, которая позволит это сделать. Если кто-то другой не сделает её раньше:)

#tools@ergonomic_code #ergo_persistance@ergonomic_code #ergo_approach@ergonomic_code
🔥2
Привет!

Прекрасное подтверждение для тезиса "Сначала объектно-ориентированная декомпозиция, потом модульный монолит на этой базе, потом, если потребуется, микросервисы".

О том как использовать диаграмму эффектов для рациональной объектно-ориентированной декомпозиции я напишу третьим постом в текущей серии о диаграмме эффектов.

#posts@ergonomic_code #why_no_microservices@ergonomic_code
👍7
Привет!

Пост с примером построения диаграммы эффектов реального проекта перешёл в стадию полировки, думаю есть шанс опубликовать его на следующей недели.

А чтобы вы пока не скучали я накатал микропост, о том что "Program to an interface, not an implementation" - это не про ключевое слово.
abstactions.png
140.2 KB
Привет!

Разбираю сейчас легаси проект на .Net и подвернулась хорошая иллюстрация из реальной жизни предпредыдущего поста про абстракции.

Я вообще пока не понимаю был ли смысл оборачивать Context в UnitOfWork, но вводить IUnitOfWork вообще никакого смысла не было - из него утекают типы реализации.

Я бы ещё хоть как-то понял интерфейс, если бы у них были тесты на моках. Но даже их нет.

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

А потом, похоже, вырисовывается ещё пара нетривиальных спинофов - про сцепленность и объектные/объектно-ориентированные дизайн и программирование.

#project_e@ergonomic_code #design@ergonomic_code
Привет!

Надоело мне мурыжить пост о построении диаграммы реального проекта, поэтому я волевым усилием его быстренько добил и с радостью представляю вашему вниманию:)

А дальше в серии будет два спиноффа - "Сцепленность" и "Объектный дизайн, как средство снижения сцепленности". Обе концепции у меня самого ещё не до конца разложены по полочкам, поэтому не берусь спрогнозировать сколько мне времени мне потребуется на эти посты.

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

#effects_diagram@ergonomic_code #case@ergonomic_code #project_geoservices@ergonomic_code #posts@ergonomic_code
2
Привет!

С третьей попытки откопал статью, которую на вики указывают как первое описание сцепленности и связности. Там можно бесплатно зарегаться и бесплатно бесконечное кол-во раз арендовать книгу целиком на час.

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

Тем не менее, советую ознакомиться с первоисточником:)

#papers@ergonomic_code #structured_design@ergonomic_code