Смотря что за сайт вы хотите сделать.
Если вам нужен статичный сайт без работы с данными(регистрация пользователя, профиль, новости, блог, товары, статьи и т.п.) просто такой - информационный сайт(визитка) вам нужны:
* html(вёрстка)
* css(стилизация)
* js(динамика на страничке: анимации, всплывашки и т.п.)
Если вы на сайте хотите работать с данными(регистрация пользователя, профиль, новости, блог, товары, статьи и т.п.), то тут нужен backend который занимается: созданием/чтением/редактированием/удалением данных. Фреймворки содержат кучу готового кода, позволяющего не создавать
велосипед. Если вам необходимо написать backend без фреймворков
(у меня такие позывы бывают) то вам необходимо описать в txt или другом документе логику работы приложения затем реализовать её. Логика может быть разной в зависимости от предпочтений и любимых
паттернов проектирования. Но в целом довольно удобный подход даёт
mvc. Абстрактно логика примерно такая:
- Создаём переменную `routing` которая хранит в себе: url запроса(как ключ) и ciontroller и action как значение пример:
routing = {
"" : "main/welcome",
"login" : "main/login",
"profile" : "user/profile"
}
Создаём контроллеры
Для каждого контекста на сайте делается свой контроллер. На примере 2 контекста : "главная" и "пользователь", значит создаётся 2 контроллера:
//MainController Файл #1
class MainController
function actionWelcome()
return App.render('welcome')
function actionLogin()
return App.render('welcome')
function actionError404()
return App.render('error')
//UserController Файл #2
class UserController
function actionProfile()
return App.render('profile')
У каждого контроллера свой action
Размещаем эти файлы к примеру относительно корня сайта в директории: `/controllers/`
Создаём шаблоны страниц
Размещаем эти файлы к примеру относительно корня сайта в директории: `/views/{название контроллера}/назвавние action`
по примеру получается
#/views/main/welcome
#/views/main/login
#/views/main/error
#/views/user/profile
- Создаём приложение которое обрабатывает url, подключает нужный controller и запускает нужный action
class App
public routing
public controller = main // контроллер используемый по умолчанию
public action = error404 // экшен вызываемый по умолчанию
function render(template, params)
function run()
function run() логика образно следующая:
новая переменная url = текущий url страницы
в цикле перебираем все элементы переменной routing
если переменная url равна ключу итерации: тогда переназначаются переменные App.controller и App.action :
новая переменная params равна результату выполнения метода: разбить строку по символу "/", строка которую разбиваем это значение из текущей итерации у которой url равна ключу текущей итерации. после того как разбили строку
App.controller = первый элемент в params
App.action = второй элемент в params
новая переменная controller = App.controller + слово Controller
новая переменная action = слово action + App.action(с заглавной буквы)
далее, зная что контроллеры находятся в папке `/controllers/` подключаем контроллер, расположенный в: `/controllers/` + controller.
Далее у подключенного контроллера вызываем функцию/метод action и выводим на экран результат работы функции/метода.
function render(template_name, params) принимает имя шаблона и параметры(список/массив) для вставки в шаблон.
зная App.controller и место где хранятся шаблоны получаем путь к шаблону:
новая переменная template = `/views/` + App.controller + / + template_name
новая переменная content = контенту файла по пути template
в цикле перебираем все элементы переменной params
заменяя в content ключ на значение из текущей итерации по переменной params
возвращаем content
Теперь создаётся так называемая единая точка входа, куда попадают все запросы на сайт, в которой подключается class App и вызывается его метод run()
Готово.
P.S. конечно логику можно улучшать фичами до бесконечности, но я не ставил цель описать в ТЗ работу полнофункционального фреймворка или точное код движка, моя цель: описать принцип работы, который даст немного понимания, как сделать сайт на паттерне mvc без использования фреймворка.
я старался писать абстрактно, не привязываясь к конкретному языку, эта "схема" должна подойти практически для любого языка