Ниже приводится список формальных требований к альтернативам. Сначала основные определения:
Есть список альтернатив
Для каждой альтернативы (alternative) определён список возможных кандидатов (candidate)
Альтернатива является или главной(master), или подчиненной (slave)
Альтернатива находится или в ручном режиме(manual), или автоматическом(auto)
Каждый кандидат главной альтернативы имеет вес - неотрицательное целое число. Вес кандидатa подчинённой альтеративы считается неопределённым.
Выбор кандидата происходит по следующим принципам:
Если альтернатива находится в ручном режиме, то выбирается указанный кандидат
Если альтернатива находится в автоматическом режиме и главная, то выбирается кандидат с наибольшим весом
Если есть несколько кандидатов с одним весом, то среди них выбирается лексикографически старший
Если альтернатива находится в автоматическом режиме и подчиненная, то выбор определяет главная для неё альтернатива
В голосовании участвуют только кандидаты соответствующие реально существующим файлам. Если у данной альтернативы нет кандидатов на голосование, то она выбывает из рассмотрения. Если альтернатива находится в ручном режиме и указанный кандидат не соответствует никакому реальному файлу, то альтернатива переводится в автоматический режим.
В любой момент система альтернатив должна находиться в целостном состоянии. Требования к целостности приведены ниже:
Альтернатива в ручном режиме может указывать только на своих кадидатов.
Во избежание проблем не должно быть двух и более одинаковых кандидатов
Не должно быть циклов в зависимостях между альтернативами (под зависимостью понимается отношение: главная-подчинённая)
Каждый кандидат обязан указывать тех и только тех подчиненных кандидатов, которые указаны в описании альтернативы,не могут существовать кандидаты одной и той альтертативы с разным набором подчиненных (slaves)
При изменении конфигурации, система должна провести проверку целостности и если проверка не прошла откатить изменения.
Одновременно работать с базой может только одна программа (блокировка)
Перечисленных требований должно быть достаточно чтобы любая их реализация работала корректно и без сбоев.