<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Комментарии: Архитектура CMS</title>
	<atom:link href="http://boolive.ru/createcms/architecture/feed" rel="self" type="application/rss+xml" />
	<link>http://boolive.ru/createcms/architecture</link>
	<description>Создание гибкой системы управления сайтом</description>
	<lastBuildDate>Wed, 16 May 2012 18:18:44 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
	<item>
		<title>Автор: paranoid</title>
		<link>http://boolive.ru/createcms/architecture#comment-423</link>
		<dc:creator>paranoid</dc:creator>
		<pubDate>Tue, 28 Sep 2010 21:53:40 +0000</pubDate>
		<guid isPermaLink="false">http://boolive.ru/?p=80#comment-423</guid>
		<description>Ещё полезно с паттернами проектирования разобраться. Там найдёшь ответы на многие вопросы. А на некоторые вопросы даже и не появятся.

p.s. MVC но не совсем звучит как-то по джуниорски</description>
		<content:encoded><![CDATA[<p>Ещё полезно с паттернами проектирования разобраться. Там найдёшь ответы на многие вопросы. А на некоторые вопросы даже и не появятся.</p>
<p>p.s. MVC но не совсем звучит как-то по джуниорски</p>
]]></content:encoded>
	</item>
	<item>
		<title>Автор: Владимир</title>
		<link>http://boolive.ru/createcms/architecture#comment-191</link>
		<dc:creator>Владимир</dc:creator>
		<pubDate>Fri, 19 Jun 2009 09:51:35 +0000</pubDate>
		<guid isPermaLink="false">http://boolive.ru/?p=80#comment-191</guid>
		<description>В продолжение примеру. За счет применения событий можно устанавливать модули обрабатывающие запросы без вмешательства в код. Выбор обработчика запроса производиться не явно через генерацию события на основе первого параметра URL. Тут также обеспечивается и безопасность - вызвать через запрос любой модуль не получиться, можно только если модуль сам зарегистрировался на событие, только тогда он будет работать. 

Событие - это как связующее действий между слоями логики движка. Сами же действия централизуются модулем Action, почти также как централизованы данные. Но об этом в деталях пока сложно рассказывать, так как сейчас над этим ведется работа.</description>
		<content:encoded><![CDATA[<p>В продолжение примеру. За счет применения событий можно устанавливать модули обрабатывающие запросы без вмешательства в код. Выбор обработчика запроса производиться не явно через генерацию события на основе первого параметра URL. Тут также обеспечивается и безопасность &#8212; вызвать через запрос любой модуль не получиться, можно только если модуль сам зарегистрировался на событие, только тогда он будет работать. </p>
<p>Событие &#8212; это как связующее действий между слоями логики движка. Сами же действия централизуются модулем Action, почти также как централизованы данные. Но об этом в деталях пока сложно рассказывать, так как сейчас над этим ведется работа.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Автор: EugeneS</title>
		<link>http://boolive.ru/createcms/architecture#comment-189</link>
		<dc:creator>EugeneS</dc:creator>
		<pubDate>Fri, 19 Jun 2009 09:26:09 +0000</pubDate>
		<guid isPermaLink="false">http://boolive.ru/?p=80#comment-189</guid>
		<description>Ну... не знаю... :)  Если у системы есть внутренние границы - то всё что внутри должно обеспечивать работоспособность и отказоустойчивость, а то что во вне - это стандартный ввод/вывод - и тут уже форматирование потока - HTML, XML~SOAP, JSON, и т.п. Неужто предполагается разнести модули системы по сети?
А смысл, делать это на высоком уровне, проще если уж нужна распределенность использовать или сетевую файловую систему, или среду исполнения. Вообщем, если есть интутивное видение что нужно так, то иногда даже трудно объяснить почему - но потом оказывается что интуиция просчитала все правильно - будем с нетерепением ждать продолжения.</description>
		<content:encoded><![CDATA[<p>Ну&#8230; не знаю&#8230; <img src='http://boolive.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />   Если у системы есть внутренние границы &#8212; то всё что внутри должно обеспечивать работоспособность и отказоустойчивость, а то что во вне &#8212; это стандартный ввод/вывод &#8212; и тут уже форматирование потока &#8212; HTML, XML~SOAP, JSON, и т.п. Неужто предполагается разнести модули системы по сети?<br />
А смысл, делать это на высоком уровне, проще если уж нужна распределенность использовать или сетевую файловую систему, или среду исполнения. Вообщем, если есть интутивное видение что нужно так, то иногда даже трудно объяснить почему &#8212; но потом оказывается что интуиция просчитала все правильно &#8212; будем с нетерепением ждать продолжения.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Автор: Владимир</title>
		<link>http://boolive.ru/createcms/architecture#comment-188</link>
		<dc:creator>Владимир</dc:creator>
		<pubDate>Thu, 18 Jun 2009 20:43:54 +0000</pubDate>
		<guid isPermaLink="false">http://boolive.ru/?p=80#comment-188</guid>
		<description>Думал и отчасти ещё продолжаю думать о создании некого базового функционала, который расширяется уточнением, реализацией конкретных действий, но как его расширять? Наследованием классов, декорированием…? Это же опять или прямое вмешательство в код или использование событий. Фактически ведь сейчас так и получается, что есть базовые модули и они расширяются через события. А вот, что касается дробления функционала на мелкие куски и предоставление возможности полного переопределения их, тут я с радостью ещё подумаю, здесь есть свои плюсы.

В статье приведены базовые события, на самом же деле по мере уточнения логики модулей (движок то ещё делается) у них появляются более специфичные события. В данной системе нет стремления к аспектному программированию, когда реально нужно было бы вызывать события после каждого оператора или в лучшем случаи вначале и в конце тела каждой функции/метода. На такую мысль может навести событие AFTER в модуле Request. Его уже нет :)  Дело в том, что вызов события предполагает какой-то вид действия, тем самым указывая направление расширения функционала, а не просто выполнения чего-то, чего угодно только от того что тот модуль сработал.  Здесь пока логика контролируется в основном стремлением культурно программировать, процесс движется и к его финалу сформируется некое правило по событиям.  

Но главное внимание нужно обращать совсем на другое! Посмотри, как вызываются события – просто указывается строкой название, а это даёт возможность, исходя из любых условий, формировать событие динамически. А теперь рассмотрим, где это применяется.

Работу системы необходимо рассматривать глобально. Есть клиент, есть сервер, на сервере наша система обрабатывающая запросы клиента. Учитывается, что запросы могут быть в разных форматах, это может быть в большинстве случаев обычный HTTP, а далее на его основе и JSON, и XML-RPС, REST, да даже чуть на забыл непосредственное обращение к фалам. В данной статье эта возможность обозначена модулями Page, X, FILE как пример. Так вот, представим работу модуля  XML-RPС. 

Он разбирает полученный xml и должен вызвать соответствующее действие в системе. Именно здесь события выдают максимальную гибкость. Так модулю XML-RPС достаточно вызвать событие с динамически сформированным именем (имя может быть указано в запросе) и всё. Далее уже какой модуль зарегился на такое событие, тот и будет выполнять действие. При подключении нового модуля не нужно модернизировать все модули обрабатывающие запросы, дополнять их алгоритм, их API.</description>
		<content:encoded><![CDATA[<p>Думал и отчасти ещё продолжаю думать о создании некого базового функционала, который расширяется уточнением, реализацией конкретных действий, но как его расширять? Наследованием классов, декорированием…? Это же опять или прямое вмешательство в код или использование событий. Фактически ведь сейчас так и получается, что есть базовые модули и они расширяются через события. А вот, что касается дробления функционала на мелкие куски и предоставление возможности полного переопределения их, тут я с радостью ещё подумаю, здесь есть свои плюсы.</p>
<p>В статье приведены базовые события, на самом же деле по мере уточнения логики модулей (движок то ещё делается) у них появляются более специфичные события. В данной системе нет стремления к аспектному программированию, когда реально нужно было бы вызывать события после каждого оператора или в лучшем случаи вначале и в конце тела каждой функции/метода. На такую мысль может навести событие AFTER в модуле Request. Его уже нет <img src='http://boolive.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />   Дело в том, что вызов события предполагает какой-то вид действия, тем самым указывая направление расширения функционала, а не просто выполнения чего-то, чего угодно только от того что тот модуль сработал.  Здесь пока логика контролируется в основном стремлением культурно программировать, процесс движется и к его финалу сформируется некое правило по событиям.  </p>
<p>Но главное внимание нужно обращать совсем на другое! Посмотри, как вызываются события – просто указывается строкой название, а это даёт возможность, исходя из любых условий, формировать событие динамически. А теперь рассмотрим, где это применяется.</p>
<p>Работу системы необходимо рассматривать глобально. Есть клиент, есть сервер, на сервере наша система обрабатывающая запросы клиента. Учитывается, что запросы могут быть в разных форматах, это может быть в большинстве случаев обычный HTTP, а далее на его основе и JSON, и XML-RPС, REST, да даже чуть на забыл непосредственное обращение к фалам. В данной статье эта возможность обозначена модулями Page, X, FILE как пример. Так вот, представим работу модуля  XML-RPС. </p>
<p>Он разбирает полученный xml и должен вызвать соответствующее действие в системе. Именно здесь события выдают максимальную гибкость. Так модулю XML-RPС достаточно вызвать событие с динамически сформированным именем (имя может быть указано в запросе) и всё. Далее уже какой модуль зарегился на такое событие, тот и будет выполнять действие. При подключении нового модуля не нужно модернизировать все модули обрабатывающие запросы, дополнять их алгоритм, их API.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Автор: EugeneS</title>
		<link>http://boolive.ru/createcms/architecture#comment-187</link>
		<dc:creator>EugeneS</dc:creator>
		<pubDate>Thu, 18 Jun 2009 19:23:38 +0000</pubDate>
		<guid isPermaLink="false">http://boolive.ru/?p=80#comment-187</guid>
		<description>Ну хорошо, предлагаю отойти от возможности запутывания и перейти к получаемой за эту цену гибкости и расширяемости. Итак, что же это за возможность, а это возможность прикрутить новый модуль который ориентируясь на общие события будет что-то привносить. И в код остальных модулей лезть не придется. Попробую промоделировать так ли это.

Предположим, есть модуль который работает с файлами, он генерирует событие:
READFILE. Появилась необходимость добавить модуль какой-то проверки до чтения файлов - пусть это будет модуль CheckBefore. Я ввожу этот модуль в систему просто регаясь на событие READFILE. Но что я должен знать: В каком именно месте кода другого модуля это событие - сгенерено ДО чтения файла, а не в МОМЕНТ или ПОСЛЕ, это очень важно - иначе технически мой новый модуль становится не удел. Хорошо, а допустим мне завтра нужно внести какую-то пост-обработку файла что тогда? Я должен ожидать что в системе существует
событие READFILE_END? И уже на него регистрироваться? Пока я вижу что события представляют собой высокоуровневые абстрактные события быстро исчерпывающие свой потенциал по гибкому наращиванию системы. 

Я склонен полагать, что чтобы завтра прикрутить модуль который не был необходим вчера, не найдется заранее подготовленного события, и тогда мы руками лезем в код тех модулей события которых нам нужны - гибкость ли это и расшираяемость?  Чтобы система была гибко расширяема практически без вылазок в код других модулей, технически, надо чтобы почти после каждых значимых строк кода всех модулей были генерации событий, потому что только в эти места можно будет потом вклинить вызовы. Мне кажется, что выглядит не очень гибко и не очень лаконично. Не проще ли было следовать тому, что и так уже придумано, вводить модули ни как орбитальные станции, а как подключаемые и наследуемые библиотеки - то есть каждый функционал системы это вызов функции - который дробится на более простые функции, а они в свою очередь на еще более простые, таким образом перекрывая или дополняя, мы всегда можем внести коррективы практически в любой участок системы - а технически это разделено отдельными папками и файлами - как модули в питоне. И ненужно достигать этого неродной для PHP-интерпретатора событийной моделью и в идеале испещрять каждые две строчки кода генерацией события, в стиле READFILE_BEFORE, READFILE_NOW, READFILE_AFTER, и т.п.

Да и вообще зачем внутри системы такое жесткое API? При взаимодействии со сторонними ПО? - но это другое дело и другая история. Сегодня приступаю к детальному чтению следующих глав по архитектуре данных. Вообще у меня закрадываются подозрения что автор смотрит дальше и хочет привести не только данные к общей гомогенной среде но и функционал по возможности - этим возможно и продиктованы введенные Events и Actions. Я тоже думаю, что на самом программа - есть какой-то частный случай общего хранилища данных, то есть инфморционное сетевое хранилище не только статично и имеет связи, но еще и активно и производит действия по управлению какой-то части информации. Эту точку зрения я слышал у г-на Нариньяни - директора РосНИИ ИИ. И с ней согласен, но мало пока представляю с какого бока к этому подобраться.

P.S.: На самом деле мне жутко интересно обсуждать все теоритические и практические моменты, до которых у меня, я надеюсь, хватает ума. Я ЗА эту CMS-ку потому что её концепция в любом случае ближе всех мне по духу. Вчера очередной раз почитал про DJANGO - ну не нравится мне их ORM - ну что тут поделаешь, ну слишком они ложатся по фактическую архитектуру рели в угоду производительности и слабо мне кажется думали о теоритической модели информационного пространства, более близкого по признакам к реальности.</description>
		<content:encoded><![CDATA[<p>Ну хорошо, предлагаю отойти от возможности запутывания и перейти к получаемой за эту цену гибкости и расширяемости. Итак, что же это за возможность, а это возможность прикрутить новый модуль который ориентируясь на общие события будет что-то привносить. И в код остальных модулей лезть не придется. Попробую промоделировать так ли это.</p>
<p>Предположим, есть модуль который работает с файлами, он генерирует событие:<br />
READFILE. Появилась необходимость добавить модуль какой-то проверки до чтения файлов &#8212; пусть это будет модуль CheckBefore. Я ввожу этот модуль в систему просто регаясь на событие READFILE. Но что я должен знать: В каком именно месте кода другого модуля это событие &#8212; сгенерено ДО чтения файла, а не в МОМЕНТ или ПОСЛЕ, это очень важно &#8212; иначе технически мой новый модуль становится не удел. Хорошо, а допустим мне завтра нужно внести какую-то пост-обработку файла что тогда? Я должен ожидать что в системе существует<br />
событие READFILE_END? И уже на него регистрироваться? Пока я вижу что события представляют собой высокоуровневые абстрактные события быстро исчерпывающие свой потенциал по гибкому наращиванию системы. </p>
<p>Я склонен полагать, что чтобы завтра прикрутить модуль который не был необходим вчера, не найдется заранее подготовленного события, и тогда мы руками лезем в код тех модулей события которых нам нужны &#8212; гибкость ли это и расшираяемость?  Чтобы система была гибко расширяема практически без вылазок в код других модулей, технически, надо чтобы почти после каждых значимых строк кода всех модулей были генерации событий, потому что только в эти места можно будет потом вклинить вызовы. Мне кажется, что выглядит не очень гибко и не очень лаконично. Не проще ли было следовать тому, что и так уже придумано, вводить модули ни как орбитальные станции, а как подключаемые и наследуемые библиотеки &#8212; то есть каждый функционал системы это вызов функции &#8212; который дробится на более простые функции, а они в свою очередь на еще более простые, таким образом перекрывая или дополняя, мы всегда можем внести коррективы практически в любой участок системы &#8212; а технически это разделено отдельными папками и файлами &#8212; как модули в питоне. И ненужно достигать этого неродной для PHP-интерпретатора событийной моделью и в идеале испещрять каждые две строчки кода генерацией события, в стиле READFILE_BEFORE, READFILE_NOW, READFILE_AFTER, и т.п.</p>
<p>Да и вообще зачем внутри системы такое жесткое API? При взаимодействии со сторонними ПО? &#8212; но это другое дело и другая история. Сегодня приступаю к детальному чтению следующих глав по архитектуре данных. Вообще у меня закрадываются подозрения что автор смотрит дальше и хочет привести не только данные к общей гомогенной среде но и функционал по возможности &#8212; этим возможно и продиктованы введенные Events и Actions. Я тоже думаю, что на самом программа &#8212; есть какой-то частный случай общего хранилища данных, то есть инфморционное сетевое хранилище не только статично и имеет связи, но еще и активно и производит действия по управлению какой-то части информации. Эту точку зрения я слышал у г-на Нариньяни &#8212; директора РосНИИ ИИ. И с ней согласен, но мало пока представляю с какого бока к этому подобраться.</p>
<p>P.S.: На самом деле мне жутко интересно обсуждать все теоритические и практические моменты, до которых у меня, я надеюсь, хватает ума. Я ЗА эту CMS-ку потому что её концепция в любом случае ближе всех мне по духу. Вчера очередной раз почитал про DJANGO &#8212; ну не нравится мне их ORM &#8212; ну что тут поделаешь, ну слишком они ложатся по фактическую архитектуру рели в угоду производительности и слабо мне кажется думали о теоритической модели информационного пространства, более близкого по признакам к реальности.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Автор: Владимир</title>
		<link>http://boolive.ru/createcms/architecture#comment-186</link>
		<dc:creator>Владимир</dc:creator>
		<pubDate>Wed, 17 Jun 2009 22:01:25 +0000</pubDate>
		<guid isPermaLink="false">http://boolive.ru/?p=80#comment-186</guid>
		<description>Ну так ты расширил функционал непосредственно изменив получается модуль, тут нет никакой гибкости для конечного пользователя системы. Смысл то в том, чтоб без вмешательства в существующий программный код расширять функционал.</description>
		<content:encoded><![CDATA[<p>Ну так ты расширил функционал непосредственно изменив получается модуль, тут нет никакой гибкости для конечного пользователя системы. Смысл то в том, чтоб без вмешательства в существующий программный код расширять функционал.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Автор: EugeneS</title>
		<link>http://boolive.ru/createcms/architecture#comment-185</link>
		<dc:creator>EugeneS</dc:creator>
		<pubDate>Wed, 17 Jun 2009 21:57:46 +0000</pubDate>
		<guid isPermaLink="false">http://boolive.ru/?p=80#comment-185</guid>
		<description>&quot;...За счет событий система открыта для расширения, нужно только в новом модули указать, какие действия расширять, т.е. выполнить регистрацию на событие, а системе не нужно догадываться, что там ещё могут к ней прикрутить...&quot;

А что в ином случае системе надо догадываться что к ней прикрутили?
ИМХО функционал расширяется путем расширения самих функций и методов изнутри, и ненадо системе знать. 
Вчера функция была такой:
File.Read(
     File.open()
     File.readline()
  ) 

Завтра прикрутили штуку File.check() 

Теперь это
File.Read(
    File.check()
    File.open()
    File.readline()
)


Все, кто вызывал File.Read() будут по-прежнему его вызывать
не зная что функционал обогател.

Я не рассматриваю модульность (новости, и прочее) я понимаю что модули тут есть аспектные компоненты.</description>
		<content:encoded><![CDATA[<p>&#171;&#8230;За счет событий система открыта для расширения, нужно только в новом модули указать, какие действия расширять, т.е. выполнить регистрацию на событие, а системе не нужно догадываться, что там ещё могут к ней прикрутить&#8230;&#187;</p>
<p>А что в ином случае системе надо догадываться что к ней прикрутили?<br />
ИМХО функционал расширяется путем расширения самих функций и методов изнутри, и ненадо системе знать.<br />
Вчера функция была такой:<br />
File.Read(<br />
     File.open()<br />
     File.readline()<br />
  ) </p>
<p>Завтра прикрутили штуку File.check() </p>
<p>Теперь это<br />
File.Read(<br />
    File.check()<br />
    File.open()<br />
    File.readline()<br />
)</p>
<p>Все, кто вызывал File.Read() будут по-прежнему его вызывать<br />
не зная что функционал обогател.</p>
<p>Я не рассматриваю модульность (новости, и прочее) я понимаю что модули тут есть аспектные компоненты.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Автор: Владимир</title>
		<link>http://boolive.ru/createcms/architecture#comment-183</link>
		<dc:creator>Владимир</dc:creator>
		<pubDate>Wed, 17 Jun 2009 21:38:51 +0000</pubDate>
		<guid isPermaLink="false">http://boolive.ru/?p=80#comment-183</guid>
		<description>В данном случае, события это всего лишь неявный вызов методов. Это необходимо для свободного подключения новых модулей и наращивания функционала системы. Тут меняется отношение между существующими модулями (будем считать системой) и новыми подключаемыми. За счет событий система открыта для расширения, нужно только в новом модуле указать, какие действия расширять, т.е. выполнить регистрацию на событие, а системе не нужно догадываться, что там ещё могут к ней прикрутить, только предоставить вызовом события возможность что-то прикручивать.

При возникновении события вызываются методы, которые зарегистрированы на данное событие. Обработчик события может возвращать результат и этот результат можно использовать там, где событие вызвано, например, перед чтением данных выполняется проверка возможности чтения, там уже генерируется событие, обработкой которого будет осуществлен контроль доступа модулем контроля доступа.

Конечно, я согласен с тем, что если всю логику системы пересвязать событиями, то получится не то что коллизия… Не пойму только, почему вы события сравниваете с GOTO, ведь неслабую запутанность можно реализовать и прямым вызовом функций, которые вызывают другие, а следующие ещё каике-то, а потом зацикливание, рекурсия...

Нужно понимать, что в данной системе модули не есть некий набор подобного функционала, как в существующих движках, типа модуль каталога и новостной ленты принципиально ничем не отличаются. В этой CMS каждый модуль это уникальное звено и связывание этих звеньев, я бы даже сказал, самоконтролируется общей логикой. В общем плане прорисовывается иерархическая последовательность и только в исключительных ситуация эта иерархия нарушается, например при возникновении системной ошибки прекращается общий ход исполнения и от модуля Errors обработкой его события отправляется ответ клиенту. Не нужно полагать, что раз событие, то оно будет обрабатывать всеми подряд, во всяком случаи модули будут разрабатывать не идиоты, да и если я пишу модуль расширяющий что-то, то зацикливание могу осуществить, если напрямую вызову функции, которые расширяю (может не явно их), поэтому это должно по любому контролироваться, так как это сознательное создание цикла или рекурсии. Тут ты можешь зацепиться за мелкие детали и продолжить спор :))

С общими данными запроса всё просто. Запрос – это фактически вызов одного действия и указание в юрле, что требуется клиенту в ответ получить. Так вот, фактически с данными запроса не будут работать все модули подряд. В обще, в данный момент серьезно прорабатываются понятие действия в движке (до этого всё время было уделено модулю данных). Так вот, о чём это я – о том, что возможно данные $_POST будут просто являться параметрами действия и не будут оставаться в модуле Request в «контейнере данных», а этот контейнер будет передаваться действию.</description>
		<content:encoded><![CDATA[<p>В данном случае, события это всего лишь неявный вызов методов. Это необходимо для свободного подключения новых модулей и наращивания функционала системы. Тут меняется отношение между существующими модулями (будем считать системой) и новыми подключаемыми. За счет событий система открыта для расширения, нужно только в новом модуле указать, какие действия расширять, т.е. выполнить регистрацию на событие, а системе не нужно догадываться, что там ещё могут к ней прикрутить, только предоставить вызовом события возможность что-то прикручивать.</p>
<p>При возникновении события вызываются методы, которые зарегистрированы на данное событие. Обработчик события может возвращать результат и этот результат можно использовать там, где событие вызвано, например, перед чтением данных выполняется проверка возможности чтения, там уже генерируется событие, обработкой которого будет осуществлен контроль доступа модулем контроля доступа.</p>
<p>Конечно, я согласен с тем, что если всю логику системы пересвязать событиями, то получится не то что коллизия… Не пойму только, почему вы события сравниваете с GOTO, ведь неслабую запутанность можно реализовать и прямым вызовом функций, которые вызывают другие, а следующие ещё каике-то, а потом зацикливание, рекурсия&#8230;</p>
<p>Нужно понимать, что в данной системе модули не есть некий набор подобного функционала, как в существующих движках, типа модуль каталога и новостной ленты принципиально ничем не отличаются. В этой CMS каждый модуль это уникальное звено и связывание этих звеньев, я бы даже сказал, самоконтролируется общей логикой. В общем плане прорисовывается иерархическая последовательность и только в исключительных ситуация эта иерархия нарушается, например при возникновении системной ошибки прекращается общий ход исполнения и от модуля Errors обработкой его события отправляется ответ клиенту. Не нужно полагать, что раз событие, то оно будет обрабатывать всеми подряд, во всяком случаи модули будут разрабатывать не идиоты, да и если я пишу модуль расширяющий что-то, то зацикливание могу осуществить, если напрямую вызову функции, которые расширяю (может не явно их), поэтому это должно по любому контролироваться, так как это сознательное создание цикла или рекурсии. Тут ты можешь зацепиться за мелкие детали и продолжить спор <img src='http://boolive.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> )</p>
<p>С общими данными запроса всё просто. Запрос – это фактически вызов одного действия и указание в юрле, что требуется клиенту в ответ получить. Так вот, фактически с данными запроса не будут работать все модули подряд. В обще, в данный момент серьезно прорабатываются понятие действия в движке (до этого всё время было уделено модулю данных). Так вот, о чём это я – о том, что возможно данные $_POST будут просто являться параметрами действия и не будут оставаться в модуле Request в «контейнере данных», а этот контейнер будет передаваться действию.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Автор: EugeneS</title>
		<link>http://boolive.ru/createcms/architecture#comment-182</link>
		<dc:creator>EugeneS</dc:creator>
		<pubDate>Wed, 17 Jun 2009 21:38:34 +0000</pubDate>
		<guid isPermaLink="false">http://boolive.ru/?p=80#comment-182</guid>
		<description>P.S.: А поскольку в прямом смысле слова глобальных переменных нет, то глобальными переменными будут аспекты более выского порядка - сущности аутентификаии, контента, еще чего-то - рано или поздно но риск есть, ходить осторожно - одно, а быть застрахованным - другое

Так что в этой архитектуре, я боюсь, один из философов Дейкстры рискует остаться без обеда - потому всегда все вилки будут заняты по разным причинам</description>
		<content:encoded><![CDATA[<p>P.S.: А поскольку в прямом смысле слова глобальных переменных нет, то глобальными переменными будут аспекты более выского порядка &#8212; сущности аутентификаии, контента, еще чего-то &#8212; рано или поздно но риск есть, ходить осторожно &#8212; одно, а быть застрахованным &#8212; другое</p>
<p>Так что в этой архитектуре, я боюсь, один из философов Дейкстры рискует остаться без обеда &#8212; потому всегда все вилки будут заняты по разным причинам</p>
]]></content:encoded>
	</item>
	<item>
		<title>Автор: EugeneS</title>
		<link>http://boolive.ru/createcms/architecture#comment-181</link>
		<dc:creator>EugeneS</dc:creator>
		<pubDate>Wed, 17 Jun 2009 21:33:58 +0000</pubDate>
		<guid isPermaLink="false">http://boolive.ru/?p=80#comment-181</guid>
		<description>AddHandler(Event=Calc, Function=SecondMethod)  # В упрощенной форме зарегали событие 
												  # calc на вызов SecondMethod()
   
   $n = 4  # состояние системы перед 
   $i = 2  # моментом исполнения кода ниже
   ...
   
   
   FirstMethod{          # некий код некое место которое сейчас выполняется
      if $n&gt;0 and $i&gt;0 {
	     EventSend(calc)    # сгенерилось событие - &quot;мы готовы считать&quot;, 
                            # ничего не зная кто и как его обрабатывает в уже данный момент
         
         $n / $i            # ожидали деления 4/2, а получили 0/2 и Error dev 0, 
                            # этот участок кода был к этому не готов к этому, потому что не знал КАК и КТО
                            # обрабатывает это событие
                         }
                        
   }
   
   EventSend{          #  Событийный движок - делает свое &quot;грязное&quot; дело 
                       #  вызывает ежемоментно методы зареганые на событие :)
       if calc{
				  SecondMethod()   # просили - получайте
				     }
   }
   
   
   SecondMethod{
            $n = 0   # Допустим этот метод обычно всегда сбрасывает 
					 # в нулевое значение переменную $n
					 # но тогда этот метод работая с $n должен 100% знать КТО, КОГДА,
					 # и при КАКИХ обстоятельствах работает с $n, чтобы не допустить ошибки
					 # по возвращению из обработчика событий
					 # То есть один метод должен знать обо всех методах 
					 # которые так или иначе затрагивают общие данные - а общие данные всегда будут
					 # и аутентификации и контент, и состояния и пр.
					 
   }</description>
		<content:encoded><![CDATA[<p>AddHandler(Event=Calc, Function=SecondMethod)  # В упрощенной форме зарегали событие<br />
												  # calc на вызов SecondMethod()</p>
<p>   $n = 4  # состояние системы перед<br />
   $i = 2  # моментом исполнения кода ниже<br />
   &#8230;</p>
<p>   FirstMethod{          # некий код некое место которое сейчас выполняется<br />
      if $n&gt;0 and $i&gt;0 {<br />
	     EventSend(calc)    # сгенерилось событие &#8212; &#171;мы готовы считать&#187;,<br />
                            # ничего не зная кто и как его обрабатывает в уже данный момент</p>
<p>         $n / $i            # ожидали деления 4/2, а получили 0/2 и Error dev 0,<br />
                            # этот участок кода был к этому не готов к этому, потому что не знал КАК и КТО<br />
                            # обрабатывает это событие<br />
                         }</p>
<p>   }</p>
<p>   EventSend{          #  Событийный движок &#8212; делает свое &#171;грязное&#187; дело<br />
                       #  вызывает ежемоментно методы зареганые на событие <img src='http://boolive.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
       if calc{<br />
				  SecondMethod()   # просили &#8212; получайте<br />
				     }<br />
   }</p>
<p>   SecondMethod{<br />
            $n = 0   # Допустим этот метод обычно всегда сбрасывает<br />
					 # в нулевое значение переменную $n<br />
					 # но тогда этот метод работая с $n должен 100% знать КТО, КОГДА,<br />
					 # и при КАКИХ обстоятельствах работает с $n, чтобы не допустить ошибки<br />
					 # по возвращению из обработчика событий<br />
					 # То есть один метод должен знать обо всех методах<br />
					 # которые так или иначе затрагивают общие данные &#8212; а общие данные всегда будут<br />
					 # и аутентификации и контент, и состояния и пр.</p>
<p>   }</p>
]]></content:encoded>
	</item>
</channel>
</rss>

