Привет!
По канонам ООП, все что представляет собой некую абстрактную сущность, которую можно представить в виде отдельного объекта, нужно в этот самый объект выделять и всю его логику работы инкапсулировать внутри, наружу прокидывая только внешний интерфейс взаимодействия с ним. Это и есть основная суть ООП, потом можем приписать наследование и полиморфизм, но сейчас нам это не интересно. Делается это с целью разбить все приложение на атомарные части, которые можно легко менять, абсолютно не трогая и не ломая все остальные такие же атомарные части. Ведь если внешний интерфейс не поменялся, то без разницы что ты меняла внутри - снаружи все работает также.
Делается это, как минимум, для переиспользования.
Упрощенно, ты копируешь файл в другой проект и все (имеется в виду логика этого объекта) работает также из коробки.
Ты импортишь этот компонент в этом же проекте, но в другом месте, вызываешь те же методы, что и в первом варианте (опять же, не берем полиморфизм и вариации использования) и получаешь из коробки переиспользование.
Вторая причина - меняешь в одном месте и результат автоматически меняется во всех местах переиспользования, если они есть.
То есть, ты заранее думаешь о том, что эта логика может быть переиспользована и будет дорабатываться/меняться.
Теперь, в твоем варианте, если тебе понадобится в другом гарде/части проекта/другом проекте повторить эту логику - это получится сделать без дублирования кода, просто вызовом метода или инстанцииорованием компонента или же придется продублировать код? (нарушим DRY, об этом по сути вторая причина).