Skip to content

Commit 2a41711

Browse files
committed
Исправлена проблема с открытием страницы "Эргономичный подход" в новой вкладке
1 parent 50cde32 commit 2a41711

3 files changed

Lines changed: 86 additions & 79 deletions

File tree

content/_index.adoc

Lines changed: 3 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -1,82 +1,8 @@
11
---
22
title: Эргономичный подход
3-
description: Способ быстро создавать кодовые базы, которые легко менять для поддержки новых требований
43
type: docs
4+
weight: 125
5+
bookHref: "/docs/about-ea"
56
---
67

7-
:source-highlighter: rouge
8-
:icons: font
9-
:sectanchors:
10-
:toc:
11-
:imagesdir: /docs/images
12-
13-
== Об Эргономичном подходе
14-
15-
_Эргономичный подход — способ быстро создавать эргономичные кодовые базы — кодовые базы, которые легко менять для поддержки новых требований._
16-
17-
Критерии, которым должна соответствовать хорошая кодовая база, давно известны: её поведение должно быть полностью покрыто быстрыми автоматическими тестами, а реализация должна обладать высокой функциональной связанностью (cohesion) и низкой сцепленностью (coupling).
18-
19-
Однако множество кодовых баз всё ещё не соответствуют этим критериям.
20-
Как следствие, критичные ошибки и горящие сроки являются «естественным» состоянием дел для многих команд.
21-
22-
Мне такое состояние дел не подходит, и для того, чтобы вместе со своими командами систематически и быстро создавать хорошие кодовые базы я разработал Эргономичный подход.
23-
24-
Эргономичный подход — это набор принципов, моделей, методик и шаблонов, которые помогают быстро проектировать и разрабатывать кодовые базы, полностью покрытые автоматическими тестами и с реализацией, обладающей высокой функциональной связанностью (cohesion) и низкой сцепленностью (coupling).
25-
26-
Помимо этой вики я пишу об Эргономичном подходе в своих https://t.me/ergonomic_code[Telegram-канале] и https://azhidkov.pro/posts[блоге].
27-
28-
== Суть Эргономичного подхода
29-
30-
По большому счёту Эргономичный подход можно свести к нескольким link:++{{<ref "docs/principles/">}}++[принципам] в трёх областях:
31-
32-
. Тестирование:
33-
.. тесты должны работать через публичное АПИ;
34-
.. 100% поведения системы должно быть покрыто тестами;
35-
.. моки должны использоваться только для верификации взаимодействия с неуправляемыми зависимостями, либо для симуляции трудновоспроизводимого поведения управляемых зависимостей (в первую очередь системные ошибки);
36-
.. тесты должны быть быстрыми — < 10 секунд на полный цикл запуска одного теста, <300 секунд на запуск всех тестов сервиса;
37-
38-
. Моделирование предметной области:
39-
.. Предметная область должна быть разбита на небольшие слабосвязанные агрегаты;
40-
.. Агрегаты и связи между ними должны образовывать направленный ацикличный граф;
41-
.. Агрегаты должны быть представлены в коде неизменяемыми объектами, хранящиеся в изменяемых репозиториях.
42-
43-
. Проектирование поведения:
44-
.. Бизнес-логика и ввод-вывод должны быть разделены;
45-
.. Бизнес-логика должна быть написана в виде чистых функций без побочных эффектов;
46-
47-
На практике соблюдать эти принципы не так просто, как может показаться на первый взгляд.
48-
49-
Прямолинейный подход к написанию тестов без моков может привести к их очень медленной работе, а тестирование через публичное АПИ — кровавому и хрупкому месиву в коде сетапа фикстуры.
50-
51-
А разделение бизнес-логики и ввода-вывода в сложной операции системы или декомпозиция нетривиальной модели на агрегаты может оказаться сложной задачей даже для опытного разработчика.
52-
53-
Поэтому весь свой опыт разработки в соответствии с этими принципами я свожу в модели, методики и шаблоны, которые позволяют всей команде не наступать на одни и те же грабли и не изобретать одни и те же велосипеды по нескольку раз.
54-
55-
== Промышленное применение Эргономичного подхода
56-
57-
С 2020 года я вместе с несколькими командами сделал в соответствии с Эргономичным подходом девять коммерческих проектов — от реинжиниринга ключевых подсистем и разработки небольших сервисов до реинжиниринга и дальнейшей разработки системы размером в два человек-года.
58-
Суммарно по Эргономичному подходу написано уже порядка ста тысяч строк коммерческого Kotlin- и Java-кода.
59-
60-
Все проекты были успешно переданы в промышленную эксплуатацию или заказчикам, а проекты по реинжинирингу дали объективное и существенное улучшение характеристик кодовой базы.
61-
62-
Про опыт и результаты применения Эргономичного подхода в некоторых из этих проектов я рассказываю в своих выступлениях и постах.
63-
64-
В докладе https://www.youtube.com/watch?v=wq9LBouRULs&list=PLVe-2wcL84b80nQ0KGik2CJ_H9G6DRc5d&index=5[Структурный дизайн. Древний секрет простого и быстрого кода] на Joker '24, его https://azhidkov.pro/posts/24/11/structured-design/#_%D0%BA%D0%B5%D0%B9%D1%81_3_project_e[расшифровке], а также серии постов (https://azhidkov.pro/posts/23/07/project-e-results/[1], https://azhidkov.pro/posts/23/09/project-e-part1/[2], https://azhidkov.pro/posts/23/10/project-e-part2/[3]), я рассказываю о том, как, выполнив реинжиниринг проекта силами юниоров, я повысил скорость и качество работы команды в три раза.
65-
66-
В том же https://www.youtube.com/watch?v=wq9LBouRULs&list=PLVe-2wcL84b80nQ0KGik2CJ_H9G6DRc5d&index=5[докладе] и его https://azhidkov.pro/posts/24/11/structured-design/#_%D0%BA%D0%B5%D0%B9%D1%81_2_project_daniel[расшифровке] я также рассказываю о реинжиниринге модуля маршрутизации чат-центра Threads (сейчас — edna.chatcenter).
67-
В результате реинжиниринга производительность модуля выросла в 300 раз, а код реализации превратился из спагетти-кода в аккуратное дерево:
68-
69-
image::threads-reengineering.png[link={imagesdir}/threads-reengineering.png]
70-
71-
В докладе https://youtu.be/7u7LGhXlpcE?t=1352[Рациональный подход к декомпозиции систем на модули или микросервисы] на JPoint '23 и link:https://azhidkov.pro/posts/23/04/ergonomic-decomposition/#\_%D0%BA%D0%B5%D0%B9%D1%81_%D0%BA%D1%8D%D0%BC%D0%BF[посте] с его расшифровкой я рассказываю о проекте Кэмп.
72-
Проекте, сделанном в срок двумя юниорами, и с отзывом руководителя проекта на их работу: «К бэку у меня вообще претензий нет. Он просто работает».
73-
74-
В посте https://azhidkov.pro/posts/22/06/220611-true-story-project/[Диаграмма эффектов: пример построения] я рассказываю о проектировании небольшого сервиса для X5 Group, обеспечивающего актуализацию информации о десятках тысячах магазинов сети "Пятёрочка" по всей стране в Яндекс.Картах и 2Гис.
75-
76-
Наконец, в посте https://azhidkov.pro/posts/21/03/210321-project-l-testing/[Тесты, которым можно доверять], я рассказываю об устройстве тестирования проекта по проверке бизнес-гипотезы.
77-
Этот проект позволил заказчику быстро и за фиксированную стоимость инвалидировать неудачную бизнес-идею и минимизировать потери.
78-
79-
Также у меня есть два проекта с открытыми исходным кодом, сделанных по Эргономичному подходу:
80-
81-
* https://github.com/ergonomic-code/Trainer-Advisor[Trainer Adviser] — некоммерческий, но настоящий и относительно большой (16К строк Kotlin-кода, 17 таблиц) с двумя реальным пользователями;
82-
* https://github.com/ergonomic-code/Project-Mariotte[Project Mariotte] — минимальный демонстрационный проект.
8+
Редирект на индексную страницу

content/docs/_index.adoc

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
title: Эргономичный подход
3+
type: docs
4+
weight: 125
5+
bookHref: "/docs/about-ea"
6+
---

0 commit comments

Comments
 (0)