Хранение всего с любым управлением
От: Real 3L0 Россия http://prikhodko.blogspot.com
Дата: 05.12.14 00:50
Оценка:
Приветствую.
Может не в тот форум — разберёмся.

Предположим, мы имеем хранилище ("база данных") любых сущностей ("объекты"). Ну, т.е. в нём можно сохранить любую (ну или почти любую) информацию. Причём не просто сохранить, а предварительно создав описания ("классы") для каждого типа сущностей.
Например, для внесения в хранилище сущности-сообщения "привет", в нём предварительно создаём описание:
и после создаём само сообщение, где "текст" — "привет", "автор" — "кто-то", а тип берётся из описания как есть. Получается что-то типа следующего:

сообщение: "привет", "кто-то"


Жёсткой структуры хранения нет — где пользователь создал сущность, там она и хранится. Но при этом есть "рабочие области" (только в них можно создавать сущности) и возможно организовывать деревья (любая сущность может быть родителем других сущностей).

Просто так хранить сущности не интересно, поэтому над ними доступны стандартные действия: описанное выше создание, а также редактирование и удаление. Это — стандартные простые действия, т.к. управляют только одной сущностью без дополнительных параметров. Даже если в сущности содержится ссылка на другую сущность (например предположим, что в примере выше, "автор" указывается как ссылка на другую сущность "Иванов Иван") — это всё равно действие над одной сущностью.

А теперь к проблемам.
Я хочу добавить более сложные действия над сущностями, когда вместе с действием указываются дополнительные параметры или ссылки на другие сущности.
Например:

документ: "ДокументТакойТо" распечатать принтер "ПринтерТакойТо"

Во-первых, получается, что в хранилище нужно сохранять уже не одну сущность, а действие в связке со всеми задействованными в нём сущностями. Т.е. получается, что хранилище должно хранить не только сущности, но и действия. Если предыдущий пример Вас в этом не убедил, вот другой:

рабочая область: "РабочаяОбластьТакаяТо", пользователь: "ИвановИван", доступ: "ТолькоЧтение"

Сохраняя это действие в хранилище — мы также сохраняем права доступа к хранилищу, а это нужная информация.
Почему это именно действие, а не сущность — не уверен, что могу объяснить. Может потому, что нет возможности точно определиться, какую сущность в какой хранить: пользователя в рабочей области или рабочую область в пользователе.
Отдельное от объектов хранение действий позволяет, во-первых, вводить команды в любой последовательности операндов, а во-вторых, что очень важно, можно к любому хранящемуся объекту применить действие, которое использует в качестве операнда тип данного объекта.

А теперь, для тех кто дочитал до сюда, правильно ли я думаю: если у нас есть две сущности, хранящиеся в разных местах, то сохранять действие, которое использовало эти сущности, нужно:
1. там, где действие выполнено;
2. там, где хранятся сущности (это актуально для примера с правами доступа — надо обязательно сохранить в рабочей области);
3. предоставлять автору действия выбирать, где сохранять действие.

В общем, любые комментарии приветствуются.

P.S. Походу, я потихоньку возвращаюсь сюда.
Вселенная бесконечна как вширь, так и вглубь.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.