Рубрики
Без рубрики

Как писать надежные приложения каждый раз, используя «чистую архитектуру»

Даниэль Оливейра Как писать надежные приложения каждый раз, используя «чистую архитектуру» в качестве разработчиков, мы не можем удержать от использования внешних библиотек и каркасов в наших системах. Руки сообщества создают изумительные инструменты, а использование их только естественно. Однако у всего есть недостаток. Неограничные команды и

Автор оригинала: FreeCodeCamp Community Member.

Даниэль Оливейра

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

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

Архитектура программного обеспечения предлагает модели и правила для определения структур (таких как классы, интерфейсы и структуры) в системе и как они относятся друг к другу. Эти правила продвигают многократно и разделение опасений для этих элементов. Это позволяет легко изменить детали реализации, такие как СУБД или интерфейсная библиотека. Рефакторы и исправления ошибок влияют как можно больше деталей системы. И добавление новых функций становится ветером.

В этой статье я объясню Модель архитектуры, предложенная в 2012 году Роберт С. Мартин, Дядя Боб Отказ Он является автором классики, как Чистый код и Чистый кодер. В октябре этого года он запустит другую книгу, Чистая архитектура Отказ

Модель имеет то же имя, что и книга, и она построена на простых концепциях:

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

Мы просто должны убедиться, что Интакторы работать должным образом, и мы добры к работе. Не волнуйтесь, если слово «интеракторы» казалось вам иностранцам, мы узнаем о них в ближайшее время.

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

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

Объекты

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

В наших счетчиках образец, есть очень очевидное предприятие: Счетчик сам.

Сценарии использования

ИСПОЛЬЗОВАНИЕ СЛУЖИВАНИЯ УТВЕРЖДАЕТСЯ, КАК ПРАВИЛА ПРИМЕНЕНИЯ. Они представляют каждое из употребления случаев использования одного приложения. Удачный элемент этого слоя обеспечивает интерфейс к внешнему слою и действовать в качестве ступицы, который связывается с другими частями системы. Они несут ответственность за полное выполнение случаев использования и обычно называются интеракторами.

В нашем образце у нас есть случай для увеличение или уменьшение наше счетчик :

Обратите внимание, что заводская функция для Chang EcounterInteractor Получает параметр типа Контрактария Отказ Мы обсудим существование этого типа позже в статье. Но мы можем сказать, что ворота – это то, что стоит между случаями использования и следующим слоем.

Интерфейсные адаптеры

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

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

Обратите внимание, что компонент не использует Счетчик Пример, чтобы представить его значение, но экземпляр CounterViewdata вместо. Мы сделали это изменение в Декупла, представляя логику от деловых данных Отказ Примером этого является логика выставки счетчика, основанная на режиме просмотра (римских или индуистских арабских цифр). Реализация CounterViewdata следует ниже:

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

Рамки и драйверы

Инструменты, которые ваша система использует для связи с внешним миром, составляют внешний слой. Мы обычно не пишем код в этом слое, который включает в себя библиотеки, такие как React/Redux, API для браузера и т. Д.

Правило зависимости

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

Элемент не должен зависеть от любого элемента, принадлежащего слою за пределами его собственного.

Например, элемент в использовании Case Layer не может иметь никакого знания о любом классе или модуле, связанном с постоянством GUI или данных. Аналогично, сущность не может знать, какие случаи использования используют его.

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

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

Возможно, вам не понадобится

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

Хорошо … так что?

С этой статьей мы обнаружили подход к отделениям наших системных организаций. Это делает их легкими для поддержания и продления. Например, чтобы построить такое же приложение с использованием Vue.js, мы бы только переписали Уплотнение и Counterwidget составные части. Исходный код приложения образца находится в ссылке ниже:

Valbrand/Counter-Clean-архитектура Способствовать разработке контр-чистой архитектуры, создавая учетную запись на GitHub. github.com.

Эта история была переведена на португалью мной! Это доступно здесь Отказ

Какие плюсы и минусы вы видите в этом подходе? Вы использовали что-то похожее в производстве? Поделитесь своим опытом в ответах. Если вам нравится статью, пожалуйста, хлопайте для меня!