четверг, 29 мая 2008 г.

Звездная команда (Часть 5). Объекты и элементы.

Темой данной статьи является на первый взгляд несколько запутанная архитектура отображения объектов Starteam в представления по средствам ассоциативных элементов. Понимание данной темы не всегда доступно с первого раза. Более того, эти нюансы нужны исключительно для тонкой настройки работы Starteam и редко используются в обычной практике. Поэтому, если вы только знакомитесь со Starteam, возможно, эта статья будет для вас лишней. =)

Важно понять, как объекты отображаются с помощью представлений (видов). Каждый объект отображается в некоторый вид с помощью дополнительной сущности, называемой элементом (Item) или, как ещё говорят, членом представления. Когда новый объект, допустим файл, добавляется к представлению, Starteam создает новый объект типа файл с версией 1.0, и это влечет за собой создание нового элемента, который "указывает" на тот файл. Элемент не только определяет, на какой файл ссылаются, но и определяет папку, в которой появится файл. Так, например, если Вы перемещаете файл из одной папки в другую, Вы фактически изменяете элемент - файл, чтобы указать на другой родительский элемент - папку, но сами объекты файл и папка фактически не измененяются. Отношения между элементами и объектами иллюстрированы на следующем рисунке.
В этом примере изображены два представления, указывающих на элемент - корневую папку. Каждый элемент указывает на соответствующий объект, и каждый элемент, отличный от элемента-коренвой папки указывает на родительский элемент-папку, определя тем самым, где располагается этот элемент.
Элемент, созданный от имени нового объекта называют родительским элементом. Дочерний элемент, созданный копированием родительского или дочернего элемента, позволяет отобразить тот же самый объект в другом месте. Дочерний элемент указывает на родительский элемент, с которого он был скопирован. Дочерние элементы создаются в двух случаях:
1) Когда используются дочерние представления(child views): В случае, когда новое представление создано как потомок другого представления, элементы родительского представления копируются, чтобы создать элементы дочернего представления. Сами объекты при этом не копируются – новые дочерние элементы представления просто указывают на те же самые объекты.
2) Когда используются разделяемые ресурсы (Shares): Элемент может быть явно скопирован, создавая "разделяемый" элемент (надо держать Ctrl и тянуть мышкой нужный элемент в StarTeam клиенте). В этом случае, выбранный элемент будет скопирован и будет указывать на тот же самый объект, что и оригинальный элемент.

Основное различие между дочерними представлениями и дочерними разделяемыми элементами - их начальная конфигурация. На поведение объекта частично влияет конфигурация родительского или дочернего элемента, по средствам которого мы имеем возможность управлять этим объектом. Чтобы понимать, как ведут себя родительские и дочерние элементы, необходимо понять разницу между свойствами элемента и свойствами объекта.
Свойства объекта: Большинство свойств, которые Вы видите – имя, кем изменен, версия, данные (для файла), и т.д. – принадлежит объекту. Когда любое из свойств объекта изменяется – создается другая ревизия объекта. Например, если текущая ревизия Запроса об изменении - 1.2, и свойство «Ответственный» изменено, модифицированный объект типа «Запрос об изменении» будет сохранен с ревизией 1.3. Если в новой версии файла текущая ревизия 1.4.1.2, то следующая будет соответственно - 1.4.1.3.

Свойства элемента: Элемент обладает свойствами, которые определяют, на какой объект этот элемент ссылается, папку, в которой он должен отображаться, и как должны обрабатываться изменения объекта через элемент. Большинство свойств элемента, например, родительское представление и родительская папка управляется StarTeam неявно на основании действий клиента. Однако, существует три ключевых свойства элемента, которые непосредственно затрагивают свойства объекта, на который ссылается элемент:
1) Код объекта (Object ID): Это свойство определяет ветвь объекта, на которую ссылается элемент. Каждый новый объект получает уникальный Код объекта, и его номер ревизии начинается с 1.0. Номер ревизии объекта увеличивается каждый раз, когда обновляется состояние объекта (1.1, 1.2, и т.д.), но код объекта при этом остается неизменным. Следовательно, код объекта, на который ссылается элемент, указывает на целую ветвь объекта и возможно на конкретную ревизию. Когда же объект ветвится, создается новый объект с новым кодом объекта, и номер его ревизии расширяется, чтобы отразить точку ответвления (например, 1.2.1.0). Элемент ссылается на новую ветвь, обновляя код объекта, на который он указывает.
2) Конфигурация поведения элемента (Behavior Configuration): Это свойство определяет, является ли элемент «плавающим» или привязан к определенному моменту времени. Когда поведение элемента определено, как плавающее, элемент указывает на последнюю ревизию ветви объекта, на который ссылается этот элемент. Когда поведение привязано к конкретному моменту времени, элемент ссылаестся на ревизию объекта, которая был актуальным на то время.
3) Автоматическое ветвление при изменении (Branch-on-change): Это свойство действительно только для дочернего элемента, ссылающегося на файл или «запрос на изменение». Оно определяет, что случается при изменении объекта через элемент. Если это свойство установлено в True, Starteam при любой модификации заставляет начинать новую ветвь объекта. Например, если файл загружается в БД (check in) через элемент, и текущая ревизия равна 1.2, автоматически создается новая ветка 1.2.1.0. Когда это свойство установлено в False – это означает, что, или основной объект уже ветвился через этот элемент, или изменение через элемент оперирует тем же самым объектом что и родительский элемент, или этот элемент только для чтения (заморожен).

Важно отметь, что элементы дочернего представления – это автоматически разделяемые ресурсы, которые созданы и управляются путем манипулирования видами, к которым они принадлежат. Следовательно, вы можете сосредотачиваться на управлении непосредственно представлением, не волнуясь о дочерних элементах и механизмах их работы. Однако, если вы создаете разделяемые ресурсы в ручную (через пользовательский интерфейс или команды SDK), необходимо уделить больше внимания свойствам элемента, чтобы понять, как изменения отразатся на других элементах в том же самом разделяемом (общем) дереве. Например, операции над иерархиями разделяемых элементов могут быть достаточно сложными, когда удаляется родительский элемент и поведение промежуточного элемента изменяется. По этим причинам, разделяемые ресурсы должны использоваться с большой осторожностью и только в том случае, когда у вас есть четкое понимание происходящего.
(продолжение следует...)
На этой радостной ноте я заканчиваю сию трогательную статью. А в следующей я планирую рассказать об особенностях обеспечения жизненого цикла приложения и хорошем тоне использования представлений.

3 комментария:

Александр комментирует...

Михаил, с прочитал все пять частей.Нравится что и как вы пишите.Есть ряд вопросов по StarTeam.Можно ли как то с вами связаться -icq, телефон, подъехать.Готовы заплатить за консультацию(ции).Александр Титов.
ICQ 92029296
stitov@hotmail.com

Анонимный комментирует...

It's good that you write about ST. I appreciate it! However your wording is so difficult to follow. Would be nice if you have some kind of proofreading end editing done before publishing.

Mikhail Mokhov комментирует...

If you find some errors or inaccuracies, please correct them. Thanks in advance.