Статьи

Хорошая интерфейсная архитектура

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

Когда я начал думать о проблеме, я понял, что мне нужно несколько вещей:

  1. Я хотел многостраничный проект (веб-приложение или веб-сайт).
  2. Я хотел, чтобы мой проект поддерживал экран разных размеров и разрешений, другими словами: я хотел, чтобы он был отзывчивым.
  3. Я хотел, чтобы конечный продукт был ремонтопригодным.
  4. Я хотел, чтобы конечный продукт был производительным.
  5. Я хотел повторно использовать этот шаблон для любого будущего проекта.

Правильные инструменты

В настоящее время у нас есть много интересных инструментов, которые могут помочь нам в современном рабочем процессе разработки интерфейса. Итак, в отношении точек 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 чтобы придать конкретный стиль конкретной странице.

ПРИМЕР — если вы хотите оформить адаптивную домашнюю страницу и отзывчивую страницу входа пользователя

  1. Создайте в scss\layouts новую папку с именем с тем же именем, которое вы хотите сделать адаптивным (например, home и userLogin), так: scss\layouts\home и scss\layouts\userLogin

  2. Поместите в эти папки те же файлы, что перечислены выше: _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, делая его легче или толще. Независимо от того, к чему вы стремитесь, я обычно советую людям разрабатывать свою собственную архитектуру или структуру, адаптированную к их потребностям, уделяя особое внимание производительности и удобству обслуживания, не пренебрегая пользовательским опытом.