BugzillaORM

У Bugzilla половина коду в шаблонах, половина на основі напів-ORM'а Bugzilla::Object. Більшість — говнокод. З одного боку - ORM би туди, було б класно, АЛЕ! ORM мало, і потрібний не він! Майже всі існуючі ORM-движки (крім хіба що Django Models) - це просто об'єктний інтерфейс до бази даних. А потрібне якесь об'єктне ядро, яке б дозволяло створювати свої об'єкти, з полями різних типів, у тому числі і тими, що посилаються на інші об'єкти, з можливістю приписування спеціальних особливостей полям, із загальними механізмами зберігання історії, розсилки повідомлень, системою прав та з автоматичним базовим CRUD -інтерфейс.

Ідеї ​​створення об'єктного ядра

Об'єкти в Bugzilla

Причому, ясна річ, якщо баг належить до деякого продукту (через компонент), то його версія, milestone, agreement повинні належати до того ж продукту. Зараз у Bugzilla це реалізується так — для кожної сутності, пов'язаної з багом, у базі є поле, а для обмеження значень полів поля робляться залежними від інших полів. Через це там купа милиць і по суті повісити залежність на відмінне від поля «продукт» поле неможливо.

Мінуси поточної реалізації

Чим погана поточна багзильна реалізація цього добра?

Дуже просто: майже ні хрону не налаштовується - не можна ні додати свої можливості, ні відрубати непотрібні вбудовані. Бо все жорстко та криво (хардкод). А ще:

Проект супер-об'єктного-ядра

Що пропонується зробити:

Таким чином наш трекер перетвориться, по суті, на модульний додаток, побудований навколо дуже прокачаного автоінтерфейсу полів та об'єктів. Звичайно, це вже не Bugzilla жодного разу, зате чимось схоже на Roundup - "конструктор трекерів". Однак і з ним відмінностей багато – roundup не вмієзалежних селект-полів, модель задається у коді, права доступу слабкі, пошук слабкий.

Оновлення моделі

Оновлення бази багзильське (тупа послідовність операцій):

  • (+) Очевидний порядок оновлень, немає проблем із їхніми залежностями один від одного (нові просто дописуються в кінець, порядок завжди правильний)
  • (-) Не перевіряється, чи коректна схема БД після оновлень
  • (-) Оновлення задаються саме для SQL БД, а не для метамоделі
  • (-) Не дуже гарна онучка у функції оновлення БД

Оновлення нашої бази:

Виходить, що ядро ​​моделі складається з наступних таблиць: