Как известно в работе вёб программиста часто нужно делать что то достаточно быстро, для этого придумали множество всяческих инструментов ООП, фреймворки и много всего, но как не порождать монстров, а делать всё быстро и качественно?
Часто увлекаясь проектированием получается не то что хотелось бы, от проекта к проекту навык совершенствуется и опыт растёт.
Сейчас хотел бы поделиться своим опытом.
Рассмотрим банальный пример
Посты — Комментарии и пользователи которые всё это генерируют.
У всего есть рейтинг, это и будет нашей проблемой.
мы бы могли поступить например так:
Чем не вариант? Для каждой таблицы есть своя таблица с рейтингом с точки зрения баз данных всё верно.
Но вам вряд ли захочется описывать класс для каждой таблицы с рейтингом тем более учитывая то что этот код будет повторятся из раза в раз, а если у вас будет куда больше сущностей для которых потребуется рейтинг? В результате всё расплодится до невероятных масштабов.
Потому предлагаю более гибкий вариант:
Таблица с рейтингом у нас теперь одна, и туда внесено дополнительное поле где указано от чего этот рейтинг.
Правда так проще?
Класс для установки рейтинга будет очень прост (решения для Zend Framework):
Теперь вы можете добавить рейтинг к любой сущности в вашем проекте, но пример примером, а если немного отвлечься то по этой схеме можно организовать много чего и достаточно быстро и просто например: теги, комментарии к чему либо не было, да и вообще мало ли что взбредёт в голову.
Если к этому добавить некоторые помощники вида которые будут помогать выводить вам одно и то же несколько раз задача облегчается ещё в несколько раз.
И это только малая толика того как можно облегчить свой труд, хотелось бы услышать ещё различные варианты решения для различных проблем.
P.S: сорри за отвратные картинки.
Часто увлекаясь проектированием получается не то что хотелось бы, от проекта к проекту навык совершенствуется и опыт растёт.
Сейчас хотел бы поделиться своим опытом.
Рассмотрим банальный пример
Посты — Комментарии и пользователи которые всё это генерируют.
У всего есть рейтинг, это и будет нашей проблемой.
мы бы могли поступить например так:
Чем не вариант? Для каждой таблицы есть своя таблица с рейтингом с точки зрения баз данных всё верно.
Но вам вряд ли захочется описывать класс для каждой таблицы с рейтингом тем более учитывая то что этот код будет повторятся из раза в раз, а если у вас будет куда больше сущностей для которых потребуется рейтинг? В результате всё расплодится до невероятных масштабов.
Потому предлагаю более гибкий вариант:
Таблица с рейтингом у нас теперь одна, и туда внесено дополнительное поле где указано от чего этот рейтинг.
Правда так проще?
Класс для установки рейтинга будет очень прост (решения для Zend Framework):
class Rating extends Zend_Db_Table_Abstract
{
public function setRating($item_id, $user_id, $table)
{
/*
* здесь записываем в нашу таблицу с рейтингом, кто проголосвал и за что проголосовал
* $table - нужно например для того чтобы определить item_type, это может быть именем таблицы
*/
}
public function getRating($item_id, $table)
{
/*
* Здесь получаем значение рейтинга для какого либо итема,
* Например при помощи mysql функции count
*/
}
public function isVoted($item_id, $user_id, $table)
{
//Определяем голосовал ли такой то пользователь за такой то итем
}
}
* This source code was highlighted with Source Code Highlighter.
Теперь вы можете добавить рейтинг к любой сущности в вашем проекте, но пример примером, а если немного отвлечься то по этой схеме можно организовать много чего и достаточно быстро и просто например: теги, комментарии к чему либо не было, да и вообще мало ли что взбредёт в голову.
Если к этому добавить некоторые помощники вида которые будут помогать выводить вам одно и то же несколько раз задача облегчается ещё в несколько раз.
И это только малая толика того как можно облегчить свой труд, хотелось бы услышать ещё различные варианты решения для различных проблем.
P.S: сорри за отвратные картинки.