Search
Write a publication
Pull to refresh
-4
4.7
Джехути (Тот), Бог наук и информации @Dhwtj

Архитектор и программист

Send message

Междоменные (процессные) инварианты

Level of difficultyMedium
Reading time16 min
Views361

Ястолкнулся с такой проблемой: логика между доменами сложнее самих доменов

Если строить систему по DDD:

Домены

Агрегаты

Use cases

События

всё красиво.

Потом пришёл сценарий: «Отменить заказ»

Я думал: `Order::cancel()`, вызову `inventory.release()`, `pricing.refund()`, и готово»

Но...

Если доставка уже в пути - нужно создать возвратную накладную

Если платёж падал дважды - отменить всё, а при первой попытке только заморозить баллы

Если товара нет - перенести резерв на другой склад, пересчитать доставку, спросить клиента, если дороже

Если клиент повторил платёж - восстановить резерв и доставку

И я понял:

Самая сложная логика тут не в доменах, а между ними.

А в книжках по DDD, Clean Architecture, Hexagonal об этом не пишут.

Это напомнило проблему в ООП, когда каждый объект отвечает только за свою корректность (инвариант), а логическую зависимость при взаимодействии должен обеспечить ещё один класс "чистая выдумка". Также, у ФП есть более простые и явные способы.

Я напишу на Rust, потому что этот язык удобнее управляет бизнес правилами.

Читать далее

Type Driven Development на практике

Level of difficultyHard
Reading time16 min
Views3.4K

Разработка через типы (Type-Driven Development, TypeDD) — это методология программирования, при которой вы начинаете с написания определений типов, которые служат точной спецификацией вашей программы. Вместо того чтобы сначала писать код, а потом добавлять тесты или типы, вы используете компилятор как интерактивного ассистента, который направляет вас к созданию программы, удовлетворяющей заданным типам.

Idris — это чистый функциональный язык программирования, созданный Эдвином Брэди, который идеально подходит для этого подхода благодаря поддержке зависимых типов.


Но попробуем использовать его идеи на практике вне Idris.

Попробуем сравнить такие метрики как
1. Время проектирования (момент, после которого разработчик может больше не соприкасаться с предметной областью, а руководствоваться только ТЗ)
2. Время до выкатки на прод
3. Частота ошибок на проде (и как следствие, ущерб бизнесу и затраты на сопровождение)

Читать далее

ООП. Да что же ты такое?

Level of difficultyHard
Reading time9 min
Views9.2K

Если меня на собеседовании спросят что такое ООП, то может получиться как в анекдоте " завыл, бился головой о стену, в общем ушёл от ответа". Любое простое определение ООП не полно, любое полное слишком сложно. Это показывает что ООП само в своих основах очень сложно, а на поверхности лишь видимая часть айсберга. Итак, пробуем дать краткое и герметичное определение, последовательно вводя минимум определений, чтобы были видны цели а не догма. Герметичное значит ясное и самодостаточное, не опирающееся (явно или неявно) на другие нетривиальные понятия. Всё по взрослому. Мне понадобилось много итераций. И на глубине я увидел чудовищ. Я конечно знал их и раньше, но думал что я просто дурак и не понимаю как просто с ними работать. Нырнул глубже и... они не пропали! Для любой сложной ООП системы они останутся с тобой.

ФП в отличие от него имеет крутую ступеньку входа но дальше сложность не растёт.

Habr, что это за поле «Целевая аудитория»?

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

Читать далее

Архитектурные паттерны для высокой масштабируемости. Часть 3

Level of difficultyMedium
Reading time9 min
Views12K

Что же делать на практике для масштабирования data-bounded (т.е. типичных) приложений?

Я опущу длительные рассуждения и представлю свою "поваренную книгу"

Читать далее

10X – и всё же они существуют

Level of difficultyMedium
Reading time5 min
Views4.1K

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

TL;DR

Для случая разработки Excel 3.0 vs Lotus 1-2-3 разница в количестве строк кода в день различалась на порядок.

Читать далее

Просто пишите код. Часть 1

Level of difficultyEasy
Reading time4 min
Views7.8K

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

Постарался создать простой чек лист для принятия решения о выделения в микросервис конкретного домена.

Читать далее

Архитектурные паттерны для высокой масштабируемости. Часть 2

Level of difficultyHard
Reading time14 min
Views22K

Эта статья предназначена для разработчиков, архитекторов и технических лидеров, которые ищут способы оптимизации производительности и масштабируемости своих систем.

Продолжение статьи об архитектурных паттернах для масштабируемости приложений.

Читать далее

Архитектурные паттерны для высокой масштабируемости. Часть 1

Level of difficultyHard
Reading time16 min
Views24K

Эта статья предназначена для разработчиков, архитекторов и технических лидеров, которые ищут способы оптимизации производительности и масштабируемости своих систем. Она поможет понять:

Когда стоит использовать более простые подходы (например, шардирование, репликацию, CQRS) вместо того, чтобы сразу переходить к микросервисам.

Какие trade-offs возникают при выборе каждого из паттернов или архитектурных решений.

Как избежать излишней сложности, которая может быть вызвана преждевременным внедрением сложных архитектур.

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

Читать далее

Борьба со сложностью

Level of difficultyMedium
Reading time4 min
Views7K

Почему работа всегда сложнее чем кажется в начале?

Почему с течением роста проекта производительность программиста падает?

Почему читать код сложнее чем писать?

И что же со всем этим теперь делать?

Сложная архитектура простых приложений

Level of difficultyMedium
Reading time14 min
Views10K

По мотивам Adidas Running (ex. Runtastic)

Как я бы проектировал это интересное, но малоизвестное у нас приложение в роли архитектора.

Предыстория

Рынка систем электронных соревнований (в 2012 г) нет, но есть огромный интерес к спортивному образу жизни и к соревнованиям. В США не менее 50 миллионов (!) человек (это примерно 15% всего населения) хотя бы раз в неделю выходят на пробежку.

Адидас имеет объем продаж 20–30 млрд долл. в год.

Основной рынок – США, остальные страны – второстепенные рынки.

Посмотреть архитектуру

Information

Rating
2,377-th
Registered
Activity

Specialization

Backend Developer, Software Architect
From 500,000 ₽