Зачем может понадобиться создавать компонент
Компонент — это часть системы, решающая подзадачу такого объёма, которую разработчик способен полностью понять и реализовать за разумное время и независимо от других разработчиков.
Одной из значимых причин существования компонентов является неспособность человека решать сложную задачу целиком. Основным способом снижения когнитивной нагрузки является её декомпозиция на подзадачи. Решение каждой подзадачи оформляется в виде изолированного блока с чётким интерфейсом взаимодействия — именно он и называется компонентом. Объединяя такие блоки в систему, разработчик решает всю задачу целиком.
Наличие в системе нескольких компонентов также позволяет вести разработку параллельно. Система разбивается на компоненты таким образом, чтобы каждый из них мог разрабатываться отдельной небольшой группой разработчиков. В таком случае чётко определённый интерфейс — одна из ключевых черт компонента — становится критически важным: с одной стороны, он задаёт контракт для разработчиков других компонентов, а с другой — ограничивает степень свободы внутри компонента: всё, что выходит за пределы текущего интерфейса, становится бессмысленным, поскольку недоступно другим компонентам.
Ещё одной причиной разделения системы на компоненты является наличие технических ограничений, таких как пропускная способность канала передачи данных, количество ядер процессора, объём памяти и т. п. Например, компонент интернет-магазина обслуживает и просмотр каталога, и оформление заказов. В период распродажи просмотр каталога задействует почти все ресурсы, и на оформление заказа их может не хватить, из-за чего часть заказов будет потеряна. Чтобы не допустить этого, систему разделяют на два компонента, компонент просмотра каталога и компонент оформления заказов, и размещают их на разных серверах. Так даже падение компонента просмотра каталога не приведёт к потере заказов.