Теперь немного о собственно проектировании.

Допустим, мы знаем, что нашему проекту _нужна_ суровая масштабируемость. Что делать?

Первым делом стоит взять ручку, бумажку и пойти «программировать ногами» 😃
Мы (люди) плохо умеем прогнозировать будущее. Проектирование систем — это прогнозирование будущего.

Чем больше исходных данных мы насобираем, тем больше вероятность, что мы правильно составим «карту территории».
(О соотношении карты и территории: ru.wikipedia.org/wiki/Соотношен…)
Что нам необходимо знать?

- Какие задачи перед нами стоят.
- Какое решение считается удовлетворительным.
- Какие есть ограничения.
Чего мы хотим добиться:

- Доменный слой должен быть самостоятельным и независимым.
- Адаптеры должны подстраивать внешние сервисы под нужды нашего приложения, а не наоборот.
- ...
- ...Кода должно быть минимальное необходимое количество.
- Модель системы должна быть максимально простой.
- Направление зависимостей должно быть _к домену_.
Я недавно писал пост о дизайне системы с помощью слоёв и DDD:
bespoyasov.ru/blog/generatin…

Давайте используем его как пример и ответим на вопросы.
Так-с, обед закончился 😅
Ответим на вопросы после работы!
Продолжим 🙂

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

Если мы делаем приложением только под браузер — это одно, а если мы пишем его для браузера, React Native, и Ноды — уже другое.
В первом случае мы можем не прорабатывать слой адаптеров так уж тщательно, потому что переиспользовать какой-то код нам вряд ли потребуется.

Во втором случае наоборот.
Узнаём ограничения: временные, технологические и т. д., потому что они тоже могут влиять на глубину проработки.

Тут, наверное, надо сказать ещё, что при дизайне систем надо подубавить динамик перфекционизма, потому что перфекционизм мешает 😃
Невозможно проработать систему на 100%. Всегда останется что-нибудь, что можно улучшить.

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

Получается такой UML на минималках.
В стрелочках я указываю публичное API, возможно, абстрактно формат сообщений, которыми сущности будут обмениваться.

Когда примерно картинка складывается, я раскидываю модули на слои и проверяю:

- ...
- ...Всё ли нормально с направлением зависимостей;
- Следую ли я принципам SOLID;
- Что будет, если захочу заменить реализацию какого-то модуля на другую;
- Сколько понадобится ресурсов, чтобы поменять платформу, инфраструктуру, whatever.
Обычно получается нечто вроде такой диаграммы (из поста с деревьями):
Я не стал упарываться, покрывая веб-платформу адаптерами с ног до головы, так как был уверен, что мне это не понадобится.

Но зато при проектировании я заметил, что модуль геометрии придётся разбить на 2 отдельных интерфейса.

ota-solid.now.sh/isp
Также помогает выделить Driver (управляющие), и Driven (управляемые) адаптеры:
(На эту тему ещё раз посоветую эту статью herbertograca.com/2017/11/16/exp…)
Диаграмма помогает не писать сразу код, а сперва приметиться на бумаге — «а оно вообще поедет?».

Иногда диаграммы помогают обнаружить ошибки проектирования:

- функциональность засунули не туда;
- модули слишком сильно зацеплены;
- ...
- ...Нужна шина событий, чтобы связать какие-то сущности;
- Нарушаем SRP, DIP, ISP и прочее.

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

• • •

Missing some Tweet in this thread? You can try to force a refresh
 

Keep Current with jsunderhood

jsunderhood Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

More from @jsunderhood

27 Apr
Доброе утро! Сегодня вторник, а значит поговорим об ООП на фронте.

Пока я заливаю в себя кофе, давайте проведём опрос. Как вы думаете, ООП и фронтенд:
А пока идёт голосование, обсудим, чем ООП плохо и хорошо, а что его не любят и наоборот.

Начнём с хейта 😃
Сразу начну с того, что не каждому проекту ООП нужно.

Иногда гораздо проще написать пару функций с объектами, и никаких солидов не надо. Об этом подробнее в конце 🙂
Read 52 tweets
26 Apr
Теперь немного ссылок на Гитхабы!

Есть несколько шаблончиков для Реакта:
- github.com/eduardomoroni/…
- github.com/bailabs/react_…
Есть и без Реакта!
Вот я писал недавно пост об архитектуре, есть репозиторий для с исходниками:
- github.com/bespoyasov/tre…

А есть и с Реактом, и с Next!
Вот сайт недавно переписывал:
- github.com/bespoyasov/www
Структура файлов в двух последних репозиториях не отражает слои, но из поведение — вполне.

Кстати, репозиторий с сайтом ещё и хорошо показывает, как и когда можно остановить глубину проработки.
Read 5 tweets
26 Apr
У меня есть смутное подозрение, что это именно то, что в статье “How I put it all together” называют компонентом.

(Такой кусок гексагонального пирога.)

herbertograca.com/2017/11/16/exp…
То есть там конечно есть особенности, и оно не «точь в точь такое же», но кажется, будто бы идея где-то очень близко.
Кстати!

Структура папок никак не влияет на архитектуру и не отражает её 😃

То есть мы можем поделить приложение на слайсы/компоненты, которые будут содержать в себе код фичи под каждый случай.

Но при этом деплоить, например, по слоям. Вообще без проблем.
Read 4 tweets
26 Apr
Да! ^_^

Недавно меня уже спрашивали в Твитере, что-куда-и-как можно вынести.

Я ответил на примере приложения с котиками 😼
Сейчас в дополнение к котикам сделаем онлайн-магазин печенек! 🍪
Допустим, наш магазин продаёт разные виды печенек. У каждой печеньки есть цена, состав и срок изготовления.

Пользователи могут покупать печеньки на сайте, указывая предпочтения по вкусам, аллергиям, наличию молока и проч.
Read 11 tweets
26 Apr
Как и обещал, начнём с наброса 😃
Что такое чистая архитектура, зачем нужна, плюсы, издержки.

Если вы работали c ytq, расскажите о своём опыте? Что было круто, что было неудобно? Будем разбираться, действительно ли это полезный инструмент, или просто переусложнённый хайп.
Начнём с того, что такое «Чистая архитектура».

Behold!
В общих чертах: весь код поделен на слои.

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

Прикладной слой рулит сценариями, которые специфичны конкретно этому приложению.
Read 63 tweets
26 Apr
На эту неделю хочу предложить вам вот такой план:

В понедельник поговорим об архитектуре. День начнём с наброса — а нужна ли вообще «Чистая архитектура» 😃

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

Кто они: «хорошие друзья» или «заклятые враги»? Мертво ли ООП, устарело ли морально, почему его хейтят.
В среду поговорим о чистоте кода и обсудим, как сделать его читаемым и тестируемым.

Начнём с нейминга, закончим принципами и эвристиками и заумных книжек 🙂
Read 8 tweets

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Too expensive? Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal Become our Patreon

Thank you for your support!

Follow Us on Twitter!