|
18 / 15 / 3
Регистрация: 04.05.2017
Сообщений: 136
|
|
Правильное оформление MVC14.11.2024, 01:15. Показов 952. Ответов 16
Добрый вечер, вопрос по оптимальной структуре проекта, в формате MVC с использованием API.
У нас есть постоянно поступающие данные по API на основе которых строится БД. Есть три типа данных: Пользователь зарегистрировался, пользователь пополнил счет, пользователь совершил покупку и средства списаны Причем фиксация пользователя происходит во время регистрации, ему создается id, а дальнейшие действия API передает через его id, что в принципе стандартно. Интерфейс администратора же предполагает регулирование курса валют, возможность ручных воздействий на баланс и прочее(это controller) Стоит вопрос построения структуры. Какая будет более правильной, в связи с учетом данных поступающих по API: 1. Controller - БД - Model - View 2. Controller - Model - БД - Model - View То есть по сути вопрос проверки и обработки данных поступающих по API, куда его лучше направить на Model или Controller, как Вы делаете это обычно, интересно услышать мнение Добавлено через 13 минут Я сам считаю, что и так и так правильно, но по моему я ошибаюсь и есть оптимальный вариант решения. Поэтому собственно и создал тему, чтобы разобраться Добавлено через 3 минуты То есть мы принимаем данные на контроллер, проводим там все проверки и даем ответ если ошибки, если все ок, грузим сами в БД, либо это массивом отдаем в модель и просто ждем ответа Добавлено через 3 минуты Есть еще третий вариант более сложный, грузит в БД Controller, но проверки проводит Model, в итоге получится Controller - Model - Controller - БД - Model - View
0
|
|
| 14.11.2024, 01:15 | |
|
Ответы с готовыми решениями:
16
MVC - правильное использование наследования Правильное построение паттерна "MVC" Правильное оформление CRUD операций |
|
Модератор
|
|||||||
| 14.11.2024, 05:19 | |||||||
Сообщение было отмечено Кверт как решение
Решение
1
|
|||||||
|
18 / 15 / 3
Регистрация: 04.05.2017
Сообщений: 136
|
|
| 14.11.2024, 05:43 [ТС] | |
|
То есть и загрузка в БД тогда тоже будет производится в модели, верно? При верной проверке?
Получается контроллер просто массив данных ей отдает, и больше ни за что не отвечает? Добавлено через 3 минуты В целом я повторил ответ, просто чтоб убедиться, спасибо большое А хотя нет, получается все же в БД пишет контроллер, что то я не так понял, то есть проверка у модели а пишет контроллер, понял Добавлено через 6 минут Controller - Model - Controller - БД - Model - View получается, я этот вариант как раз и предполагал как самый не оптимальный, но понял сейчас, что он по идее лучше всего и будет работать Добавлено через 1 минуту То есть чем меньше модель мы используем в простых так скажем процессах, типа загрузки данных то лучше, в целом логика понятна
0
|
|
|
Модератор
|
|||||||
| 14.11.2024, 05:53 | |||||||
|
Кверт, правилом хорошего тона является делать тонкие контроллеры. В них не должно быть бизнес-логики какой-то заложено. Только прием данных, передача этих данных в модель, которая уже работает с бизнес-логикой.
Контроллер же отвечает за навигацию в основном. Модель эти данные проверяет и она же в БД пишет. Скажем, метод save() будет, который заносит инф-ию в БД.
0
|
|||||||
|
18 / 15 / 3
Регистрация: 04.05.2017
Сообщений: 136
|
||||||
| 14.11.2024, 05:58 [ТС] | ||||||
0
|
||||||
|
18 / 15 / 3
Регистрация: 04.05.2017
Сообщений: 136
|
|
| 14.11.2024, 06:01 [ТС] | |
|
или под этим комментарием понимается $model->save то есть внутри контролера метод модели вызываем
1
|
|
|
18 / 15 / 3
Регистрация: 04.05.2017
Сообщений: 136
|
|
| 14.11.2024, 06:30 [ТС] | |
|
все понял, спасибо большое, я как раз и предполагал тонкую структуру контроллера, а перенос в модель понял как нагрузку на процессы чтоб снизить, поэтому и сомневался как лучше
Добавлено через 25 минут long399, я Вам личное сообщение отправил еще, не пойму отправилось нет что то лагает, если нет, напишите, мне пожалуйста
0
|
|
| 14.11.2024, 12:02 | ||||||||
0
|
||||||||
|
2600 / 1504 / 689
Регистрация: 23.08.2015
Сообщений: 3,804
|
||||||||||||||||||||||
| 14.11.2024, 17:56 | ||||||||||||||||||||||
|
Для более сложных вещей выделяют операционный слой. Операция либо выполняется полностью, либо кидает исключение. Тогда и валидацию нужно делать не через модель, а отдельный класс. Это может выглядеть так
0
|
||||||||||||||||||||||
|
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,904
|
|||||||||||||
| 14.11.2024, 17:58 | |||||||||||||
На всякий напомню, что Model в MVC - это не модель Active Record, а слой бизнес-логики. Экшены/сервисы относятся к Model. Кстати, в Laravel для валидации используются FormRequest - отдельные классы для валидации прилетевших данных. Можно сделать аналогично:
0
|
|||||||||||||
|
2600 / 1504 / 689
Регистрация: 23.08.2015
Сообщений: 3,804
|
||
| 14.11.2024, 18:12 | ||
|
0
|
||
|
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,904
|
|||
| 14.11.2024, 18:23 | |||
|
В идеале хотелось бы иметь 2 этапа валидации, на входе в контроллер и в экшен, но на практике (или на проектах, где я работал) на это обычно забивают и оставляют только FormRequest.
0
|
|||
|
2600 / 1504 / 689
Регистрация: 23.08.2015
Сообщений: 3,804
|
||||
| 14.11.2024, 18:37 | ||||
|
Вообще есть столько разночтений, что я предпочитаю не пользоваться этой аббревиатурой) Добавлено через 1 минуту
0
|
||||
|
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,904
|
|||
| 14.11.2024, 19:19 | |||
|
Смысл MVC в том, что каждый слой можно заменить на другую реализацию (php контроллер на консольную команду, html шаблон на xml шаблон), а бизнес-логика может тестироваться изолированно от всего остального. Когда у тебя есть только файлик calculator.php, который и конфиги с композерами подключает, и калькуляции выполняет, и выводит html, трудно протестировать функционал калькулятора в отрыве от всего остального. Добавлено через 57 секунд
1
|
|||
|
2600 / 1504 / 689
Регистрация: 23.08.2015
Сообщений: 3,804
|
|
| 14.11.2024, 20:05 | |
|
Jodah, Разные фреймворки устроены по разному. Такой способ автоматической валидации через Reuest я видел только в Laravel. Это больше похоже на сахар. И у него так же есть замудренная система передачи заполненных данных и ошибок формы через сессию, чтоб разделить форму и саму операцию на 2 разных экшена.
Мы можем что-то написать в самом контроллере, но и в тоже время некоторые вещи могут быть вынесены, или частично реализованы в посредниках или на других уровнях (модуля или всего приложения). Возникает вопрос, а каковы обязанности контроллера? Где он заканчивается как слой? Относится ли к нему к примеру маршрутизация или проверка прав доступа?
0
|
|
| 14.11.2024, 20:05 | |
|
Помогаю со студенческими работами здесь
17
Правильное оформление Правильное оформление друж-х ф-й Правильное оформление конфига Правильное оформление кода
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|