Архитектура web-приложений

Начну с разделения, которое не является частью архитектуры приложения,
но его часто реализуют в проектах.
публичная часть – представление информации и интерфейсов взаимодействия
с приложением (фильтрация данных, заявки).
Админка – часть приложения отвечающая за управление базой данных и настройку приложения.
Всё приложение строится из модулей, изолированных по коду и, возможно, разработчикам (js php)

архитектура web-приложения
    интерфейс
        разметка
        стили
        изображения
        скрипты
            ajax и обновление DOM
    
    база данных
        Системные таблицы
        Таблицы бизнес логики
    
    серверная часть (фреймворк)
        ядро приложения
        библиотеки
        шаблоны
        модули (бизнес логика)
            модели
            контроллеры
            представления

Что такое фреймворк?

Фреймоворк – это каркас приложения, помогающий отделить
техническую логику приложения от бизнес логики.
Скрывает от разработчика техническую логику.
Плата за такое удобство – инверсия потока управления приложением.

Чем фреймворк отличается от библиотеки, от модуля?
Запрос от пользователя – это запрос по конретному адресу к файлу.
Веб сервер просто отдаёт файлы (или пакеты данных),
а вот откуда он их берёт – это отдельная тема.
Файла может не существовать.
Файл может содержать конфедициальную информацию, которую мы не хотим отдавать.
фреймворк как каркас обеспечивает единую точку входа.

Инверсия потока управления главное отличие фреймворка от библиотеки.
То есть фреймворк реализует за нас логику приложения,
чтобы мы могли сосредоточиться на бизнес логике предметной области.
То есть, чтобы мы думали над тем, что мы делаем,
а не над тем, как нам это делать.

Шаблон работы веб приложений

Получение и обработка запроса от пользователя. Для единой обработки
всех запросов понадобится единая точка входа в приложение.
Реализуется через настройку web-сервера. Например, в htaccess:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^([0-9a-z\_\-\/]+)$ /index.php?request=$1 [L,QSA]
</IfModule>

Понимание того, как на этот запрос нужно отреагировать:
Запустить сессию, разобрать url запроса, проверить права доступа текущего
пользователя. Выбрать подходящий контроллер и экшен (метод контроллера).

Провалидировать входящие данные, применить к ним бизнес логику.
Работа с данными, их получение/изменение в базе данных.
Применить к полученным данным бизнес логику.

Рендер подходящего представления данных для пользователя
(заполнение HTML-шаблона данными из базы данных).
Отправка ответа пользователю (отправка сформированной
HTML-странички с текстом статьи или JSON-ответа).

MVC (model view controller)

MVC — это шаблон проектирования приложений,
которая не опирается на какой-то конкретный язык программирования,
не зависит от выполняемых задач и может существовать как на клиенте,
так и на сервере. Пришла из десктопных приложений.
Идея заключается в том, что работу с данными (model),
представление данных для пользователя (view)
и обработку внешних запросов (controller) разделить между собой.
При этом работающая с данными модель может быть либо пассивной,
то есть ее каждый раз нужно спрашивать, не изменились ли данные,
либо активной, в этом случае она сообщает всем зависящим от нее views,
что данные изменились и надо бы их перерисовать.

Такое разбиение позволяет, во-первых, обезопасить себя от неожиданных
изменений в поведении приложения в целом.
При изменении модели мы можем быть уверены, что вносимые изменения
отразятся только на данных и ни на чем больше.
Во-вторых, подход позволяет одним и тем же данным сопоставить
несколько представлений. И наоборот, сделать одно представление
(предположим, статистику по месяцам), которое работало бы
с разными типами исходных данных.
Забегая вперед, отметим, что достаточно часто в качестве view
фигурируют шаблоны, а в качестве model непосредственное отображение
объектов на СУБД, то есть ORM.
Концепция MVC оказалась достаточно удачной, вследствие чего она служит
основой для ряда framework, как серверных, так и клиентских.

CRUD (create read update delete)

crud реализует простейший административный механизм в виде таблицы управления данными.

HTML таблицу! которую мы уже умеем генерировать на лету
Допустим у нас есть разбиение по 20 записей на страницу
11 из 50 страниц, при выборке данных включаем в запросе offset 200 = 10 x 20
записей, вставляем полученные записи в таблицу:
в каждую строку попадает запись из бд, в ячейку попадает значение поля соответствующей записи,
вместо цифр как сейчас.
Последняя колонка – две кнопки update delete, id берём из data-аттрибута строки.
На кнопки уже умеем вешать обработчики.
Отдельная кнопка Create – отображает пустую строку с кнопкой сохранить.
При клике на “сохранить” данные уходят на сервер и записываются в БД.


Практика

Добавляем модуль system с сетевого диска, смотрим как он работает.

Доделываем задачи. Сохраняем решение на сетевой диск.

Сверка знаний по js – разбиение по классам знаний.

Оформляем код в виде двух модулей, передаём соседям:
Запись на лево, чтение на право.
Соединить два полученных модуля – так чтобы всё работало.

Установка laravel

Как установить описано тут:
https://q-pax.ru/blog/erid/it/back/laravel/laravel-8-1/

Для установки понадобятся
xampp
composer
laravel install

.Разобрать структуру фреймворка

Лабораторная

Процесс и условия сдачи лабораторной.

Задача:
Сделать рабочую версию админ панели.
С сохранением и загрузкой данных (через файл/ локальное хранилище js/ Сервер и БД).
Реализовать для трёх сущностей:
пользователь + группы + права доступа, и две сущности на своё усмотрение.
(статьи, комментарии, категории, товары, заказы, доски партий, работы)

Обсуждение разработки лёгкого фреймворка.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *