- PVSM.RU - https://www.pvsm.ru -
Добрый день, читатели!
В процессе реализации одного моего проекта (с блекджеком и всеми остальными social прелестями), пришлось реализовывать функциональность голосования (like, like/dislike, rating, etc) пользователей за некоторые сущности предметной области проекта.
Disclaimer: к моему величайшему сожалению далее будут лишь рассуждения о функциях некоторого абстрактного внешнего сервиса голосовалок и ни строки кода или полезных ссылок, но мне нужно получить обратную связь знающих людей.
Поискав в Google готовые решения, не удалось найти ничего подходящего. В основном решения (плагины для различных web-фреймворков) сводятся к добавлению дополнительных полей в существующие таблицы (или объекты коллекций в случае MongoDB), в которые пишется количество лайков/дислайков, а также кто из пользователей уже проголосовал. Такие решения имеют значительные недостатки, так как с одной стороны не обладают достаточной гибкостью, позволяющей легко модифицировать алгоритмы голосования (что очень важно для нового проекта в процессе поиска правильной модели), а с другой стороны требуют модификации существующего кода и, что еще хуже, уровня хранения данных, для добавления функциональности голосования.
В то же время, существует значительное число сервисов, предоставляющих возможности по добавлению комментариев на свой сайт, как то cackle.me [1], disqus.com [2] и пр. Сервисы являются внешними по отношению к разрабатываемому проекту и позволяют минимальными усилиями добавить возможность комментировать что угодно на своем сайте (или в приложении).
Возник логичный вопрос, почему не существует аналогичных сервисов по добавлению голосовалок на свой сайт?
Таким образом, основную логику обработки лайков или рейтингования берет на себя внешний сервис. Например, он должен проверять, не является ли лайк пользователя за заданный объект повторным и не давать выполнить такое голосование. При этом бизнес логика кто и за что может голосовать может быть реализована уже на стороне собственного проекта.
Из дополнительных возможностей хотелось бы видеть:
Думаю, должно быть 2 способа — со стороны бекенда и со стороны фронтенда (веб-клиента или мобильного клиента). Так как можно вообще не хранить на своей стороне информацию о голосах, можно делать запросы на создание лайков или получение количества лайков за объекты прямо с клиента (идентифицируя себя каким-либо токеном). Таким образом страничка будет собираться из нескольких источников. Также можно собирать информацию о голосах на бекенде и инжектить ее в результирующие данные перед отправкой их на клиент, делая запросы к внешнему API. Возможно даже асинхронные, чтобы во время ожидания ответа можно было выполнить прочую обработку данных.
Должны существовать плагины для популярных языков (Ruby, PHP, JS) позволяющие за счет миксинов или же просто добавления новых модулей в проект легко добавлять возможность лайкать/дислайкать или оценить объекты предметной области.
Вот как-то так должен выглядеть сервис голосовалок моей мечты. Хотелось бы получить ответы, может кто-нибудь посоветовать нечто похожее? Или возникала ли у вас необходимость в таком сервисе, был бы он вам полезен?
Автор: Ostrovski
Источник [3]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/api/40680
Ссылки в тексте:
[1] cackle.me: http://ru.cackle.me/welcome
[2] disqus.com: http://disqus.com/
[3] Источник: http://habrahabr.ru/post/189702/
Нажмите здесь для печати.