Изменения

BugzillaORM

3787 байтов добавлено, 09:09, 24 июля 2012
м
Обновление модели
Чем плоха текущая багзильная реализация этого «добра»?
 
Очень просто: '''почти ни хрена не настраивается''' - нельзя ни добавить свои возможности, ни отрубить ненужные встроенные. Ибо всё жёстко и криво (хардкод). А ещё:
* История хранится только для багов, но не для остальных объектов.
* Шаблоны переусложнены.
* Нет "объектов", есть «значения полей», соответсвенно, им не добавишь атрибутов и не навесишь логики.
 
* Значения кастом полей в таблице багов хранятся не ссылками по ID, а по именам, что создаёт геморрой для зависимых полей, так как чтобы точно идентифицировать значение, приходится брать ещё и значение поля, от которого оно зависит.
* «Поле» (селект и мультиселект) совмещено с объектом, соответственно, не добавишь дополнительных атрибутов объекту.* Для выпадающих списков есть как «контроль значений», так и «контроль видимости поля», что в корне '''''неверно'''''! Ибо что за бред — Типа поле скрыто, но при этом есть варианты, которые можно выбрать? Бред! Или наоборот — поле доступно, но из вариантов — только пустое значение.
* По факту, ни от чего, кроме продукта, зависимым значение не сделаешь.
* История хранится только для багов, но не для остальных объектов.
* Код полей не генерится автоматически, а ручками вписываются в шаблоны.
* На всё это навёрнута туча неструктурированного кода, определяющего поведение «встроенных» полей.
Таким образом наш трекер превратится, по сути, в модульное приложение, построенное вокруг очень прокачанного автоинтерфейса полей и объектов. Естественно, это уже не Bugzilla ни разу, но зато чем-то похоже на [http://roundup.sourceforge.net/ Roundup] — «конструктор трекеров». Однако и с ним различий много — roundup не умеет зависимых селект-полей, модель задаётся в коде, права доступа слабые, поиск слабый.
 
=== Обновление модели ===
 
Обновление базы багзильское (тупая последовательность операций):
* (+) Очевидный порядок обновлений, нет проблем с их зависимостями друг от друга (новые просто дописываются в конец, порядок всегда правильный)
* (-) Не проверяется, корректна ли схема БД после обновлений
* (-) Обновления задаются именно для SQL БД, а не для метамодели
* (-) Не очень красивая портянка в функции обновления БД
 
Обновление базы наше:
* AddType -> RenameFields -> AddFields -> ChangeFields -> DropFields
* ChangeFields с помощью функций обновления
* (???) Самый интересный вопрос - как сделать функции обновления не на SQL, в условиях когда модель в неконсистентном и вообще не знает, в каком состоянии?
* После каждого шага запуск хука
* Переименования задаются декларативно
* Возможность Dry Run, просмотра и проверки последовательности обновлений
* Зависимости обновлений в рамках каждого шага можно задать декларативно (хотя ситуация редкая)
*: А может, просто стоит задавать их в ассоциативном массиве по порядку
* Ещё может быть, что обновление одного типа зависит от обновления другого (причём это уже более частая ситуация)
=== Модель ===
** Ссылка на поле объекта (пустая = весь объект)
** Ссылка на значение поля (пустая = любое)
 
=== Типы полей ===
 
<tab sep="bar" class="wikitable" head="top">
Тип | Параметры | Представления
Строка | Длина | Input, textarea, rich edit
Логический | | Флажок
Числовой | Точность (M.N) | Input
Дата и/или время | Дата? Время? | Поле со всплывающим календарём, просто календарь, просто поле
Файл | | Поле загрузки файла
Single-select | Тип объекта | Радиобатон, HTML-селект
Multi-select | Тип объекта | HTML-мультиселект, флажки, комбо-бокс
</tab>
== Текущее состояние ==
** Canconfirm
** Editbugs
* Private комментарии — комментарии — видны только инсайдер-группе* Информация о таймтрекинге — таймтрекинге — видна только группе, списывающей время
* reporter_accessible, cclist_accessible на отдельных багах
* Опциональные группы на отдельных багах
* Права на правку отдельных групп
* Права editclassifications, editcomponents, editfields, editkeywords, editusers
 
=== Настройки оповещений о багах ===
 
Отношения:
* Assignee, QA, Reporter, CC
* Requestee или Setter флага (реально в Bugzilla прикручено сильно сбоку)
* По идее — также создатель аттачмента, коммента (если разрешать править)
* Watcher указанного выше
* Global Watcher
 
События:
* Добавлен/удалён из указанного выше
* Изменено одно из полей бага (м.б отдельные настройки, м.б вместе)
* Баг / блокирующий баг меняет статус с закрытого на открытый или обратно
* «Но кроме» UNCONFIRMED
* «Но кроме» своих изменений
== Что не так? ==