3. План
1. Наши цели
2. Сложность построения больших WP-сайтов
3. Пишем на одном языке
4. Обработка исключений и оповещения об ошибках
5. Модули и архитектура
a. О качестве архитектуры
b. Модули
c. Организация хуков
d. HTML-верстка
e. Статические компоненты
4. Наши цели
Что мы хотим от проекта?
● Простота поддержки
○ Низкий порог вхождения
○ Низкая себестоимость изменений
○ Минимум ошибок
● Отсутствие проблем с быстродействием
5. Сложность построения больших WP-сайтов
Сложность поддержки
● Как найти / исправить ошибку?
● Где реализован этот блок?
● Кто так пишет? (стиль написания кода)
● Кто так пишет? (архитектура)
● Я не трогал этот модуль, откуда ошибка?
● Как я перенесу “часть изменений”?
6. Сложность построения больших WP-сайтов
Быстродействие Back-end
● Запросы в PHP циклах
● Повторяющиеся операции
● Структура БД
● Неоптимизированные запросы
7. Сложность построения больших WP-сайтов
Быстродействие Front-end
● Большое количество медиа-файлов
● Растущий с прогрессией CSS
● Проблемы с JavaScript возникают редко
8. Пишем на одном языке с другими WP-разработчиками
Стандарты кодирования
● PHP Coding Standards
● HTML Coding Standards
● CSS Coding Standards
● JavaScript Coding Standards
9. Пишем на одном языке с другими WP-разработчиками
Используем возможности WordPress
● “wp_remote_…” вместо cURL
● “wp_mail” вместо PHPMailer
● “dbDelta” вместо “SQL Create”
12. Построение архитектуры
О качестве архитектуры
Архитектура ПО - многоуровневая система абстракций.
Качество абстракции
● Зацепление
● Связность
● Полнота
● Достаточность
● Примитивность
Качество классов и объектов, Гради Буч
Зацепление - степень глубины связей между отдельными модулями (а также классами и объектами). Систему с сильной зависимостью между модулями гораздо сложнее воспринимать и модифицировать. Плохой пример: Модульная стерео-система, в которой источник питания размещен в одной из звуковых колонок.
Связность - степень взаимодействия между элементами модуля (класса или объекта). Наименее желательной является связанность по случайному принципу (Собака и Космический корабль), когда в одном классе или модуле собираются совершенно независимые абстракции. Наиболее желательной является функциональная связанность, при которой все элементы класса или модуля тесно взаимодействуют в достижении определенной цели.
Полнота - наличие в интерфейсной части класса всех характеристик абстракции. Полнотой характеризуется такой класс или модуль, интерфейс которого гарантирует все для взаимодействия с пользователями.
Достаточность - наличие в классе или модуле всего необходимого для реализации логичного и эффективного поведения. Компоненты должны быть полностью пригодны к использованию.
Примитивность - операции, которые требуют только доступа к внутренней реализации абстракции.