Стоит ли вьюхи отучать от методов объектов в пользу ассоц. массивов?
Разделяй и властвую приучают нас паттерны MVC и т.д. Просмотрел несколько фреймворков и везде используются объекты во вьюхах. В целом вроде ничего страшного, но вот когда приходит время оптимизации, то многие фреймворки рекомендуют отказаться от объектов в пользу обычных запросов и ассоц массивов. Но тогда ломается логика "Разделяй и властвую", как только начинаешь заниматься оптимизацией, то приходится переписывать и вьюхи! Так я и подумал, может стоит сразу приучать вьюхи использовать только ассоц. массивы? Благо с объектами тоже можно работать как с ассоц массивами. Тогда при оптимизации будет достаточно подготовить ассоц массивы данных, вместо объектов и все.
Или я неправильно понял и можно легче оптимизировать такие вещи?
// upd
Просто мне кажется, что вьюха должна быть максимально "тупой", ей не стоит знать что эта переменная объект, а эта ассоц массив. Ей просто надо показывать переменные, проходить циклом по массивам. А так вьюха навязывает логику контроллерам и моделям, что та или другая переменная должна быть именно объектом.
а для динозавров можно ссылки на: 1) "Разделяй и властвую приучают нас паттерны MVC", 2) "когда приходит время оптимизации, то многие фреймворки рекомендуют отказаться от объектов в пользу обычных запросов и ассоц массивов", 3) "// upd". хотелось бы ссылку на источник и ссылку на словарь, объясняющий значение термина.
Если "вьюха" обозначает Представление (View), то на мой взгляд чем больше возможностей у процессора, который обрабатывает View тем лучше, т.е. плохо было бы если процессор не понимал ничего кроме массивов или переменных. другое дело, что делает этот процессор с данными, и что делаете вы с данными. допустим у вас задача: "запрос на миллион строк поиск и подсветка ключевых фраз и вывод результата постранично", с общей суммарной статистикой по найденным ключевым фразам. Оптимальным было бы не фетчить (fetch) все строки из базы данных. Как будет работать с данными ваш контроллер? Как будет работать процессор. Сможете ли вы сделать так чтобы фетч был только той страницы, которую запросил пользователь? Если View и объекты позволяют сделать такой фокус, тогда не понимаю вопроса...
1. Вьюха не делает запросы в БД, не говорит моделям что хочет показать. Контроллеры не показывают данные, не делают запросы. Модели не смотрят на $_GET, $_POST чтоб отдать данные и тем более что-то показать (echo/print)
2. Как минимум тут https://github.com/yiisoft/yii2/blob/master/docs/g...
3. Когда нам надо сделать какие-то манипуляции с данными перед тем как работать с ними мы обычно переназначаем/создаем метод и закладываем логику туда - нормально! Но и этот самый объект мы может научить, что при работе с $object['methodName'] будет запускаться метод объекта. А когда модель/контроллер заменяет объект на массив, то сразу записываем результат в $array['methodName'] и вьюха покажет ее. Я же не говорю что мы полностью отказываемся от объектов, просто вьюха не будет знать что это объект
Так то я ни к чему не призываю =) лишь хотел услышать доводы против такой работы вьюхи.
Arik: представьте на секунду что у двух человек на экране показывается одно и тоже и ещё у каждого есть свой персонаж. То есть это игра. И вот чтобы все это синхронизировать вся логика пишется на сервере. А теперь ответьте, кто на сервере будет отвечать за логику отображения? И разве очень сложные математические расчеты отображения, это анимичное представление? Нет.
Но теперь подумайте чем отличается сервер приложения и сервер игры? Знаете чем? Тем что сайтоделы ещё не дошли до уровня геймдевов.
copal: неуверен к чему вы ведете, но я все еще ощущаю себя программистом =) И пока намерен дальше повышать свои знания в этом направлении, я ведь не пишу, что весь мир неправильно делает. Я лишь уточнил почему так не делают и стоит ли идти по этому пути. Всегда будут кто умнее нас, всегда будут кого мы умнее в той или иной сфере. Или вы за то, что любой "геймдев" на голову выше всех "сайтоделов"?
Arik: во первых я ответил на Ваш вопрос. во вторых я не говорю что программисты делающие игры и сайты чем-то хуже или лучше. Я говорю что нагрузки для игро-серверов стали намного раньше запредельными, чем для сайтов. Еще пять лет назад сайты были убогие и максимум что нагружало сервер это запросы к db. Но online игры пять лет назад строили все по тому же максимально нагруженному принципу что и сейчас, иначе в них бы не играли. И вот вышло так, что эволюция в геймдеве на много прогрессивней чем в вэбе.
И навязывать Вам ту или иную сторону я даже не собираюсь, иначе это бы привело к сотне вопросов с Вашей стороны, а у меня нет особо времени чтобы заниматься обучением.