Чистый микроблог
Последние пару лет был занят тем, что искал способ как распутать приложение, в котором был применен архитектурный паттерн "The Big Ball of Mud".
Применять этот паттерн не сложно - просто решаешь все поступающие задачи не раздумывая над такими "мелочами" как зависимости в коде.
Немножко упорного труда и цель достигнута: меняешь в одном месте - ломается в трех других.
Причем чем круче программист, тем быстрее у него получается.
Решение
Бессонные ночи и тонны прочитанной литературы помогли найти решение как писать "чисто". Не важно - что-то новое или рефакторинг старого.
Появилась другая проблема - это решение очень сложно донести до коллег. Только начинаешь - и сразу вопросы "А зачем?" "Работает же" и так далее.
Для меня очевидно почему нужно писать "чисто": цена, которую мы платим за архитектурные ошибки - это наши жизни уходящие на поиск багов, анализ логов и недопонимания.
Писать "чисто" очень просто. Начинаешь с важного, а потом детализируешь.
Поехали
Чтобы больше не объяснять, буду показывать на примере очередного приложения для микроблогинга. От начала до конца, от важного, к деталям. Писать буду на Python.
Мне кажется, что самое важное - это данные, с них и начнем.
from typing import NewType CustomerId = NewType("CustomerId", str) PostId = NewType("PostText", str) PostText = NewType("PostText", str) class Post: id: PostId text: PostText class Customer: id: CustomerId posts: [Post]
Эти сущности - описание структуры данных, которые мы будем обрабатывать в следующей серии. Нашим постам и клиентам совершенно ничего не известно о деталях реализации.
З.Ы. Если вы не хотите ждать, а желаете сразу посмотреть как любимый PostgreSQL подключается последним коммитом, можете посмотреть на приложение, написанное мною на Clojure. Начните с README.
Архитектурная ошибка там, на мой взгляд, только одна и ее не сложно исправить. Можем обсудить.