Организация ядра и инсталятора - Visavi.net
https://visavi.net/
RSS - Visavi.nethttps://visavi.net/assets/img/images/logo_small.pngRSS - Visavi.net
https://visavi.net/
[email protected] (admin)[email protected] (admin)Sat, 11 Jan 2025 10:08:45 +0300Знаком. Кохана с система взаимодействует и подстраивается под изменения? ) врядли. Потому и ввел унифицированный интерфейс группы ресурсов
https://visavi.net/topics/28047/476434
Организация ядра и инсталятора АртурSat, 07 Jan 2012 23:20:51 +0400Сообщенияhttps://visavi.net/topics/28047/476434Модули могут работать с моделями и другими классами других модулей, без каких либо ограничений и разграничений, не вижу в ограничениях какого либо смысла.<br>
<br>
<em><span style="font-size:x-small">Добавлено через 01:28 сек.</span></em><br>
> но судя из твоего поста довольно много делать придется ) и так каждый раз?<br>
<br>
а с системами контроля версиями ПО знаком?)<br>
<br>
<em><span style="font-size:x-small">Добавлено через 03:11 сек.</span></em><br>
Мне никогда не приходится писать что-либо повторно, благо существует git и грамотная система переопределения кода в кохана + MC.
https://visavi.net/topics/28047/476428
Организация ядра и инсталятора Ant0haSat, 07 Jan 2012 23:15:44 +0400Сообщенияhttps://visavi.net/topics/28047/476428А как взаимодействие модуля с модулем и центр управления доступом? Моя реализация делает разграничение доступа прозрачным для любого модуля<br>
<br>
<em><span style="font-size:x-small">Добавлено через 02:25 сек.</span></em><br>
Я плохо знаком с коханой, но судя из твоего поста довольно много делать придется ) и так каждый раз?
https://visavi.net/topics/28047/476422
Организация ядра и инсталятора АртурSat, 07 Jan 2012 23:10:04 +0400Сообщенияhttps://visavi.net/topics/28047/476422Это можно запросто реализовать в той же кохане. Добавляешь модуль управления модулями, в котором делаешь класс Modules и добавляешь ему метод is_installed(), соответственно делаешь учет установленных модулей в БД (это у меня в движке реализовано). <br>
По твоему примеру, в инсталляторе модуля чата делаешь проверку зависимостей:<br>
<br>
<pre class="prettyprint"><?php
if ( ! Modules::is_installed($module))
{
exit('Необходимо установить модуль '. $module);
}
</pre>
<br>
Это всё, включая инсталляторы модулей, у меня реализовано в MC PRO, где используется один из распространенных фреймворков.
https://visavi.net/topics/28047/476419
Организация ядра и инсталятора Ant0haSat, 07 Jan 2012 23:06:55 +0400Сообщенияhttps://visavi.net/topics/28047/476419Вообще реализация очень удобная. Можно заставить модули требовать для нормальной работы другие модули. На пример модуль чата может потребовать установки модуля управления доступом и учетными записями, чтобы можно было использовать анкеты и тому подобное, при чем сам модуль чата содержит только логику работы чата, а для работы с анкетами он использует сторонний модуль
https://visavi.net/topics/28047/476406
Организация ядра и инсталятора АртурSat, 07 Jan 2012 22:46:05 +0400Сообщенияhttps://visavi.net/topics/28047/476406Распространенные фреймворки реализуют асинхронный интерфейс генеря его в пхп (иногда даже жс там генерится), а я сторонник разделения. Другие фреймворки, на мой взгляд, требуют инсталляцию модулей в ручную, а хотелось бы автоматически. Третье требуют очень строгой структуры модуля. В общем то не нашел такого, который бы удовлетворял все потребности. Собственно реализовать такое ядро задача не очень сложная, вот и решил не запорачиваться на спаривании сторонних библиотек и их переписывании, а воспользоваться своим решением<br>
<br>
<em><span style="font-size:x-small">Добавлено через 01:18 сек.</span></em><br>
Пишу довольно не маленький проект, который будет меняться чуть ли ни от клиента к клиенту, потому нужна максимальная гибкость и повторение кода
https://visavi.net/topics/28047/476400
Организация ядра и инсталятора АртурSat, 07 Jan 2012 22:32:39 +0400Сообщенияhttps://visavi.net/topics/28047/476400Брр.. А может проблема в постановке изначальной задачи? Что же ты такое пишешь чтоб изобретать такой велодвиг? Распространенные фреймворки не справляются?
https://visavi.net/topics/28047/476396
Организация ядра и инсталятора Ant0haSat, 07 Jan 2012 22:25:01 +0400Сообщенияhttps://visavi.net/topics/28047/476396<strong>Центр управления доступом.</strong><br>
Собственно сам является ресурсом, так как может быть легко заменен на другую реализуцию этого модуля. <br>
Отвечает за управление учетными записями, полномочиями, ролями, а так же аутентифицирует пользователя и информирует центральный контроллер о его правах. Очень удобным в этом модуле является то, что перед обращением к конкретному ресурсу, центральный контроллер спрашивает разрешение у центра управления доступом. Если для данного пользователя доступ к данной операции данного ресурса запрещен, центральный контроллер генерирует исключение.<br>
Отдельной плюшкой здесь является то, что с помощью центра управления доступом можно запретить обращаться конкретному пользователю к конкретной функции ресурса, а к другой разрешить. Так, на пример, можно разрешить писать сообщения в гостевой только зарегистрированным пользователям, а удалять их только модераторам.<br>
Плюсами этой структуры являются: <br>
1) Заменяемость ресурсов без изменения кода <br>
2) Расширение возможностей системы путем создания новых унифицированных интерфейсов классов ресурсов <br>
3) Простая и гибкая политика безопасности <br>
4) Независимость ресурса от центрального контроллера (достаточно реализовать контроллер ресурса) <br>
5) Полная независимость представления от модели и обратно (полностью заменить как представление так и модели без изменения кода).<br>
Как система реагирует на действия пользователей показано на этой модели <a href="http://upwap.ru/1944262" target="_blank" rel="nofollow">http://upwap.ru/1944262</a><br>
А теперь прошу снять с меня розовые очки и показать минусы. Громоздскость не в счет, ибо система вполне таки легкая, основным его элементом является центральный процессор, все остальное либо сторонние ресурсы (модули, бибилиотеки), либо визуализации.
https://visavi.net/topics/28047/476382
Организация ядра и инсталятора АртурSat, 07 Jan 2012 21:51:06 +0400Сообщенияhttps://visavi.net/topics/28047/476382Собственно решил остановиться на такой вот структуре: <br>
<a href="http://upwap.ru/1944260" target="_blank" rel="nofollow">http://upwap.ru/1944260</a><br>
Опишу каждый элемент отдельно. <br>
<strong>Предстваление и модель визуализации.</strong> <br>
Представим что мы работаем с таблицей, которую можно сортировать, добавлять в нее записи и удалять их. Вся эта таблица хранится в модели визуализации, а представление лишь отвечает за ее отображение пользователю. При этом ни представление, ни модель визуализации друг о друге не знают, а взаимодействуют на уровне событий, генерируемых пользователем.<br>
Плюсы этого подхода: <br>
1) Можно без проблем заменить одно представление другим, достаточно лишь изменить событийные связи (а иногда и без этого можно обойтись). На пример смена дизайна сайта или метода отображения таблицы. <br>
2) Данные могут быть обработаны без обращения к серверу. Так, сортировка таблицы не требует обращения к серверу, потому что это может быть выполнено самим JS в модели представления. <br>
3) Модель представления так же может быть легко заменена на другую. <br>
4) Визуализаций для одной модели представления может быть множество, на пример представление таблицы в форме таблицы и одновременно диаграммы.<br>
<strong>Ресурс.</strong><br>
Модуль выполняющий определенные задачи в системе. На пример полноценный модуль гостевой книги, который может взаимодейтсвовать с БД используя собственные классы или сторонние бибилиотеки. Единственно требование для ресурсов, это то, что для него должен быть реализован контроллер ресурса. То есть класс, который реализует интерфейс класса ресурсов (о классе ресурсов расскажу дальше) и управляет всем ресурсом по средствам обращения к этому интерфейсу.<br>
Важно понимать, что ресурсами могут быть только такие модули, которые не генерируют страницу по средствам echo, а используют более кашерные методы (речь как ни как идет о асинхронном взаимодействии с сервером). Если любой написанный вами модуль имеет контроллер (не сложно дописать) и не генерирует страницы, то его можно использовать в моей структуре.<br>
<strong>Центральный контроллер и унифицированный интерфейс класса ресурсов.</strong><br>
Центральный контроллер принимает команды от визуальной модели и направляет их соответствующему контроллеру ресурсов. Для решения этой задачи он должен знать: <br>
1) Какой интерфейс имеет контроллер ресурса <br>
2) Где находится контроллер ресурса <br>
Для решения первой задачи и используется унифицированный интерфейс класса ресурсов. На пример класс ресурсов "Гостевая книга" это все возможные гостевые книги. Этот интерфейс содержит основные опреации, такие как добавление сообщения, удаление онного и его редактирование. <br>
Для простой замены одного ресурса другим (одна гостевая книга заменяется другой) необходимо чтобы их контроллеры реализовывали интерфейс класса ресурсов "Гостевая книга" (ведь центральный контроллер не должен зависить от конкретной реализации гостевой книги).
https://visavi.net/topics/28047/476381
Организация ядра и инсталятора АртурSat, 07 Jan 2012 21:50:33 +0400Сообщенияhttps://visavi.net/topics/28047/476381Модули друг о друге не знают. Они знают только то, что дает ядро. На пример есть группа модулей - форум - ядро установило конкретный форум в качестве основного этой группы, а другой модуль знает только что существует такая группа и что с ней можно обращаться так то через ядро. Модуль обращается к ядру, а ядро уже определяет кому передать этот запрос. Если форум установлен, запрос передается ему, иначе не передается никому<br>
<br>
<em><span style="font-size:x-small">Добавлено через 00:49 сек.</span></em><br>
Как организовать разрезление прав доступа пользователей и модули я знаю, не решил еще как организовать хранение и установку самих модулей
https://visavi.net/topics/28047/474403
Организация ядра и инсталятора АртурWed, 04 Jan 2012 14:07:38 +0400Сообщенияhttps://visavi.net/topics/28047/474403Не особо понял, как модули должны "знать друг о друге", но, как я понял, по сути модули могут принадлежать определённому пользователю. Верно? Так где-то в бд в таблице пользователя вписывать, включен определённый модули или нет, назвав колонку а-ля module_*. При создании какого-то нового модуля дописывать колонку. Потом проверять по ключу module, какие модули подключены. <br>
Запутанно написал я, но должно быть понятно =)
https://visavi.net/topics/28047/474391
Организация ядра и инсталятора СтаниславWed, 04 Jan 2012 14:02:38 +0400Сообщенияhttps://visavi.net/topics/28047/474391Ну от полиморфизма я не отхожу. Я хочу использовать контролер для взаимодействия между модулями. Вот подходящая статья <a href="http://www.ruseller.com/lessons.php?rub=37&id=674" target="_blank" rel="nofollow">http://www.ruseller.com/lessons.php?rub=37&id=674</a> но там все в ручную ставится, а не хотелось бы
https://visavi.net/topics/28047/474376
Организация ядра и инсталятора АртурWed, 04 Jan 2012 13:52:09 +0400Сообщенияhttps://visavi.net/topics/28047/474376Да как угодно можно сделать. В зависимости все от того что тебе нужно. <br>
Вообще или мне кажется автор пытается ООП изобрести заново... Ибо то что в 5 посте хочется очень на полиморфизм смахивает. (Можно создать новый класс и переназначить ф-ции базового класса допустим).
https://visavi.net/topics/28047/474373
Организация ядра и инсталятора СаняWed, 04 Jan 2012 13:48:37 +0400Сообщенияhttps://visavi.net/topics/28047/474373Вот и я о том же. Зависимости можно организовать без автоматической установки, а просто с проверкой на наличие уже установленного необходимого ресурса (модуля). Сделать то можно, конечно не идеально, но хоть как то. По поводу установки я в той же части думаю<br>
<br>
<em><span style="font-size:x-small">Добавлено через 01:09 сек.</span></em><br>
По поводу зависимостей это проверка наличия необходимых модулей, а вопрос о том, как организовать вызов метода одного модуля из другого? Ведь модули ничего друг о друге не знают и общаются через ядро
https://visavi.net/topics/28047/474362
Организация ядра и инсталятора АртурWed, 04 Jan 2012 13:38:02 +0400Сообщенияhttps://visavi.net/topics/28047/474362> Модуль имеет собственный инсталятор<br>
достаточно в каждый модуль запихивать 3 файла<br>
1) вызываемый при установке<br>
2) при удалении<br>
3) при обновлении.<br>
<br>
> И как организовать взаимодействие модулей?<br>
зависимости. т.е. если 1 модуль требует два других, то их ставить автоматом. Но тут уже необходим единый репозиторий с модулями.<br>
<br>
Мне кажется не имеет смысла так всё усложнять.<br>
как надо с первого раза всё равно не сделаешь, а апгрейдить всё это дело будет тяжело...
https://visavi.net/topics/28047/474353
Организация ядра и инсталятора ктулхуWed, 04 Jan 2012 13:29:08 +0400Сообщенияhttps://visavi.net/topics/28047/474353