Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
редактировать текст страницы в маркдауне
новый lumen от Laravel — тоже велосипед
Но никак не готовая CMS
систему для администрирования блога или новостной ленты.
становится ясно чего хочет заказчик
для своей CMS
я ничего не пытаюсь вам навязать, продать или прорекламировать
В данной ситуации, моя задача узнать какой максимально понятный програмный интерфейс для масштабируемости выбрать для своей CMS.
Нельзя так просто взять и разделить все на Model-View-Controller
Почему никто не пользуется CMS при разработке высоконагруженных проектов? Все дело в том, что каждая из них спроектирована таким образом, чтобы всячески мешать разрабатывать какой-либо неспецифический функционал, не говоря о некоторых отдельных ситуациях.
Если хорошенько подумать, то это — тот же самый MVC, только здесь роль модели выполняет наш Service, который, как мы видим, значительно отличается от устоявшихся стереотипичных ОРМ моделей.
По-хорошему, модель в MVC не должна быть моделью из ORM.
А её персистентность и прочий ACID должны обеспечиваться контроллером.
А еще модель может дернуть контроллер — у меня сменились данные — а ну-ка обнови представление актуальными данными…
А еще модель может дернуть контроллер — у меня сменились данные (каким то стороним воздействием — что то отредактировали напрямую) — а ну-ка обнови представление актуальными данными…
вы в контроллере собираете все необходимые данные по всем нужным сервисам и только потом отдаёте в новосозданную вьюху.
Вот это как раз прекрасно совпадает с описанием MVC Model 2.
А в MVP презентер (обычно) напрямую контролирует представление (например, как в WebForms).
вот MVC2 подразумевает, что она живёт отдельно от контроллера.
The servlet generates the dynamic content — in this example, the servlet uses JDBC to communicate with a database to obtain the content. The servlet then wraps the dynamic content into a bean. The JavaServer Pages file accesses the dynamic content from the bean
Что вы понимаете под «напрямую»? (Никогда просто не сталкивался с WebForms)
Ээээ, где это Model 2 подразумевает, что модель живет отдельно от контроллера?
Веб-формы здесь ни при чем, это в любом MVP так. Под «напрямую» я понимаю то, что не значение выставляется в модели, а потом представление интерпретирует это значение, а презентер напрямую говорит представлению «сделай поле красным».
Давно можно считать, что View в вебе, это не шаблон на сервере, не ответ сервера клиенту, а вся веб-инфраструктура от веб-сервера до браузера пользователя, а HTTP с HTML лишь транспорт для взаимодействия View с остальнім приложением.
А если убрать клиент извиду то все становится чуть проще, нет?
А что там на клиенте — плевать.
но вот честно, как по мне воспринимать все это добро как единое целое не правильно.
А как в традиционных толстых клиентах или вообще стэнд-элон определяют?
Мой посыл в том, что уже давно на уровне архитектуры можно считать браузер с исполняемым им кодом не тупым клиентом, по сути графическим терминалом, а полноценным узлом распределенного (по звезде) гетерогенного (если не ноду на сервере юзать) приложения.
на уровне архитектуры нам без разницы (ну, почти) работает вью на сервере или на другом конце мира.
По паттерну.
Первое правило распределенных приложений: не пишите распределенных приложений. Позиция «нам на уровне архитектуры все равно, где работает (что угодно)» давно показала себя ошибочной
И вы почему-то постоянно забываете, что есть пассивные клиенты, у которых нет ни поллинга, ни пуша, ни флеша — ничего, просто HTML и немножко JS для местной интерактивности. Они никак не ложатся в ту парадигму классического MVC, которую вы предлагаете использовать.
Не надо путать ситуацию «у меня SPA/активный клиент, я с сервера таскаю только данные» и «у меня (полу)пассивный клиент, я с сервера таскаю HTML». У них просто разные шаблоны решения.
Что мешает также определять в моем случае?
Тем не менее, если мы готовы платить, то концепция имеет право на жизнь.
У каких клиентов с местным JS нет возможности периодически опрашивать сервер «а не ли у модели уведомлений для меня» — классический поллинг?
А ситуацию «у меня активный клиент, который с сервера таскает фрагменты хтмл» куда отнести?
Но вообще, да, на вырожденный случай (полу)пассивного клиента классический MVC ложится плохо.
MVC Не оговаривает механизма сообщений
Сервер тупо хранилище — только если на нем нет бизнес-логики
У меня одна модель используется и в пользовательских веб-мордах, и для предоставления веб-сервисов разнообразным не браузерным клиентам, и даже вообще не для HTTP-клиентов, а, например, для SMTP-клиентов.
Что до Model 2, то я плохо знаком с ней — это же что-то из мира Java?
По сути, да, одна.
Вот серьезно, не встречал (или как-то не обращал внимания) термина «MVC Model 2»
И откуда вы берете такие полезные для представления вещи как «пункты в выпадающем списке», которым нет места в сервисном обмене?
Потому что он в норме не используется, все просто пишут MVC, не задумываясь о том, что значение термина изменилось.
andrzejonsoftware.blogspot.ru/2011/09/rails-is-not-mvc.html
Механизмы разные, но источник данных пунктов один — модель.
Значит большинство материалов я интерпретировал неверно.
Для себя решил так — представление не обязано реагировать на изменения модели.
А её персистентность и прочий ACID должны обеспечиваться контроллером.
По-хорошему, модель в MVC не должна быть моделью из ORM.
по хорошему, если исходить из идеи MVC другой модели и не бывает, потому как модель — это модель бизнес-данных, включающая, к слову, и бизнес-логику.
И контроллер кстати должен быть один.
класический MVC как он был придуман — задолго до веба.
В пятой визуал студио даже шаблон проекта был такой. Меню — контроллер, модель — документ. А в окне где рендерится документ — соответственно представление. Word — как пример.
В пятой визуал студио даже шаблон проекта был такой
В пятой визуал студио даже шаблон проекта был такой.
по хорошему, если исходить из идеи MVC другой модели и не бывает, потому как модель — это модель бизнес-данных
Стопицот файлов в папке model это не модели, если по уму, а DTO
И контроллер кстати должен быть один.
Доступ к базе данных будет иметь только Service / Сервис
Ту, которая позволяет разделить представление и данные так, чтобы они друг с другом не взаимодействовали на прямую.
Множество раз я пытался писать, следуя патерну, но результат всегда доводил меня до безумия.
там где нет людей там как минимум нет представления.
Странно для вещи претендующей на названия паттерна — ведь смысл паттернов именно четкое описание архитектуры
Странно для вещи претендующей на названия паттерна — ведь смысл паттернов именно четкое описание архитектуры.
И не только — обратите внимание на форумы сколько там дискусий — что должно относится к модели, кто должен передавать данные представлению контроллер или контроллер высчивает представление а представление само вычитывает модель.
Она уведомляет контроллеры о пользовательских событиях типа кликов,
она может изменять своё состояние на основе уведомлений от модели (различные реализации server push).
Не обязательно. В значимой части случаев она просто отдает управление контроллеру, прекращая свое существование полностью.
с таким же успехом представлением можно назвать пакет байтов, возвращаемых драйвером сервера БД.
Если человек нажал кнопку то должно отработать событие связанное с кнопкой а не абстрактный экшен.
экшен вообще ни с чем не связанный, он сам по себе.
Обработчик события — он тоже ни с чем не связан, его на что угодно можно повесить.
Обработчик события — всегда обработчик КОНКРЕТНОГО события — например нажатия на эту кнопку. Даже если вы его поцепили еще и на линк.
он абстрактный по назначению. Не проектируется екшен для связи с кнопкой.
У вас еще нет дизайна и вы не знаете какая там кнопка — но у вас уже может быть екшен — для выполнения какой то операции.
Собственно — это пример компонентного подхода, гораздо более естественного для веба (для разработчиков веба) чем MVC.
Доступ к базе данных будет иметь только Service / Сервис
Сервис может содержать классы, трейты, Конфигурационные и кеш-файлы, базовые шаблоны
Доступ к сервису будет осуществляться с помощью единого метода объекта из области контроллера
Сервис обязательно имеет собственное пространство имен
тот же самый MVC
фасадный класс сервиса User
При этом я часто вижу как люди называют штуки ProductRepository вместо Catalog и т.д.
даже предсказать сигнатуры методов.
Пишу CMS на PHP. Часть 1