Может быть, это больше говорит о моделировании данных?Является ли upvote ресурсом или просто атрибутом?
Моделирование воздействий Реализация
Обычно мы моделируем что-то из реального мира, и наш выбор представления серьезно повлияет на возможности развитогосистема.Мы могли бы реализовать наше голосование двумя способами: как признак того, за что голосовали, или как отдельное лицо.Выбор повлияет на то, насколько легко мы сможем реализовать нужные функции.
Два возможных варианта реализации ...
1.Голосует как субъекты
Я бы смоделировал это с ресурсом, который моделировал отношения между избирателем и предметом, за который проголосовали.Почему?
Голосование имеет состояние :
- , за что проголосовали
- , который проголосовал,
- , когда сделалони голосуют.
- - это был голос "за" или "за" (вы упомянули SO в качестве примера, поэтому я включаю эту возможность здесь)
Это ресурс сам по себе с интересное поведение вокруг голосов
- вести правильный подсчет голосов
- предотвращать множественное увеличение / уменьшение голосов
Это можно легко смоделировать с помощью REST .
Я могу ПОСТАВИТЬ / ПОСТАВИТЬ новый голос, УДАЛИТЬ предыдущий голос, проверить мои голоса квалифицированным GET.
Система может гарантировать, что я голосую только один раз - что будет нелегко сделать, еслиподдерживался простой счетчик.
2.Голоса как атрибут
В этой реализации мы моделируем голосование как счетчик.В этом случае нам нужно
Получить полное состояние того, за что проголосовали - максимизировать интерфейс между клиентом и сервером
Обновление счетчика
Вернуть обновленное состояние - упс, кто-то уже обновил ресурс за это время!
СерверТеперь нет простого способа обрабатывать несколько голосов от одного человека, не управляя каким-либо государством «на стороне».У нас также есть проблема с «потерянным обновлением».
Все быстро усложняется.
Окончательный совет
Решение о том, как вы смоделируете что-либо, должно зависеть от того, что вам нужно для работы системы.
Часто нет правильного решения, просто лучший компромисс между усилием и ценностью .
Выберите дизайн, который наиболее легко реализует наиболее распространенные варианты использования.Обычные вещи должны быть быстрыми и простыми, необычные должны быть только возможными.
Крис