Выпуск релиз-кандидата 0.9 RC

01.03.2013

В этом релизе мы начали приведение кода в соответствие современным стандартам, уменьшили связанность объектов и обеспечили внедрение зависимости (dependency injection) через сеттеры.

СПИСОК ИЗМЕНЕНИЙ:

1. Написана собственная реализация Zend_Db_Select, повышенной производительности.

2.  Расширенный адаптер Zend_Db_Adapter_Mysqli вынесен из библиотеки Zend_Db, теперь он использует нашу реализацию Db_Select.

3. Проведена доработка кода ядра, уменьшена связанность объектов и количество статических методов.

4. Доработана IDE:

  • Добавлен редактор свойства icon, теперь иконку можно выбрать из списка:

  • Доработан компонент IDE  app.editWindow, добавлена ссылка на восточную панель и свойства:
    • hideEastPanel -  не отображать восточную панель (справа);
    • eastPanelCollapsed - восточная панель свернута по умолчанию.
  • Добавлены компоненты  TreePanel и TreeStore:

  • #244 исправлено - невозможно задать свойства  ProxyWriter;
  • #261 исправлено - редактор колонок, ошибка ввода title без подтверждения клавишей Enter;
  • исправлено редактирование свойств Proxy - убрана панель Events.

5. Доработан генератор интерфейса CRUD.

6. #234 Исправлено - история сохраняется, даже если она отключена в настройках объекта ORM.

7. Исправлен автоматический генератор интерфейсов - неверный формат даты у поля типа DateTime.

8. Исправлена ошибка сохранения boolean false значения Db_Object при включенном strict-режиме работы MySQL.

9. Добавлен лог ошибок сохранения Db_Object.

10. Переработан механизм формирования url-адресов в дизайнере интерфейсов, теперь используются replace-шаблоны. Это решение делает возможным интеграцию сторонних модулей и значительно упрощает решение проблемы установки платформы в директорию, отличную от  document root (будет реализовано в одном из следующих выпусков).

11. Переработан автозагрузчик классов, увеличена производительность.

12. Настройки адаптера подключения к базе данных перенесены в файлы конфигурации.

13. Добавлено около 40 юнит-тестов.

14. Доработан интерфейс управления ORM, теперь возможен просмотр и редактирование данных:

15. Доработано ядро ОRМ, объекты могут храниться на разных серверах, достаточно переопределить коннектор к базе данных в модели (разнесение объектов подразумевает полное перемещение объектов заданного типа в другую базу данных, горизонтальный шардинг в планах).

16. Доработан ORM Builder,  теперь ошибки перестроения базы данных будут отображаться в окне сообщения об ошибке (интерфейс управления ORM).

17. Добавлен валидатор конфигураций объектов, ссылки на несуществующие объекты теперь подсвечиваются:

18. Добавлена поддержка внешних ключей, пока в экспериментальном режиме. Включение функциональности производится в config/main.php, foreign_keys => true (по умолчанию отключено). Внешние ключи строятся для объектов, использующих общий адаптер подключения к базе данных, общую базу данных и хранилище  InnoDb. Foreign Key используется только для полей с типом «ссылка на объект».

19. Приведено в соответствие строгому стандарту:

  • поля типа  text, longtext  и т.д  не могут иметь DEFAULT-значения (если поле не обязательное, оно будет  NULL);
  • необязательная ссылка на объект теперь в качестве пустого значения имеет NULL, а не 0.

20. Доработано редактирование объектов, теперь разрешено менять тип (с версионным контролем / без версионного контроля) для существующих объектов.

21. Исправлена ошибка, связанная с возможностью вызова сохранения объекта Db_Object  через  API, минуя проверку наличия требуемых полей, что в  STRICT-режиме MySQL приводило к ошибке.

22. Доработаны словари локализаций, теперь они используют «ленивую» загрузку.

23. Доработан интерфейс управления модулями публичной части, теперь для роутинга доступны вложенные контроллеры (функциональность поддерживается только роутингом на основе модулей).

24. Доработан компонент app.SelectWindow, создан файл конфигурации скриптов, подключаемых на всех страницах  административной панели.

25. Класс User теперь включает в себя функционал класса  User_Admin, последний объявлен как  deprecated и оставлен для поддержки совместимости версий. API стало более прозрачным.

26. Доработана статистика  ORM - учтена особенность выполнения команды  Show table status  для таблиц  innodb  (не выдает реальное количество строк).
The official MySQL 5.1 documentation acknowledges that InnoDB does not give accurate statistics with SHOW TABLE STATUS. SHOW TABLE STATUS does not give accurate statistics on InnoDB tables, except for the physical size reserved by the table. The row count is only a rough estimate used in SQL optimization.
Теперь количество строк innodb-таблиц считается верно, отдельными запросами.

27. Автозагрузчик приведен в соответствие стандарту PSR0, теперь возможно использование  namespace.

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

  • классы;
  • объекты ORM;
  • языковые словари;
  • файлы конфигурации;
  • темы оформления;
  • темплейты (возможны без использования тем);
  • статический контент (картинки);
  • файлы JS;
  • проекты IDE;

Реализован механизм распределения прав доступа к сторонним модулям.
Модуль сторонних расширений пока является экспериментальным.
В ближайшее время мы планируем расширить возможности и добавить поддержку сторонних компонент и классов дизайнера интерфейса.
Поддержка сторонних модулей позволит разработчикам с легкостью делиться своими решениями.
Так же мы планируем открыть секцию загружаемых дополнений от команды  DVelum.
В связи с этим появилось несколько аспектов обратной несовместимости:

Роутинг
Роутеры теперь не имеют статических методов, они так же являются объектами, отвечающими за маршрутизацию запросов,  могут вычислить путь к функциональности или модулю. Ссылка на роутер теперь есть в защищенных свойствах контроллеров. Для восстановления работы контроллеров необходимо заменить похожие конструкции:

class News_Controller extends Frontend_Controller
public function indexAction()
 $url = Frontend_Router::findUrl(array(‘news’,’item’));
$url = $this->_router->findUrl(array(‘news’,’item’));
 ...  

Не стоит передавать сложные объекты в  шаблоны, передавайте данные.
Сложные объекты долго сериализуются для валидации кэша, имеющие в себе closure (замыкания) вовсе не сериализуются.

Изменился роутинг административных контроллеров, теперь возможно подключение вложенных контроллеров как модулей и назначение прав доступа к ним. Так же это изменение позволяет подключать скачиваемые сторонние модули. Еще одна особенность - контроллеры административных модулей теперь не привязаны к объектам  ORM, как это было ранее.

Эти изменения привели к несовместимости списка подключенных модулей. Ситуацию легко исправить, добавив в  backend_modules.php дополнительную опцию class, в которой необходимо указать имя подключенного класса, например:

...
'Page' =>
array (
	'dev' => false,
	'active' => true,
	'title' => 'Страницы',
	'designer' => '',
	'class'=>'Backend_Page_Controller'
),
 ...

Триггеры

Теперь триггеры так же являются объектами, для исправления несовместимости используйте boolean-методы (удалите ключевое слово static при определении методов).

Application

Методы Application::getConfig, Application::getStorage, Application::getDataCache, Application::getSystemCache, Application::getDbConnection помечены как устаревшие и будут удалены в последующих релизах.

Controller

Перестали быть статическими методы:

  • getPostedData;
  • insertObject;
  • updateObject;
  • unpublishObject;
  • getStagingUrl.

Model

_queryAddFilters изменен на queryAddFilters, изменен тип принимаемых параметров, перестал быть статическим.

Добавлены разделы документации:

Рецепты:

Улучшена производительность системы:

Download DVelum 0.9 RC