на счетчтки влияют действия пользователя а не логика построения страницы.
Есть счетчики, регистрирующие действия пользователя (клики, наведения и тд), есть счетчики, регистрирующие показы (товар показан в блоке рекомендуемых, товар показан в листинге, услуга предложена с товаром таким-то и тд), на них действия пользователя не влияют
бизнес-логика редназначена для работы с бизнес-данными. Потому и должна быть в модели
Ну это же обман самого себя Я последние года 4 работаю исключительно с e-commerce, поэтому и говорю, восновном, на их примерах, так вот тут невозможно бизнес-логику вшить исключительно в модели. Куча логики наворочена в расчетах доставок, наличий, цен, куча логики зашита в маршрутах синхронизаций данных, куча логики зашита в обработке ошибок, ретраях, вся логика сильно вариативна - невозможно это все поместить на уровень моделей
Цитата:
это логика построени страницы а не бизнес-логика.
Логика постраения страницы влияет на счетчики, генерирует события, которые потом влияют на рейтинги, статистики и систему вцелом, не могу сказать, что тут исключительно логика отображения. Да и те системы, про которые я говорил, скорее hmvc, чем mvc, так что этот спорный момент, действительно, можно опустить
alexxorlovv, если честно, я не смог сделать выводы из того, что ты написал ... выделить суть послания. "Model отвечает за бизнес логику. View за представление. Controller Контролирует." Бизнес-логика не может быть зашита только в модели, по крайней мере я такого ни разу не видел. Логика валидации не в модели, логика логирования, распределения прав доступа и тд - это тоже бизнес-логика, но она не в моделях. Касательно контроллера все еще менее понятно, что он контролирует? Да и с вьюхами все не так гладко, современные фреймворки и cms-системы дают возможность подгрузки вложенных шабллонов, использования хэлперов и отложенной простановки переменных, что, по факту, является переносом части логики в эти самые вьюхи
Не знаю, по мне, так MVC - это более-менее разгребание кода по разным логическим кучкам, не всегда он разгребается логично понятно и однозначно. КОнтроллер - такой же класс как и плагин, вьюха плагина такой же файл как и вьюха контроллера, да и модель неоднородна, а состоит из слоя dao и репозиториев для работы с ними. Не замарачивайте вы этим голову, есть черные ящики, которые тупо друг с другом общаются посредством интерфейсов
У меня в системе есть разные сущности (например, категория и товар) и у меня есть необходимость отправлять их в другую систему. Сам метод отправки можно реализовать хоть на статических методах, хоть на функциях, хоть с объектами, хоть без - это, действительно не сильно важно. А вот для сущностей удобны объекты:
1 мы Создаем либо базовый абстрактный класс, либо интерфейс entity, в котором говорим, что обязательно у сущности должен быть метод toExport() или ExportTo($param) - зависит от нюансов, но роли не играет
2 Все наши сущности мы наследуем от этого абстрактного класса, либо имплементим интерфейс - другими словами говорим о том, что метод, как и обещано, мы реализовали. Таким образом у нас есть 2 класса: category, product которые точно реализовали метод toExport()
3 Реализуем экспортер во внешнюю систему (или несколько, если экспортеров несколько), у которого всего 1 функция export(entity $entityToExport)
Все, у вас есть несколько классов каждый делает свою маленькую часть работы. Как это выглядит в коде:
Расхождение заключается в том, что мы перекладываем логику контроллера на очень узкопрофильный виджет и делаем контроллер просто юзабилити данных виджетов и моделей
А в чем тут расхождение? Раньше у тебя было 3 коробки (модель, контроллер, вьюха), которые по строго заданным интерфейсам взаимодействовали. Введя виджет, ты добавил черных коробок и интерфейсов их взаимодействия, не более (Добавление)
Цитата:
а почему по дальше от MVC
Ну хотя бы потому что иногда требуется писать быстрый код
Цитата:
Макконоло предлагает делать узко направленные черные коробки с функционалом для одного объекта виджеты же делят этот функционал на очень узкие части заставляя так называемаю коробку зависеть и переносить логику в нее.
Если переносить аналогию в реальный мир, вы предлагаете писать класс "машина", у которой будет интерфейс "вперед, назад, поворот, тормоз, заправить" и тд Виджеты - это уровень запчастей "тормоза, рулевая, подвеска" Если смотреть еще ниже - вы увидите классы фреймворков для работы с сессиями, кэшами, базами и тд - это уже уровень "гидравлический цилиндр передних дисковых тормозов" ... если заглянуть в конкретные адаптеры фреймворков - вы увидите винты, болты и гайки ... речь лишь о разном уровне детализации
по поводу 1)
DelphinPRO сказал правильно, нужно лишь не забыть продумать, что будет, если у человека есть товар и в куках и в сессии ( набирал товар неавторизованным, потом авторизовался и оказалось, что у него были товары и в бд). Будешь их сливать или нет, если да - будешь ли сообщать пользователя об этом или нет, если будешь - как?
Пока самый лучший вариант из тех, что я знаю:
Разделить корзину на 2 части - первая часть - корзина при брождении по сайту. Эта корзина для авторизованных лежит в бд, для невторизованных лежит в куках. При авторизации идет их слияние, информировать или нет - не важно. В момент, когда человек переходит к оформлению заказа - создается "корзина оформления", которая остается неизменной до момента ухода со страницы оформления заказа (либо пеедумал, либо оформил). Это дает гарантию, что открыв в другом окне браузера сайт повторно и бросая там товар, открытое в первом окне оформление завершится ровно так, как показано на экране + в случае авторизации в момент оформления заказа, оформится то, что хотел человек.
В магазине машин я бы хотел увидеть уже заложеную базу марок, моделй машин, типов (с иконками) и тд. Интерфейсно отличается сильно, процесс оформления предзаказа иной, корзина не нужна. Куча допилок, в общем, потребуется, если брать обычный интернет-магазин
я не могу найти нормальный магазин подержанных авто, а тут магазин-посредник из коробки ищут Кстати, если кто знает нормальные скрипты по продаже автомобилей - киньте в личку ссылок
armancho7777777, да на работе запарки, никак толковых программистов найти не могу в проект, на курсы по машинному обучению записался на курсере (всем рекомендую https://class[dot]coursera[dot]org/ml-004/class/index ), довольно интересно, но времени много кушает. Да и вопросов интересных нет, на которые времени не жалко.