Создание 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
собственно модуль комментарии можно прицепить к любому другому модулю, однако если для каждого модуля будут различные структуры комментариев (я имею в виду не вид отображения, это можно решать разными шаблонами/наследовательностью модулей и так далее) а конкретно в одном месте комментарии в виде рисунка, в другом в виде текста, а в третьем еще как-то то тут нужно будет либо делать универсальность модуля комментариев, либо делать различные модули комментарием….
предлагаю познакомится со статьё Модель данных. Модули не соответсвуют и не управляют типами содержимого, они могут только что-то в плане логики и дейсвтий добавить.