Как улучшить свои навыки разработки с помощью Ultimate Todo App: повышение уровня от падавана до джедая

Как улучшить свои навыки разработки с помощью Ultimate Todo App: повышение уровня от падавана до джедая

18 апреля 2023 г.

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

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

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

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

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

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

Вот почему мы решили сделать шаг назад и сосредоточиться на архитектуре программного обеспечения. Мы глубоко изучили гексагональную архитектуру, архитектуру, управляемую событиями и другие шаблоны, такие как CQRS и Event Sourcing. Мы также углубились в Дизайн, ориентированный на предметную область и Разработку, ориентированную на поведение.

Результат?

Что ж, после нескольких месяцев обучения и работы над платформой Bitloops (присоединяйтесь к списку ожидания — она выйдет через несколько месяцев< /em>), мы создали приложение Ultimate ToDo, которое следует всем этим замечательным шаблонам и принципам проектирования.

Теперь мы знаем, о чем вы думаете, приложение ToDo, возможно, не должно быть таким сложным. Но поверьте нам, это приложение — отличный пример создания отличного программного обеспечения, которое легко понять и легко изменить.

Вы можете найти всю кодовую базу в нашем репозитории GitHub: ddd-hexagonal-cqrs-es-eda. . Мы использовали TypeScript/NodeJS и построили его с помощью Nest.JS.

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

И что самое приятное, он использует доступные технологии с открытым исходным кодом и имеет настройки интеграции для MongoDB, PostgreSQL, NATS, JWT (для аутентификации), Jaeger и Prometheus, но, конечно, все это может быть изменены или адаптированы, если хотите.

Позвольте мне разобрать пример для вас!


Общая архитектура программного обеспечения и шаблоны проектирования

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

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

Hexagonal Architecture & Domain-Driven Design

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

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

Понимание домена

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

Event Storming: ToDo App

В этом конкретном примере мы создали три ограниченных контекста и различное количество процессов в каждом:

* ИАМ * Процесс входа пользователя * Процесс регистрации пользователя


  • Задачи
  • Процесс выполнения

    * Маркетинг * Процесс адаптации

<цитата>

Уточнение. Штурм событий дал много интересных и полезных идей для приложения ToDo — возможности практически безграничны. Однако целью этого примера была демонстрация дизайна и архитектуры программного обеспечения, а не функций приложения ToDo!

Сосредоточив внимание на процессе Todo, поскольку он является основным доменом, мы определили пять команд, которые являются отдельными вариантами использования:

* Добавить задачу

* Завершить задачу

* Незавершенное задание

* Изменить заголовок задачи

* Удалить задачу

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

Дополнительные сведения см. в репозитории Github.

Создание приложения

У нас есть четкая структура папок проекта, соответствующая результатам штурма событий. Код бизнес-логики/предметной логики — это код высокой ценности.

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

Project Folder

Для процесса Todo мы настроили приложение для координации действий и хранения вариантов использования.

Todo Process - Module Structure

Зачем нам все это?

* Команды запускают обработчики команд.

* Контракты определяют, как модуль todo взаимодействует с другими модулями.

* Домен содержит все элементы, использующие DDD.

* Порты представляют собой интерфейс между приложением и инфраструктурой.

* Запросы запускают обработчики запросов.

* Тесты включают все выявленные поведенческие тесты.

Весь код есть в репозитории, но на самом деле это не самая интересная часть. Правильная настройка и разработка приложения — вот что делает код таким простым и практичным.

Итак, чем этот пример может вам помочь?

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

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

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

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

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

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

Если вы нашли что-то из этого интересным, я рекомендую взглянуть на сам проект - у нас есть все код там.

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

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


Также опубликовано здесь


Оригинал