Организация ядра и инсталятора - Visavi.net https://visavi.net/ RSS - Visavi.net https://visavi.net/assets/img/images/logo_small.png RSS - 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> &gt; но судя из твоего поста довольно много делать придется ) и так каждый раз?<br> <br> а с системами контроля версиями ПО знаком?)<br> <br> <em><span style="font-size:x-small">Добавлено через 03:11 сек.</span></em><br> Мне никогда не приходится писать что-либо повторно, благо существует git и грамотная система переопределения кода в кохана + MC. https://visavi.net/topics/28047/476428 Организация ядра и инсталятора Ant0ha Sat, 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">&lt;?php if ( ! Modules&#58;&#58;is_installed($module)) { exit(&#039;Необходимо установить модуль &#039;. $module); } </pre> <br> Это всё, включая инсталляторы модулей, у меня реализовано в MC PRO, где используется один из распространенных фреймворков. https://visavi.net/topics/28047/476419 Организация ядра и инсталятора Ant0ha Sat, 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 Организация ядра и инсталятора Ant0ha Sat, 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> Для решения первой задачи и используется унифицированный интерфейс класса ресурсов. На пример класс ресурсов &quot;Гостевая книга&quot; это все возможные гостевые книги. Этот интерфейс содержит основные опреации, такие как добавление сообщения, удаление онного и его редактирование. <br> Для простой замены одного ресурса другим (одна гостевая книга заменяется другой) необходимо чтобы их контроллеры реализовывали интерфейс класса ресурсов &quot;Гостевая книга&quot; (ведь центральный контроллер не должен зависить от конкретной реализации гостевой книги). 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 Не особо понял, как модули должны &quot;знать друг о друге&quot;, но, как я понял, по сути модули могут принадлежать определённому пользователю. Верно? Так где-то в бд в таблице пользователя вписывать, включен определённый модули или нет, назвав колонку а-ля 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&amp;id=674" target="_blank" rel="nofollow">http://www.ruseller.com/lessons.php?rub=37&amp;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 &gt; Модуль имеет собственный инсталятор<br> достаточно в каждый модуль запихивать 3 файла<br> 1) вызываемый при установке<br> 2) при удалении<br> 3) при обновлении.<br> <br> &gt; И как организовать взаимодействие модулей?<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