Дмитрий Сергеевич (axshavan) wrote,
Дмитрий Сергеевич
axshavan

Очередное озарение в душе

Вчера вечером между двумя пятнадцатиминутными сеансами прораммирования на благо общественности я пошел помыться. Как раз обдумывал соединение компонента "news" и виртуального дерева. Что такое новости на сайте? По сути, это самые обычные статьи или комментарии. Куски текста с заголовками, короче. И теоретически ничем не отличаются от тех же комментариев в жж, и от статей на каком-нибудь сайте со статьями, и от постов в жж. Назову такие куски текста с заголовками статьями. Кажой статье можно указать "родителя", те, у кого родитель неизвестен - те как бы самые главные статьи и находятся на основном уровне. Применительно к новостям - "сироты" будут категориями новостей, все остальные - просто новостями. Если найдется "внук", то есть статья на следующем уровне вложенности, то она будет считаться комментарием к новости.
Это же офиенный механизм! - озарало меня в дУше. Сделать движок сайта на одних статьях. Модуль новостей знает, что статья под номером 5 - это корень всех новостей, ее "потомки" (то есть те, у кого в поле parent стоит значение 5) - это категории новостей, следующий уровень - это сами новости, а потом несутся комментарии к новостям с любой степенью ветвления - как комментарии к статьям в жж.
Модуль главного меню знает, что статья под номером 2 - это главное меню, ее потомки - пункты главного меню, их потомки - подпункты. Заголовок - это то, что отображается, текст - это хреф ссылки. Например.
Модуль блога знает, что статья под номером 6 - это корень блогов, следующий уровень - это сами записи, потом - опять ветвящиеся комментарии к ним. А можно и не ветвящиеся, конечно.

Преимущество подобного подхода - прежде всего в крутости :)
Единственное, для сайтов с активным содержимым, типа форумов, он не подходит. А вот для сайтов с довольно спокойным содержимым - очень даже! Допустим, новостной портал. Даже если тамошние журналисты хуячат по сто новостей в сутки, за год это получится 36525 записей. Всего-то :) Если к каждой записи посетители будут оставлять по тысяче комментариев, то число статей возрастет до 3 с половиной миллионов в год. Это уже, конечно, нагрузка на БД приличная, MySQL начнет задумываться при поиске и каких-нибудь сложных выборках. За десять лет число статей возрастет до тридцати миллионов, ай-ай-ай, бедный MySQL :) Только не бывает новостных порталов, в которых журналисты фигачат сто новостей в сутки. И не ко всем новостям оставляют по тысяче с лишним комментариев. И за несколько лет производительность программно-аппаратного комплекса возрастет настолько, что будет плевать на неоптимизированные запросы. В крайнем случае переедем на другой джижок БД для адекватного содержания большой базы.

Упрощается администрирование и программирование ядра и модулей. Ведь всего один тип сущностей - можно использовать стандартные процедуры. Правда, сложность запросов и прочего возрастает с увеличением глубины вложения.

Ну и, конечно, система распределения прав. Неохота создавать огромных размеров таблицу-связку "группа пользоваталей" - "статья" - "тип доступа", но, наверное, придется. Хотя можно будет ее уменьшить, подразумевая, что права, выданные на предка, распространяются на всех потомков и не могут... как бы это сказать? Ослабляться, что ли. То есть если на одну статью наложено вето на комментирование одной группе пользователей, то они не смогут комментировать ни одну статью из потомков этой, и тем более не смогут редактировать. Это, может, не очень удачное решение с точки зрения универсальности, но упростит работу как программистам, так и ядру движка.
Tags: web
Subscribe

  • Зерои

    Некоторое время — несколько лет, если быть более точным — я пользовался сайтом «Лайвлиб», чтоб отмечать там прочитанные мной книги. Иногда даже…

  • Баловство с картинками

    Долгие годы разглядывая разные фотографии в разных местах, я пришёл к выводу, что выигрышно смотрятся такие фотки, у которых есть два, скажем так,…

  • Заметка про джаваскрипт

    Больше часа потратил всяким гугленгием и экспериментами, и в итоге всё равно пришлось придумывать обходной маршрут. Проблема такая. Есть некий кусок…

  • Post a new comment

    Error

    Comments allowed for friends only

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 2 comments