Шаманград

Форум Клуба программистов
Текущее время: 08.09.2010 05:48:34

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
 Заголовок сообщения: Компонентный подход
СообщениеДобавлено: 04.10.2008 10:27:50 
Не в сети
Автоответчик
Автоответчик

Зарегистрирован: 01.07.2005 22:33:14
Сообщения: 2535
Откуда: Красногвардейское
ОС: Arch Linux
Имя: Илья Аверков
Кстати, возможно, имеет ещё смысл минимизировать зависимости между различными компонентами системы, либо сделать их опциональными. В частности, в моих последних проектах генератор-обработчик форм жёстко связан с драйвером БД, но ничто не мешает сделать эту зависимость опциональной, то есть, не меняя интерфейса, просто передавать конструктору обработчика форм NULL вместо ссылки на рабочий экземпляр класса взаимодействия с БД. Обработчик прекратит хранение дополнительных form_id в БД, но работоспособность сохранится. Вообще, если писать универсальный framework для написания веб-приложений, на мой взгляд, стоит ещё подумать о возможности опционального использования драйвера БД. В частности, можно застаить модуль сеансов использовать стандартные сессии PHP в случае, если ему не предоставлен доступ к БД и так далее. Это даст возможность использовать данный framework для любых веб-приложений, в том числе не работающих с БД (хотя, конечно, вопрос об актуальности таких веб-приложений открыт, но это уже тема для отдельного разговора).

_________________
Изображение


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Формы - настало время систематизировать идеи
СообщениеДобавлено: 04.10.2008 13:16:13 
Не в сети
Автоответчик
Автоответчик
Аватара пользователя

Зарегистрирован: 03.12.2005 16:42:40
Сообщения: 1821
ОС: Linux: openSUSE
Имя: Алексей
WatchRooster писал(а):
Кстати, возможно, имеет ещё смысл минимизировать зависимости между различными компонентами системы, либо сделать их опциональными.

Согласен, именно в этом духе я работаю над новой веткой WSCore 2.0. Минимизировать зависимости между компонентами. Ядро будет либо минимальным, либо его вообще как такового не будет, а будет просто набор взаимозаменяемых и/или опциональных компонентов.

Из личной переписки:
Цитата:
Я планирую дальше развивать в WSCore компонетный подход, я планирую переходить
от "монолитного" ядра в пользу, так сказать "микроядра" или даже вообще
на "безядерность". Возможно WSCore просто превратиться в набор компонент,
которые можно повторно использовать.

Так, например, обработчик форм скорее всего будет просто отдельным компонентом
(классом). Я даже допускаю, что может быть реализованно несколько разных
обрабочиков форм. Разные обработчики форм могут использоваться в разных
проектах, и даже в одном проекте может использоваться несколько обработчиков
форм (скорее всего так будет в PMS, т.к. разом перевести всё на новый
обработчик почти нереально).

Шаблонизатор - тоже будет отдельным компонентом (один или скорее всего два
класса). И тут тоже, думаю, что в приципе может быть несколько реализаций. А
в каждом конкретном проекте использовать то, что больше подходит.

Каждый такой компонент будет небольшим и решать свою маленькую задачу. Чтобы
упростить внедрение того или иного компонента в проект, желательно
минимизировать число зависимостей, чтобы каждый компонент работал по
возможности более автономно. Если где-то от зависимостей избавиться не
получается, то можно использовать "интерфейсы".

Интерфейс в более широком понимании, чем абстрактный класс. Интерфейс это
набор соглашений, протокол, если хочешь, по использованию какого-либо модуля
или компонента. Так например, если модуль А требует интерфейс Interface1, то
он будет работать с любым модулем Б, реализующем Interface1. Модуль Б может
реализовать несколько интерфейсов и тем самым обеспечивать поддержку
множеству других модулей.

Пример, новая версия idx использует интерфейс IWSCoreDB2. Если класс драйвера
БД реализует такой интерфейс, то idx может использоваться с таким драйвером
БД. Интерфейс не обязан обявлять все возможности драйвера ядра, и IWSCoreDB2
например не регламентирует процедуры создания/удаления таблиц, только
процедуры выборки и обновления данных.


Цитата:
на мой взгляд, стоит ещё подумать о возможности опционального использования драйвера БД. В частности, можно застаить модуль сеансов использовать стандартные сессии PHP в случае, если ему не предоставлен доступ к БД и так далее. Это даст возможность использовать данный framework для любых веб-приложений, в том числе не работающих с БД (хотя, конечно, вопрос об актуальности таких веб-приложений открыт, но это уже тема для отдельного разговора).

Вместо этого я предлагаю использовать интерфейсы (см. выше цитату). Так, можно определить интерфейс ISessionManager, который определяет набор методов для работы с сессиями, но сама реализация зависит от "провайдера" (класса реализующего интерфейс), который уже либо хранит данные в БД, файлах, использует PHP-сессии или как-то ещё. Вместо того, чтобы делать один монстроподобный класс, который умеет хранить сесии и в БД и в файлах и использовать PHP-сессии, мы пишем три маленьких класса реализующие один интефейс. Один класс хранит в БД, другой в файлах, третий использует PHP-сессии. Каждый класс маленький и лекго поддается разработке и сопровождению. Если нужно реализовать поддержку нескольких механизмов обработки сессий, то мы просто в ключаем в проект несколько классов, а выбор того или иного механизма выбирается выбором класса на этапе конструирования менеджера сессий.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Компонентный подход
СообщениеДобавлено: 13.01.2010 17:12:22 
Не в сети
Автоответчик
Автоответчик

Зарегистрирован: 01.07.2005 22:33:14
Сообщения: 2535
Откуда: Красногвардейское
ОС: Arch Linux
Имя: Илья Аверков
На мой взгляд наши текущие разработки всё ещё можно сильно совершенствовать именно в этом направлении. Взять, к примеру, авторизацию пользователей. В тех же демонах (postfix, ejabberd) список пользователей может храниться в БД (причём с тонкой настройкой столбцов), в LDAP, можно использовать UNIX-аккаунты и так далее. Данные веб-приложений тоже неплохо бы абстрагировать от MySQL и иметь возможность помещать их куда угодно без особых изменений.

Задумался об етом из-за того, что хотел по-быстрому написать небольшой движок для сайта jsmart (интегрированный с ejabberd — чтобы юзеры могли менять пасс, аватар, править вкарды итп).

_________________
Изображение


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Компонентный подход
СообщениеДобавлено: 20.01.2010 21:24:49 
Не в сети
Автоответчик
Автоответчик
Аватара пользователя

Зарегистрирован: 03.12.2005 16:42:40
Сообщения: 1821
ОС: Linux: openSUSE
Имя: Алексей
да, я тоже над этим думал, когда конфигурировал postfix+dovecot+ldap


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
[ Time : 0.200s | 13 Queries | GZIP : Off ]