Изменения

Перейти к: навигация, поиск

BugzillaORM

1995 байтов добавлено, 23:05, 5 марта 2012
м
Нет описания правки
В Bugzilla половина кода в шаблонах, половина на основе полу-ORM’а Bugzilla::Object. Большая часть — говнокод. С одной стороны — ORM бы туда, было бы классно, НО! ORM мало, и нужен не он! Все (существующие) ORM-движки — это просто объектный интерфейс к базе данных. А нужно некое объектное ядро, которое бы позволяло создавать свои объекты, с полями различных типов, в том числе и ссылающимися на другие такие же объекты, с возможностью приписывания специальных особенностей полю, с общим механизмом хранения истории и с автоматическим базовым CRUD-интерфейсом.
 
== Идеи по созданию объектного ядра ==
Объекты в Bugzilla:
</graph>
Связь "многие «многие ко многим" многим» багов с ключевыми словами можно разбить на две "один «один ко многим"многим»:
<graph>
А подумав и посмотрев на красивую картинку выше, мы приходим к другой идее — '''есть сущности, связи между ними и идея непротиворечивого состояния'''. Но это только часть картины, ибо на это ещё навёрнуты:
* ; Несколько ссылок на один тип: Всё это ведь не означает, что баг должен иметь только одну ссылку, скажем, на версию. Он вполне может иметь две ссылки — например, версия, в которой нашли и версия, в которой зафиксили. Последняя — это, по сути, target milestone, но ведь это не значит, что мы не можем захотеть ссылаться на сущность того же типа «версия». Или другой пример: двухуровневая техподдержка, ссылка на связанный внешний баг и ссылка на связанный внешний продукт из продукта. В конечном итоге, это можно решить присвоением «имени» ссылке, по умолчанию равному названию типа сущности, на которую ссылаемся. Это, кстати, снова становится похоже на схему с зависимыми полями :); Права (: Сейчас в Bugzilla они рулятся на уровне продукта). TODO* ; Скрытие/показ полей бага в зависимости друг от друга: Вот тут пока не додумал :). TODO* ; Email-уведомления об изменениях: С ними более-менее всё понятно. По сути, они всегда привязываются к какому-либо полю какого-либо объекта общей структуры, ссылающемуся на пользователя/пользователей (например, Assignee и CC бага) — это со стороны ссылок на пользователей. Вторая сторона — событие, но единственно возможные события — изменение поля или создание новой сущности.
== Текущее состояние ==

Навигация