Рейтинг и сила — как это должно работать

Выношу сюда стихийно возникшее обсуждение

И вот еще статьи по теме:
Механизм подсчета рейтинга и силы
Сила и рейтинг
Рейтинг юзеров и блогов

Опишу реализацию, к которой я склоняюсь:
1) Модуль рейтингования выделяется в отдельный плагин. Алгоритм подсчета — это отдельный разговор, он может быть какой угодно. Можно в стандартном комплекте движка два плагина поставлять — хабраподобный (потому что он уже есть), и простой (реализуется быстро и просто).
2) В конфиге плагина задавать: за что юзеры могут «лайкать», могут ли они «дизлайкать». Плюс могут задаваться какие-то доп.параметры (напр., «весовые коэффициенты и проч.)
3) Сами кнопки голосования за сущности — топики, юзеров, комменты и проч. — сделать в виде виджета. И вставлять этот виджет в шаблоне, где это нужно. Тогда внешний вид „голосовалки“ может легко изменяться в зависимости от конфигурации плагина, и сторонние плагины его тоже могут изменять. А если плагин рейтингования отключен, то эти кнопки вообще не будут выводиться.

Проксирование псевдовызовов

Вчера при обсуждении Alto Coding Style aVadim высказал мысль
Вообще, в далекой перспективе мне хотелось бы изменить синтаксис псевдовызовов методов моделей и писать так: $this->ModuleUser->getUsersByFilter(); Но это сугубо личные предпочтения

По причине выходного дня и наличия немногого свободного времени — предлагаю экспромт на эту тему. Опять же не стоит относиться к предложению как к готовому решению — это всего лишь способ — может и вообще ненужный и не к месту (

Хочу обращаться к модулям и их методам так:
$aReturn = $this->modules->topic->getTopicsByFilter($aFilter,$iPage,$iPerPage,array('user','blog'));

А не так:
$aReturn = $this->Topic_GetTopicsByFilter($aFilter,$iPage,$iPerPage,array('user','blog'));


Вообщем в голову пришла мысль не менять существующий уклад в LS, а просто добавить проксирующие свойства, которые просто передавали бы данные в псевдовызовы. Организовать альтернативную форму записи – и вот что из этого получилось.

Читать дальше →