Библиотека для кеширования зависящих друг от друга объектов

TODO постановка задачи в процессе формализации

Дано

  1. Задано некоторое (изначально пустое) пространство объектов разных категорий
    1. Часть категорий — это объекты-исходники

      • Исходник (возможно, несколько, и возможно — различных категорий) появляется или обновляется (увеличивает версию) в результате запуска некоторой процедуры загрузкии

    2. Оставшиеся категории — это объекты-генераты

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

  2. У каждого объекта и каждой процедуры есть уникальный идентификатор

  3. У каждого объекта и каждой процедуры есть версия («время создания»). Версия не может уменьшаться.

    • Появление процедуры или объекта с имеющимся идентификатором, но новой (более поздней) версией называется обновлением

    • Решение о присвоении объекту определённой версии принимает процедура
    • Если идентификатор и версия совпадают, считается, что объект не изменился.

Известны:

Понятие «актуальности» и «недоступности»

Актуальный объект или процедура всегда имеют наибольшую версию.

Дополнительно:

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

Хранение

Хранятся как минимум все версии исходников и все доступные генераты.

Требуется

На основании заданных процедур и хранимого пространства объектов получить цель — заданный набор актуальных исходников и/или генератов.

Если по каким-то причинам объект получить нельзя, возвращается т. н. пустой объект, при этом доступен вердикт — обоснование, отчего объект не получен.

Условия

Реализация

TODO Пока только идеи

FrBrGeorge/ActualEducationalTasks/UniversalCache (последним исправлял пользователь FrBrGeorge 2023-11-10 16:36:23)