Задача по истории. Как работать с историей состояний

Непонятно о чем, но достаточно популярный :)
Аватара пользователя
Galogen
Основатель клуба
Сообщения: 38
Зарегистрирован: 30 ноя 2010, 17:36
Откуда: Иваново
Контактная информация:

Задача по истории. Как работать с историей состояний

Сообщение Galogen » 07 дек 2010, 20:57

У меня есть конкретная задача. В ней я работаю как аналитик и тестировщик. Разработчик и инструменталист - некто другой.

Однако задача оказалась сложная. Чтобы никого не задеть и не обидеть, я постараюсь поставить задачу несколько отвлечено.

Пусть имеется некоторая коллекция объектов (множество)

Каждый объект коллекции имеет некоторый ограниченный контейнер ячеек (в общей задаче количество ячеек не натурально, но мы можем принять, что имеем дело с натуральным рядом).

Емкость контейнера, т.е. число ячеек, исторически-зависимое значение. Т.е. оно может меняться со временем. Саму ячейку как объект не рассматриваем,
ее свойства нас не интересуют.

Кроме этого мы также храним историю числа занятых ячеек.

(в смысле реализации это можно рассматривать как два исторических поля типа блоб, который содержит комма-строку с парой Дата,Значение. Впрочем реализация может быть и иной)

Также существуют ряд процессов, изменяющих значения общего количества ячеек и количества занятых.

Процесс 1 - меняет на определенную даты количество возможных ячеек
Процесс 1_1 отмена действия процесса 1 (пара проведение -отведение изменений)

Процесс 2 - занимает свободную ячейку, если на момент занятия существует оная
Процесс2_2 отмена действия процесса 2 (пара проведение -отведение изменений)

Процесс 3 - одновременно освобождает занятую ячейку в одном объекте занимает свободную ячейку в дургом объекте, если на момент занятия существует оная
Процесс3_3 отмена действия процесса 3 (пара проведение -отведение изменений)

Процесс 4 - освобождает занятую ячейку
Процесс4_4 отмена действия процесса 4 (пара проведение -отведение изменений)

Процесс 5 - занимает свободную ячейку на определенный период действия, т.е. занимает ячейку с ДатыНачала и автоматически освобождает ее с ДатыКонца+1
Процесс 5_5 отмена действия процесса 5 (пара проведение -отведение изменений)

Вроде бы все

Процессы инициируются в разные даты, последовательность может быть произвольная. Может осуществляться прошлой датой и т.п.

Задача предложить архитектуру решения и/или алгоритм для безопасного выполнения любого из представленных процессов. Безопасным будем считать в данном случае, что никакой процесс не нарушает согласованности общего доступного количества ячеек и занятого.

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

Спасибо

Вернуться в «Вопрос-Ответ»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость