Поиск:

Ответ в темуСоздание новой темы Создание опроса
> CMF или подобие... 
:(
    Опции темы
Wowa
Дата 17.2.2008, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

Репутация: нет
Всего: 290



Цитата(ImamMahdi @  15.2.2008,  13:58 Найти цитируемый пост)
Я вообще считаю, ядро должно состоять из одного базового класса, в которому не нужно ни интерфейсов, ни абстракция.

У меня тоже такие мысли.. Пока не вижу необходимости излишне усложнять.
PM WWW   Вверх
CyClon
Дата 25.2.2008, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 3.12.2005

Репутация: нет
Всего: 4



Хм... По мне так, ядро - это один файлик, например /kernel/kernel.php...

У меня так:

Код
<?php

require_once 'kernel/config.php';

function __autoload($class_name)
{
    $class_name = str_replace('_', '/', $class_name);
    require_once 'kernel/classes/' . $class_name . '.class.php';
}


Ну, и далее пляшем от этого. Т.е. в ядре в основном иклюдятся конфиги/классы и так далее. Не понимаю, какие функции должно еще выполнять ядро. Работа с бд - уже дело определенного класса, шаблонизатор - то же самое. Логгер или еще что-то - туда же smile

Как считаете? Или хотя бы опишите, что ваш класс ядра будет делать, кроме как инлюдить конфиги.


--------------------
user posted image
PM   Вверх
ImamMahdi
Дата 29.2.2008, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 21.6.2007

Репутация: нет
Всего: нет



Цитата(CyClon @ 25.2.2008,  10:12)
Как считаете? Или хотя бы опишите, что ваш класс ядра будет делать, кроме как инлюдить конфиги.

Он больше ничего и не должен делать. Просто обеспечивать взаимодействие между драйверами и модулями. Котролировать что должно быть подключено, что далжно быть отработано.
PM MAIL   Вверх
Sardar
Дата 29.2.2008, 14:57 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: нет
Всего: 317



"Ядро" в PHP - штука IMHO бессмысленная.

Цитата(ImamMahdi @  29.2.2008,  11:28 Найти цитируемый пост)
Просто обеспечивать взаимодействие между драйверами и модулями.

О каком взаимодействии идёт речь? Любой класс, любая функция доступна штатными средствами (require/include), динамическая подзагрузка кода по требованию - это лишняя потеря производительности. Если указать require  константной строкой, то парсер ещё при первом проходе поднимет файл, а следовательно и кеш кда сохранит сразу полный имейдж, а не по сорцы кусочкам.

Любой копонент публикует свой функционал в виде статических методов "входного" класса (фасад). По любому ты знаешь, что используешь. Взаимозаменяемые по функционалу модули должны описываться общими интерфейсами (в смысле сущности interface). Движок PHP отвечает за всё остальное.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
ImamMahdi
Дата 29.2.2008, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 21.6.2007

Репутация: нет
Всего: нет



Цитата(Sardar @  29.2.2008,  14:57 Найти цитируемый пост)
О каком взаимодействии идёт речь?

Лень много писать. Почитайте как взаимодействуют уровни в TCP/IP протоколе. Мб станет ясно
PM MAIL   Вверх
Sardar
Дата 29.2.2008, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: нет
Всего: 317



Цитата(ImamMahdi @  29.2.2008,  14:05 Найти цитируемый пост)
Почитайте как взаимодействуют уровни в TCP/IP протоколе.

Интересное сравнение...  быть может я путаю, под взаимодействием считается концептуальные вещи, в коде же само ядро - лишь набор коментариев (guide-line)? ;-)

Хотя пример не удачный, IP оборачивает TCP, добавляя понятие адреса (+сам протокол адрсации, TTL и т.д.), второй же вводит понятие порта (+ понятия коннекта, sequence и т.д.). Могу расписать побайтово, т.к. это был один из моих проектов (сетевуха на микроконтроллере). Корреляции с понятием "ядра" в этом топе не вижу...


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
ImamMahdi
Дата 29.2.2008, 15:17 (ссылка)    | (голосов:4) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 21.6.2007

Репутация: нет
Всего: нет



Ясно, что ясно не стало. Нашелся лишь повод кинуть "понт"

Это сообщение отредактировал(а) ImamMahdi - 29.2.2008, 15:26
PM MAIL   Вверх
solenko
Дата 29.2.2008, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1473
Регистрация: 15.1.2006
Где: Украина

Репутация: 1
Всего: 67



Цитата

О каком взаимодействии идёт речь? 

Например о сообщеиях типа "авторизация пользователя", "изменение контента" etc.
Конечно, если нет общего понятия контента, то нет и необходимости в большинстве этих сообщений. Правда тогда и наповедение этого контента можно повлиять только если залезть в исходники. Да и систематизировать те же блоги сможет только модуль "блог" и никто больше.
То, как я вижу это пытался изложить в  Общая концепция Vingrad CMS
Цитата

Любой класс, любая функция доступна штатными средствами (require/include), динамическая подзагрузка кода по требованию - это лишняя потеря производительности.

А отсутсвие подгрузки по требованию -- статичный набор модулей.

Цитата

Взаимозаменяемые по функционалу модули должны описываться общими интерфейсами (в смысле сущности interface).

Вот и добрались до самого интерестного. "Ядро" и должно определять эти интерфейсы.

Это сообщение отредактировал(а) solenko - 29.2.2008, 17:17


--------------------
Ла-ла-ла-ла
Заметьте, нет официального подтверждения, что это не просто четыре слога.
PM MAIL WWW ICQ Skype   Вверх
Sardar
Дата 29.2.2008, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: нет
Всего: 317



Цитата(solenko @  29.2.2008,  16:04 Найти цитируемый пост)
Например о сообщеиях типа "авторизация пользователя", "изменение контента" etc.

Смотря как реализовать. Пусть:

Код
$user = User::currentUser();
$user->checkPermission('gallery.upload'); //throws SecurityException

if($request->existsParam['commit']) {
   $img= Gallery::newImageFromFile($_FILES['imgupload']['tmp_name']); //throws NotFoundException
   $img->name = $request['imgname']; //throws IllegalValueException
   //...
} else {
  //генерим формы etc.
}

Как такового ядра (код) не существует, есть лишь принцип дизайна, которому следуют все компоненты.

Цитата(solenko @  29.2.2008,  16:04 Найти цитируемый пост)
А отсутсвие подгрузки по требованию -- статичный набор модулей.

А чем плох статичный набор модулей? При использовании кода ты точно знешь, какой интерфейс ты собираешся использовать (в Java к тому же это на этапе компиляции проверить можно). Реализация набора интерфейсов может изменятся на момент исполнения, ты же не привязан к конкретному коду. Интерфейс - контракт, что и как ты хочешь использовать.

Цитата(solenko @  29.2.2008,  16:04 Найти цитируемый пост)
Вот и добрались до самого интерестного. "Ядро" и должно определять эти интерфейсы.

Как при проектировке "ядра" узнать какие интерфейсы будут в компонентах системы? Слишком абстрактные интерфейсы типа .get/.set и .callByName - штука глупая в PHP.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
solenko
Дата 29.2.2008, 20:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1473
Регистрация: 15.1.2006
Где: Украина

Репутация: 1
Всего: 67



Цитата

А чем плох статичный набор модулей? При использовании кода ты точно знешь, какой интерфейс ты собираешся использовать (в Java к тому же это на этапе компиляции проверить можно). Реализация набора интерфейсов может изменятся на момент исполнения, ты же не привязан к конкретному коду. Интерфейс - контракт, что и как ты хочешь использовать.

Я бы не брал на себя отвтственность за решение "пользователю понадобится это и только это"
Вы osCommerce случайно не проовали расширять?) Он спроектирован так, что добавлять можно только модули оплаты и доставки. Все остальное лепят программисты путем изменения core исходников. Мягко говоря очень неудобно, не говоря уже о user friendly. 
Цитата

Как при проектировке "ядра" узнать какие интерфейсы будут в компонентах системы?

Вы читали то что я предлагал в соседней ветке? Я предлагал вынести в ядро некоторые базовые понятия. В частности, такие как контент, форма, пользователь. 
Кроме того, я считаю, что система должна быть event-ориентированной, т.е. каждый модуль может добавить листенер на core объект (контент, форма, пользователь) и, соответственно, породить такое событие. Т.е. если есть некий модуль, занимающийся... ну например блогом и модуль, который в этот блог добавляет маааленькую фичу (например добавление поля со ссылкой), то достаточно обработать события (form, load, save) контента (blog) и выполнить действия.
 Также должна быть возможность регестрировать новые виды событий (например модуль оплаты товара должен регестрировать событие "оплата завершена").


--------------------
Ла-ла-ла-ла
Заметьте, нет официального подтверждения, что это не просто четыре слога.
PM MAIL WWW ICQ Skype   Вверх
Sardar
Дата 29.2.2008, 22:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: нет
Всего: 317



Цитата(solenko @  29.2.2008,  19:12 Найти цитируемый пост)
? Я предлагал вынести в ядро некоторые базовые понятия. В частности, такие как контент, форма, пользователь. 

Всё, понял, за ядро принимаем набор базовых компонент, хотя и не обязательно "совершенно необходимых" (к примеру юзер не везде нужен). Просто было предложение:

Цитата(ImamMahdi @  29.2.2008,  11:28 Найти цитируемый пост)
Просто обеспечивать взаимодействие между драйверами и модулями.

Было интересно о каком взаимодействии идёт речь. Жаль что мысль испарилась вместе с автором...

Цитата(solenko @  29.2.2008,  19:12 Найти цитируемый пост)
Я бы не брал на себя отвтственность за решение "пользователю понадобится это и только это"

Так я не о пользовательском функционале говорю, а о банальной организации кода. Если есть несколько классов, способных выполнить задачу и им помощь некоторого общего "ядра" не требуется, то значит оно (ядро в понятии ImamMahdi) и не нужно вовсе...  То что ты называешь "ядром", обычно зовут коллекцией основных библиотек. К примеру тут (это лишь  кусочек движка, извиняюсь за жуткий код, писалось давно smile ), можно взять Cache::getCache(.. и использовать. То же самое для любого другого компонента системы, причин писать отдельный код для "взаимодействия" пока не вижу...






--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
solenko
Дата 1.3.2008, 16:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1473
Регистрация: 15.1.2006
Где: Украина

Репутация: 1
Всего: 67



Sardar, разница следующая -- программисты
библиотеки могут использовать
базовые классы должны

При запросе конкретной записи блога запрос не идет на модуль "блог". Он иет на модуль "контент", который формирует базовый объект контента и отправляет сообщение другим модулям, которые могут этот объект дополнить/изменить.

Т.е. в обход модуля "контент" работать просто нельзя.


--------------------
Ла-ла-ла-ла
Заметьте, нет официального подтверждения, что это не просто четыре слога.
PM MAIL WWW ICQ Skype   Вверх
Sardar
Дата 1.3.2008, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: нет
Всего: 317



Цитата(solenko @  1.3.2008,  15:33 Найти цитируемый пост)
Т.е. в обход модуля "контент" работать просто нельзя.

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

Ещё была идея полной анархии в движке smile
Представим есть дипетчер запросов, он ловит все запросы, согласно файлу-схеме (простой XML) находит и запускает "процесс". "Процесс" поднимает компоненты, как это прописано в его схеме, не вдаваясь в подробности зачем этот компонент и что он будет делать (к примеру инклюдит класс, вызывает статический метод). Компонент поднимает необходимые ресурсы (DataBase::getConnection(); Configuration::get(..); Output::registerProvider("me", $this) etc), затем сам делает полезную работу, формирует DOM дерево и ожидает пока его заберут. Он без понятия что будет с этими данными, как их отформатируют и куда вставят.

Общий шаблонизатор поднимает необходимые шаблоны, как это задал дизайнер, собирает страницу. Именно "схема процесса" описывает всех провайдеров данных и применение к ним шаблонов. Главный шаблон раскладывает инфу по местам на странице.

Заметим нет понятия ядра/проклейки, компоненты не обязательно должны знать друг о друге (хотя контент-генератор может сказать компоненте-главное-меню, что сейчас открыт такой то ресурс, хотя это можно реализовать и более элегантно). Все компоненты используют коллекцию базовых библиотек независимо друг от друга (один раз открытое БД соединение используется всеми). Удаление одного компонента не вызовет каких то проблем с зависимостями, можно даже Output удалить, все будут работать, только на выводе будет формироваться пустая страница (или страница ошибки, нет компонента-провайдера страницы).

2модератор - по моему пора разделить тему, последние посты во "Внутренняя организация движка" могут пойти.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
solenko
Дата 1.3.2008, 22:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1473
Регистрация: 15.1.2006
Где: Украина

Репутация: 1
Всего: 67



Sardar, ты с drupal не знаком (думаю стоит ли пытаться расписать)? Просто идея, которую я пытаюсь продвинуть, вышла как раз оттуда. Там как раз и есть почти полная анархия + базовое понятие node, что позволяет оперировать контентом единообразно.


Цитата

не всегда удобно если "контент" не достаточно гибок.

"контент" это несколько полей для сохранения в базу (title, user, дата создания и т.д.) + набор событий. То, что получается очень гибко доказано все тем же друпалом. Вот только он из за своей гибкости слишком уж  тяжеловесен -- хотелось бы найт золотую середину.


--------------------
Ла-ла-ла-ла
Заметьте, нет официального подтверждения, что это не просто четыре слога.
PM MAIL WWW ICQ Skype   Вверх
Sardar
Дата 1.3.2008, 22:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: нет
Всего: 317



Цитата(solenko @  1.3.2008,  21:04 Найти цитируемый пост)
думаю стоит ли пытаться расписать

Стоит, быть может по ходу мыслей придём к удобному дизайну/архитектуре движка. Возьми для этого новую тему smile


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Vingrad CMS | Следующая тема »


 




[ Время генерации скрипта: 0.0978 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.