Стоит ли реализовывать умные компоненты?
Или как не напороться на боль.
Изучив некоторые рекомендации VUE и то что я нашёл в интернете.
Есть такое понятие как умные и глупые компоненты.
Глупые компоненты не зависят от логики основного приложения.
Умные компоненты, это собственно страницы, которые жёстко привязаны к проекту и много от чего зависят.
Мой вопрос заключается в том, как организовать реализацию умных компонентов (не страниц) и стоит ли так делать?
Например, в моём приложении, часто встречается одна и та же логика одного компонента.
Это Autocomplete, который должен в зависимости от введённых данных загружать список.
Согласитесь, было бы нелогично в десяти местах реализовывать один и тот же механизм.
Поначалу я так и сделал, реализовав всё это дело непосредственно в папке components, а потом понял что, совершил ошибку и мне не стоило там реализовывать логику загрузки данных.
Это нужно сделать как-то иначе.
Я понимаю, что вопрос тривиальный, хотелось бы услышать совета по поводу организации (умных, глупых).
Если говорить о структуре, то примерно я вижу так.
src
____components
____snippets
____views
В snippets будут лежать компоненты, которые реализуют логику и жёстко привязаны к проекту.
В свою очередь, они могут использовать компоненты из папки components но не наоборот.
Игорь, не думаю что имеет значение в какой папке находится компонент, в smart/dumb речь про 1 место управление данными, которые потом просто прокидываются "вниз" по дереву
Вы просто столкнулись с общей проблемой переиспользования кода.
Конечно хочется писать код один раз и избегать копипасты, но не всегда этого легко достичь.
Побороть эту проблему может только грамотное планирование структуры програмы. Далеко не всегда можно достичь нужного результата с первого раза, приходится делать рефакторинг.
Вот несколько принципов:
- старайтесь разбивать программу на компотенты.
- чем меньше и проще компонеты, тем проще их переиспользовать и проще с ними работать.
- используйте миксины когда вам нужно переиспользовать логику и нельзя вынести ее в отдельный компонент.
- разные вычисления можно вообще вынести в отдельные файлы в папку assets