Настройка хорошей архитектуры интерфейса является фундаментальным шагом для начала разработки веб-приложения или веб-сайта. Надлежащая практика и соглашения по кодированию необходимы, но как насчет структуры? Как мы можем создать хорошую архитектуру, которую можно поддерживать во времени? Но больше всего, с чего нам начать?
Когда я начал думать о проблеме, я понял, что мне нужно несколько вещей:
- Я хотел многостраничный проект (веб-приложение или веб-сайт).
- Я хотел, чтобы мой проект поддерживал экран разных размеров и разрешений, другими словами: я хотел, чтобы он был отзывчивым.
- Я хотел, чтобы конечный продукт был ремонтопригодным.
- Я хотел, чтобы конечный продукт был производительным.
- Я хотел повторно использовать этот шаблон для любого будущего проекта.
Правильные инструменты
В настоящее время у нас есть много интересных инструментов, которые могут помочь нам в современном рабочем процессе разработки интерфейса. Итак, в отношении точек 1 и 2 я сказал себе, что мне нужна архитектура CSS на основе точек останова, которая могла бы помочь мне поддерживать различные устройства и размеры рабочего стола. С другой стороны, я также знал, что такое огромное количество CSS и файлов может быть немного грязным (и несовместимым с пунктом 3.), поэтому я решил начать использовать препроцессор CSS (в моем случае это был Sass с Compass) ).
А как насчет пункта 4? Ответ был прост: я решил использовать Gruntjs. Наконец, как насчет пункта 5? Даже в этом случае ответ был: Yeoman, лучшее решение на мой взгляд.
Организация рабочего процесса
Каждый интерфейсный проект всегда включает библиотеки, плагины jQuery и множество файлов JavaScript и CSS (или файлов SCSS в данном случае) для различных целей и задач. Смешивание всех этих элементов означает работу с различными технологиями, а объединение их означает создание хорошего рабочего процесса на стороне клиента. Нам бы пришлось управлять огромным рабочим процессом, который включает в себя различные технологии. Вот почему все организовано по папкам, следуя шаблону или соглашению, чтобы сохранить ясность и аккуратность, действительно важно.
Мы можем выбрать разделение всех основных компонентов переднего плана на макрогруппы, например:
- Файлы SCSS
- скрипты
- взгляды
Можем ли мы разделить их на более мелкие группы? Конечно можем:
- SCSS
- переменные
- Примеси
- общие части для каждого макета
- отдельные макеты
- JS
- библиотеки (такие как jquery, angularjs, gAnalytics и т. д.)
- плагины (обычно плагины jquery)
- контроллеры (я имею в виду контроллеры, такие как контроллеры angularjs)
В архитектуре на основе шаблонов (например, с использованием blade.php или jade с nodejs) мы также можем разделить представления следующим образом:
- взгляды
- общие части для каждого вида
- одиночные просмотры
Но я не обсуждаю этот случай в этой статье, поскольку я предполагаю, что для каждой страницы или макета в моем проекте есть только одно представление (файл HTML).
Исходя из всех этих предварительных соображений, вот как я решил организовать архитектуру, вот мое дерево папок:
project \css \imgs \js \controllers pageOne.js pageTwo.js \libs angular.js jquery.js analytics.js \plugins jquery.tooltip.js textResize.js formValidation.js \views pageOne.js pageTwo.js \scss \framework _core.scss _forms.scss _input.scss _mixins.scss _variables.scss \layouts _all.scss _phablets.scss _tablets.scss _desktop.scss _desktop-large.scss _retina.scss \pageOne _all.scss _phablets.scss _tablets.scss _desktop.scss _desktop-large.scss _retina.scss \pageTwo _all.scss _phablets.scss _tablets.scss _desktop.scss _desktop-large.scss _retina.scss \libs _animate.scss _normalize.scss _reset.scss \plugins _jquery.tooltip.scss _jquery.fancyInput.scss
Папки объяснения
ГИМ
Я решил разместить все файлы изображений здесь: .png
, .jpg
, .jpeg
, обои и т. Д.
Примеры: icon.png
, home-background.jpeg
, userAvatar.jpg
JS (основная папка)
Я решил поместить все файлы .js
здесь, организованные в подпапках следующим образом:
\ контроллеры (подпапка)
Это папка для angular controllers
, каждый с тем же именем соответствующего вида. Например, если ваш home.html
нуждается в угловом контроллере, вы должны создать такой файл: project\js\controllers\home.js
Примеры: home.js
, user-registration.js
, user-login.js
\ libs (подпапка)
Я создал эту папку для библиотек JavaScript. Когда я говорю о библиотеках, я не имею в виду плагины, поэтому я решил провести различие между первыми и вторыми, создав две разные папки.
Примеры: jquery-latest.js
, angular.js
, googleAnalytics.js
\ плагины (подпапка)
Для работы плагина нужны зависимости, а для библиотек — нет. Вот почему я создал другую папку:
Примеры: jquery-fancyInput.js
, restangular.js
, customPlugin.js
, jquery-airport.js
\ views (подпапка)
Я создал эту папку для всех презентационных материалов. Каждый файл должен иметь одинаковое имя соответствующего представления. Например, если вашему home.html
нужны некоторые эффекты, вещи и инициализация плагинов, вы должны создать такой файл: project\js\views\home.js
, у которого есть document ready
собственный document ready
.
Примеры: home-animations.js
, user-registration.js
, user-login.js
, site-animations.js
css (основная папка)
Эта папка содержит все сгенерированные css
из основных файлов scss
. Например, home.scss
создаст соответствующий файл home.css
в этой папке.
\ libs (подпапка)
Даже для CSS-файлов я различаю библиотеки и плагины. Вот несколько примеров библиотек CSS:
Примеры: _meyers-reset.scss
, _normalize.scss
, _animate.scss
, _960gridSystem.scss
\ плагины (подпапка)
CSS-файлы, содержащиеся в этой папке, являются необходимыми стилями для работы плагинов JavaScript.
Примеры: _jquery-fancyInput.scss
, _jqueryTooltip.scss
\ framework (подпапка)
Я решил разместить файлы scss
на всех страницах проекта в этом каталоге.
Подпапка структуры будет организована следующим образом:
-
_variables.scss
(объявление переменных проекта — цвета, интервалы и т. д.) -
_mixins.scss
(объявление mixin проекта — типографика, clearfix, анимация и т. д.) -
_forms.scss
(индивидуальная стилизация и сброс формы) -
_input.scss
(пользовательский стиль ввода и сброс)
\ раскладки (подпапка)
А вот и отзывчивая часть. Файлы в этом каталоге организованы таким образом, что они охватывают все разрешения экранов, следуя принципу мобильности. Итак, вы должны начать объявлять свои собственные стили, используя файл _all.scss
. Правила, объявленные в этом файле, действительны для всех размеров экрана и всех видов. Если вы хотите, чтобы ваш сайт был адаптируемым, просто перепишите правила и объявите их для любого другого разрешения экрана.
Папка организована следующим образом:
-
фаблеты ( 481up )
_phablets.scss
-
планшеты и маленькие ноутбуки ( 768up )
_tablets.scss
-
рабочие столы ( 1030up )
_desktop.scss
-
рабочие столы с большими экранами ( 1204up )
_desktop-large.scss
-
сетчатка отображает исключения ( @ 2x )
_retina.scss
Эти файлы будут обрабатывать исключения макета и вызываются медиазапросами.
Обратите внимание: эти файлы являются общими для всех представлений (HTML-страниц). Вот почему вам нужно создать новую папку в scss\layouts
чтобы придать конкретный стиль конкретной странице.
ПРИМЕР — если вы хотите оформить адаптивную домашнюю страницу и отзывчивую страницу входа пользователя
-
Создайте в
scss\layouts
новую папку с именем с тем же именем, которое вы хотите сделать адаптивным (например, home и userLogin), так:scss\layouts\home
иscss\layouts\userLogin
-
Поместите в эти папки те же файлы, что перечислены выше:
_all.scss
,_phablets.scss
,_tablets.scss
,_desktops.scss
,_desktop-large.scss
и_retina.scss
.
Конечный результат
Конечный результат — генератор Yeoman для создания адаптивного многостраничного веб-приложения или веб-сайта. Я также решил включить некоторые задачи Grunt для минимизации, запутывания и компиляции Sass . Вы можете посмотреть его здесь https://github.com/mcarella/wormhole или загрузить его непосредственно с сайта NPM: https://www.npmjs.org/package/generator-wormhole .
Куда пойти отсюда
Я знаю, что это не универсальное решение, может быть, в вашем случае это выглядит так, как будто оно включает некоторую избыточность, и я знаю, что оно не может подходить для всех ситуаций, но я думаю, что это хорошая отправная точка. Вы можете добавить столько заданий, сколько хотите, или по-своему организовать scss, делая его легче или толще. Независимо от того, к чему вы стремитесь, я обычно советую людям разрабатывать свою собственную архитектуру или структуру, адаптированную к их потребностям, уделяя особое внимание производительности и удобству обслуживания, не пренебрегая пользовательским опытом.