Создание CMS • Рождение идеи
Место и время, в которое я попал, позволили безгранично размышлять на любые темы, но чтоб не сойти с ума, я решил затронуть всегда интересную мне тему искусственного интеллекта. Пытаясь понять принципы функционирования сознания, в частности восприятия окружающего мира человеком, меня заинтересовали любопытные мысли, касающиеся объектно-ориентированных технологий. После я вспомнил про свой недавний проект – программу для проектирования баз данных, решив наконец-то взяться за создание её второй версии, сформировались мысли и о технологии проектирования программ. Но в итоге идеи нашли удачное применение в системе управления содержимым (CMS), для которой я уже долгое время искал (точнее ждал) гибкое и универсальное решение.
В чем суть
Объектно-ориентированное программирование основано на представление программы в виде совокупности объектов, каждый из которых является экземпляром определенного класса. Классы определяют свойства и поведение объектов, при этом классы могут наследоваться. Дочерний класс наследует структуру и поведение родительского класса, добавляя что-то свое. Объекты одного класса обладают общей структурой и поведением, но независимо от класса, объекты обладают уникальной идентичностью. Основные понятия: наследование, абстракция, инкапсуляция, поведение, виды отношений между объектами и между классами, и другое удачно применяются в разработке сложных программных систем.
В реальности мы совершенно не задумываемся о сложных понятиях, воспринимая при этом окружающий мир объектным. Мы выделяем объекты по совокупности свойств, группируем объекты и классифицируем их по общим свойствам. Действия, которые мы относим к объектам на самом деле есть взаимодействие конкретных объектов. Объекты не владеют действиям (методами). Дверь не может сама по себе открыться – в любом случаи происходит взаимодействие, приводящее к изменению состояний объектов, если дверь открывается с нашей помощью, значит, внутри нас происходит взаимодействие, происходит целая цепочка взаимодействий и так вплоть до элементарных частиц протонов электронов или что там ещё? Если электроны убрать подальше от всех атомов, то остановится абсолютно всё на свете!
Каким же образом все сказанное касается систем управления содержимым (CMS)? Ну, в прямом смысле, конечно, мало как, я же только начал тему. Забудь о компьютерах, перед тобой реальный мир, представь: тебе ничто не мешает взять листок бумаги, написать на нем новость, потом взять фотографию и прикрепить её скрепкой к листку. Твой листок может быть частью тетрадки, ты можешь его сжечь, засунуть куда угодно, показать, кому пожелаешь и если пожелаешь… Кругом много других объектов, тебя не волнует, что шкаф предназначен для книг, ты можешь убрать лишнюю полку и поставить туда телевизор.
Хочу подобную свободу действий при управлении сайтом! Почему возникают сложности, при использовании в новостях фотографий, и только ради такой возможности пишутся килобайты программного кода? Систему, заточенную под один сайт, невозможно использовать для другого и это не было бы проблемой, если бы сайты без изменений оставались бы конкурентоспособными… В общем, система управления сайтом (его содержимым) должна быть гибкой, хотя, конечно, можно просто иметь много денег.
Ближе к решению
До сих пор объектные базы данных не находят должного применения в то время, как объектно-ориентрованное программирование используется в подавляющих сферах информационных технологий и при этом программисты говорят о неудобствах реляционных (табличных) баз данных для хранения в них объектов. Странно даже. Вместо применения объектных баз данных появляется технология Объектно-реляционная проекция (ORM от англ. Object-relational mapping) по сути позволяющая не задумываясь сохранять объекты программы в реляционной БД. ORM уже повсеместно применяется в разработке веб приложений (сайтов), но желаемой гибкости не позволяет добиться, так как классы данных все также остаются жестко прописанными программным кодом. И только программист может изменить их свойства, т.е. позволить к новостям добавлять фотографии к примеру.
Вспомни утверждение, что объекты не владеют действиями. В этом то и дело, что программисты привыкли привязывать к объектам действия, а действия (будем говорить методы) можно только программировать, конечно, из-за этого и возникают сложности хранения объектов в БД, и поэтому невозможно пользователям предоставить право создавать объекты данных – полноценно управлять ими.
Для достижения гибкости всего-то нужно избавить объекты от их методов. Взаимодействие объектов будет обеспечиваться системой. Действия будут зависеть от объектов, от их наличия, их свойств и взаимосвязей, но объекты не будут определять действия. Объекты данных можно будет свободно создавать, связывать друг с другом. Уже не будет препятствий объединить новость с фотографией, не будет сложности к новому материалу присоединять комментарии, которые применяются уже в существующих типах (классах) материалов. Категории, каталоги, форумы, фотогалереи, ленты новостей, социальные сети и всё что угодно. Открываются возможности, о которых можно ещё долго рассказывать.
Продолжение следует.
Идея выделить контент в атомарные объекты хороша (предвидится сильная гибкость) но если допустим вставить разбить новость на объекты «текст новости», «картинка», «аннотация», «дата», «автор», еще чего то каждый такой элемент типа «новость» содержащийся из кучи мелких объектов будет получаться из базы либо множеством выборок, либо одним довольно сложным запросом что увеличит время получения этих данных.
в итоге приходим к тому, что чем универсальнее решение, тем оно трудозатратнее (в плане ресурсов машины) и результат будет не очень хороший.
хотя идея вести блог разработки CMS мне нравится и я с удовольствием буду следить за ходом процесса.
Идея очень достойная, будет интересно понаблюдать, что же получится)
Кстати, против ботов можно просто выводить какой-нибудь элемент формы (типа «Отправить») с помощью JS, и тогда посетителей не надо будет напрягать вводом кодов подтверждений, ну да это к слову)
Спасибо) чтобы не напрягаться с водом цифр, зарегистрируйтест на сайте, заодно не будет необходимости мне одобрять комментарии для отображения.
Вопрос о производительности мучает.. но знаете я не ориентируюсь на супер пупер нагруженные системы с распределенными серверами, хотя бывает подумываю)) интерес именно в реализации самой идеи — достижения очень и давно желаемой гибкости.. Уверяю, если эта гибкость будет принята народом да ещё и в ущерб производительности, то со временем по любому появятся технологии хорошенько оптимизирующие эту архитектуру.
Согласен, что сначала нужно реализовать идею, а уже потом думать над оптимизацией.
Сейчас посмотрел исходники и подумал, что хорошо бы начинать реализацию идеи не с CMS, а с универсальной библиотеки, не связанной с другим ПО.
Во-первых, её будет легче разрабатывать, а во-вторых, это позволит лучше продемонстрировать идею и даже, возможно, подключить к разработке других людей.
Думал над этим, но показать полезность этой библиотека сложно будет, а вот непосредственное воплощение идеи в CMS как раз продемонстрирует полезность и эффективность))
Японский Бог! Как дежавю просто, или мне это снится? Точно также вынашивал уже за годы создания веб-проектов в голове именно такой подход в части атомарности объектной просто на связях. Дайте угадаю, я тоже думаю разгадка мышления и памяти человека не за горами…
Сколько не читал про ИИ везде на мой взгляд грабли какие-то.
EugeneS
Хотел почти слово в слово повторить твой пост, только в конце все-таки не согласен.
Разгадка мышления человека не загорами… уже тысячи лет.
Хотя в целом подход поддерживаю.
Последние годы только об этом и думаю, — что начинать нужно не со стороны возможностей реализации, а со стороны исследования человеческого восприятия.
Объекты смогли «появится» только благодаря уникальной возможности человеческого мышления — способности обобщать. И в любой программе ценно в первую очередь именно это — схема обобщения, реализация абстракций (а не реализция механизма — программы).
Но вывести алгоритм построения этих схем невозможно. Сами эти схемы — эмпирический багаж, а их построение — нечто данное свыше.
Всё, что как мне кажется, пока нам доступно — это возможность эти схемы накапливать и в свою очередь обобщать… и так до бесконечности подниматься на всё более высокие уровни абстракции.
Полиморфизм, наследование, абстракция — это свойства человеческого мышления, которые позволяют умещать в наших маленьких головах целые миры.
Здравствуйте! Безумно интересно. Я не программист, я аналитик. Но в силу одного неудачного опыта работы с веб приложением, логику которого я разрабатывала — я начала исследовать архитектуры и пришла как многие к тому же выводу, что и вы. Взаимодействие основных логических групп. Разговор долгий — здесь не буду.
Куча файлов переписано и еще более предстоит…
улыбнуло =)
Это же в какое-такое место нужно попасть что бы появилась возможность так безгранично размышлять? Без шуток, интересно.
в армию ))