Создание CMS • Модульная система
Модульность – залог живучести системы, благодаря модульности к орбитальной станции МКС можно пристыковать новый отсек, заменить старый и тем самым нарастить необходимые мощности. В программных системах точно также, но есть одна тонкость, из-за которой модульность может стать головной болью для программистов-разработчиков.
Допустим, мы делаем модуль каталога для какого-то сайта или, если уж на то пошло, для системы управления сайтом. Для хранения информации о товаре будем использовать таблицу в базе данных, впрочем – это даже не важно, будем ли мы использовать базу данных. В общем, модуль сделали и все как надо работает. Мы даже смогли установить этот модуль в системе, и каталог стал доступен по определенному адресу. Но перед нами возникает задача, нужно чтоб для товара в каталоге можно было оставлять отзывы или, иначе говоря, комментировать описания. При этом у нас уже есть в системе комментарии для новостей и естественно следовало бы их использовать и для товара в каталоге, кроме того, каталог должен состыковаться с поисковой системой сайта и не иметь проблем с взаимодействием с другими модулями системы. В данном случае эта задача невыполнима, потому что модулю каталога не известно о данных, оперируемых другими модулями, а другим модулям в свою очередь ничего неизвестно про данные каталога, короче говоря, неизвестно как с ними работать.
В реальном мире не возникает трудностей взять фотоальбом и написать в нем что-то поясняющее фотографию. Можем тоже самое сделать в книге, в тетрадке да даже на стене можем рисовать. Что бы мы не рассматривали, ко всему действуют одни и те же законы вселенной, поэтому мы можем воздействовать на любые объекты, правда результат наших действий, скорее всего, будет разным. И мы совершенно не имеем представления, что находится за гранью нашей вселенной.
Если провести аналогию и вспомнить недавнее умозаключение, что система управления содержимым сайта обеспечивает взаимодействие объектов данных, то в этом случаи система как вселенная управляет законами взаимодействия объектов и, чем бы ни являлся объект, к нему будут применены общие законы. В таком случаи, создавая модуль каталога для системы, для представления данных нужно использовать объекты системы как материю вселенной, а сам модуль при необходимости будет расширять законы системы.
Продолжение следует.
Проблема с добавлением комментарием (как пример) или еще чего к другим модулям мне видится вполне решаемой.
главное придумать и реализовать верный интерфейс взаимодействия.
для комментариев можно поступить так:
комментарии выделить в отдельный модуль «комментарии»
этот модуль должен на вход получать «уникальный во всей системе ID» того к чему будет эта лента комментарием (новость, фотография, статья). так как все эти (новость, фотография, статья) есть не что иное как другие модули, а каждый элемент этого «другого модуля» будет содержать элементы контента (ай ди новости, ай ди фотографии, ай ди статьи) то можно сделать «уникальный во всей системе ID» из связки ID_модуля + ID_элемента_модуля
и того получаем такую схему:
список модулей
————
ID Модули:
————
1 Новости
2 Стати
3 Фотографии
————
ID Новости
————
1 новость 1
2 новость 2
3 новость 3
————
ID Статьи
————
1 Статья 1
2 Статья 2
3 Статья 3
соответственно комментарии будут такие
——————————————
ID | ID_модуля | ID_записи_модуля | коментарий
——————————————
1 | 1 | 1 | комментарий к новости 1
2 | 1 | 2 | комментарий к новости 2
3 | 2 | 1 | комментарий к стате 1
4 | 1 | 3 | комментарий к новости 3
5 | 2 | 3 | комментарий к стате 1
собственно модуль комментарии можно прицепить к любому другому модулю, однако если для каждого модуля будут различные структуры комментариев (я имею в виду не вид отображения, это можно решать разными шаблонами/наследовательностью модулей и так далее) а конкретно в одном месте комментарии в виде рисунка, в другом в виде текста, а в третьем еще как-то то тут нужно будет либо делать универсальность модуля комментариев, либо делать различные модули комментарием….
а как реализуется «ответить на комментарий» ?
предлагаю познакомится со статьё Модель данных. Модули не соответсвуют и не управляют типами содержимого, они могут только что-то в плане логики и дейсвтий добавить.
Вынашивал схожую идею 5 лет. Вначале мне все твердили что это не решаемо. С третьей попытки сделал наконец! Теперь доделываю последние штрихи (система имеет кодовое название Е5), буду рад списаться с автором (емайл оставил), с радостью поделюсь своими решениями.
Как у меня решается проблемма с комментариями?
1. Есть модуль Комментарии с одной таблицей данных Комментарии, доступной для внешнего использования и таблицей Шаблоны комментариев для внутреннего использования
2. Делаю модуль «Новости» в нём делаю таблицу «Новости» и присоединяю к ней таблицу Комментарии (которую мы создали выше). Таким же образом можно прикрепить и фотографии и т.д.
Естественно это всё делается натыкиванием мыши в админке. Без всяких PHP и MySQL.
Уфф… столько всего можно рассказать… Но пока не буду. Если Владимиру интересно — спишитесь со мной.
А в открытую обсудить не желаете?