Пусть есть пользователи информационной системы. Авторизованным пользователям позволено строить свои модели в этой ИС. Неавторизованные могут только смотреть, как другие строят эти модели, но сами не могут этого делать.
Вопрос: сколько ролей в ИС?
Пусть есть две кучи песка, сваленные рядом.
Вопрос: Это одна куча, или по-прежнему две кучи, но теперь сваленные рядом?
Пусть есть должность директора школы №123. Сидоров занимает эту должность после Иванова.
Вопрос: это два разных директора, или один директор?
Сегодня Иванов играет роль княжны Мэри.
Вопрос: завтра, когда он будет играть роль с тем же названием, это будет та же роль, или другая?
Вопрос: Сидоров, который сегодня играет роль с тем же названием, играет ту же роль, или другую?
Есть часовой механизм, исполняющий роль часового привода в часах на городской башне. Пусть он сломался и его заменили на другой часовой механизм.
Вопрос: часовой привод теперь другой, или это тот же часовой привод, но с другим часовым механизмом?
На все эти вопросы (и подобные им) можно ответить одинаково – каждый решает для себя сам, как ему удобно, исходя из контекста. Это, обычно, никого не напрягает, потому что не нужно строить модели. Мне же как аналитику приходиться быть постоянно начеку. Надо понять, как клиент видит предметную область, чтобы корректно построить модель. Сегодня я хочу продемонстрировать вам последовательность рассуждений, которую я при этом делаю.
Пусть есть директор школы №123 Сидоров. Вопрос: это та же роль, что и директор школы №123 Иванов? Для начала надо понять, для кого строится информационная система?
Пусть она строится для сбора статистической отчетности по зп директоров школ. Для этой отчетности все директора безликие. Нет никакой разницы Иванов или Сидоров занимают должность, но важно различать директоров разных школ. Понятно, что с этой точки зрения роль директора школы – одна.
Теперь допустим, что ИС строится для анализа эффективности работы различных директоров школ. В такой ИС будет важно будет различать Иванова в качестве директора и Сидорова в качестве директора. С этой точки зрения роли директоров будут разные.
Для того, чтобы понять, как перейти от первого представления ко второму, надо понимать, что такое роль. Об этом я писал подробно в статье Моделирование объектов учета. Напомню тезисно. Роль – это некий 4-х мерный объем пространства-времени, занимаемый в разное время разными людьми, а точнее их темпоральными частями. Это значит, что роль может быть представлена в виде конструкции, состоящей из темпоральных частей людей, каждая из которых характеризуется датой начала и датой завершения своего участия. Сама же роль – не множество этих темпоральных частей, а склейка всех этих частей.
Представьте себе, что у вас несколько кучек песка. Вы их соединили вместе и получили одну кучу. Точно также происходит склейка темпоральных частей. Вы берете их и склеиваете. Из множества небольших темпоральных частей вы получаете одну темпоральную часть большего размера. Таким образом, для получения роли директора школы №123 нужно склеить темпоральные части: роль директора школы №123, исполняемую Ивановым с ролью директора школы №123, исполняемой Сидоровым.
Если можно соединять кучи песка, то можно одну кучу делить на части. По аналогии можно роль делить на части. Пусть есть роль директора школы, исполняемая Сидоровым. Представим ее в виде множества ролей, каждая из которых – это ежедневное исполнение Сидоровым роли директора с 8-00, когда он приходит на работу, до 17-00, когда он уходит. Можно сказать, что роль директора школы, исполняемая Сидоровым, — это склейка всех ежедневных ролей Сидорова.
Пусть есть множество ежедневных ролей, исполняемых Сидоровым. Как мы видим, эти роли можно склеить и получить одну большую роль. Их можно сложить стопкой и посмотреть, что в них есть общего – создать типовую ежедневную роль. Можно сделать статистический анализ этих ежедневных ролей. При этом важно понимать то, с какими объектами мы работаем, и какие атрибуты при этом используются. Если стоит вопрос о длительности работы Сидорова в роли директора, то речь идет о склейке ежедневных ролей в одну большую роль, и эта длительность является свойством этой роли. Если стоит вопрос о том, когда ОБЫЧНО Сидоров приходит на работу, то речь идет о типовой ежедневной роли Сидорова, и это время является свойством типовой ежедневной роли. Если стоит вопрос о том, во сколько В СРЕДНЕМ Сидоров приходит на работу, то речь идет о множестве ежедневных ролей и это время является свойством множества ежедневных ролей. Поэтому, если мы хотим корректно передать в ИС эти свойства, нам надо создать в ИС все перечисленные мной объекты: ежедневные роли, склеенную большую роль, типовую роль, множество ролей. При этом надо помнить, что множество в ИС — это отдельный объект со своими атрибутами, а не просто куча ролей.
Можно склеить и роли всех директоров всех школ, при этом получить такую огромную роль – директор школы, исполнять которую будут разные люди в одно и то же время в разных местах. Поэтому роль – не обязательно исполняется одним человеком в одно время. Роль может быть исполнена разными людьми одновременно в разных местах. При этом не надо путать эту огромную роль с типовой ролью директора школы! Такая путаница встречается довольно часто. Кроме того, часто за роль выдают типовую роль.
Вопрос, с которого я начал пост: есть авторизованные пользователи и есть неавторизованные. Вопрос: сколько ролей в этой ИС?
Надеюсь, теперь ответ ясен: сколько угодно. Можно назвать ролью участие пользователя в каждой сессии. Можно склеить все сессии, относящиеся к одной учетной записи, и для этой склейки определить роль, можно склеить все сессии авторизованных пользователей и для этой склейки определить роль. Можно склеить все сессии и для этой склейки определить роль – это будет склейка авторизованных и неавторизованных пользователей. А можно склеить сессии работ в данной программе с сессиями работ в других программах. И т.д. и как угодно. Вопрос целесообразности. Все зависит от целей нашего учета: построенная модель должна удовлетворять целям нашей работы.
После нашего разговора остается впечатление, что роль – это нечто эфемерное – склейки, порезки. Но по факту роль имеет ту же природу, что любой другой физический объект. То, что мы получаем роль, разрезая пространство-время, или склеивая его, не делает роль чем-то отличным от любого другого физического объекта. Представьте себе мир, в котором люди знают о переселение душ из одного тела в другое. При этом они не просто это знают, у них паспорта заведены на души, а не на тела. Они часто говорят – я в роли Иванова отлично отдохнул, или я в роли Сидорова плохо поработал над своей кармой. И то, что вы видите как объект, они воспринимают как роль.
Физические объекты также можно склеивать и резать, чтобы получать новые объекты. Например, дощечка плюс дощечка получается скамейка. Или стол можно разрезать на столешницу и ножки. Или материю в Солнечной системе можно разделить на газово-пылевое облако, оставшееся после взрыва сверхновой и на планетную систему, которая возникла позже из этого облака.
В итоге вы сможете понять, что все вокруг нас – не более чем результат нашей интерпретации реального и непостижимого мира. А то, что наше сознание различает мир физический как реальность и мир ролей – как воображаемый нами, — не более чем эгоцентризм, подобный антропоцентризму системы Птолемея.
Автор: Марк Мельник