Дополнительная логика: нумерация, состояния, зависимости, конфликты, Диаграмма классов - Разработка модуля для хранения и управления документами в электронном виде

Дополнительная логика была реализована в базовом классе документа.

Для нумерации к модели документа было добавлено дополнительное поле number и создан статический метод numbering. При вызове его из конкретного класса происходит создание методов доступа к атрибуту number, а также определение функции generate_number, которая будет вызываться после сохранения документа. Функция работает следующим образом:

    1) находит документ типа своего класса с максимальным номером; 2) инкрементирует это значение; 3) присваивает полученное значение атрибуту number, если он еще не инициализирован.

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

Для реализации механизма состояний в модель документа введен атрибут state и были определены его возможные значения ('DRAFT' -- черновик, 'ACTIVE' -- активный, 'DELETED' -- удаленный). При создании документа вызывается метод set_default_state, устанавливающий статус 'DRAFT'. Также реализованы методы для активации (activate!) и деактивации (deactivate!) документа. В них заложена логика переходов одного состояния документа в другое.

Конфликты и зависимости реализованы в виде опций depends_on и conflicts_with, определяемых в классах сущностей, содержащих документы. В опции передаются имена классов документов. В случае, если у объекта-хозяина присутствуют указанные типы документов, они добавляются в специальные списки -- атрибуты класса:

    1) dependencies -- имена классов, от которых зависит текущий класс; 2) conflicts -- имена классов, которые конфликтуют с текущим классом.

У каждого документа есть метод savable?, определяющий, может ли он быть сохранен. Метод является ключевым в логике работы документа, в нем проверяются зависимости, конфликты, состояние документа. Документ может быть признан сохраняемым только после успешного прохождения всех проверок.

Описанную выше логику иллюстрирует UML-диаграмма активации документа, представленная на рисунке.

Диаграмма классов

Ниже представлена диаграмма классов в разработанном модуле.

Конкретные классы названы в диаграмме именами конкретных документов (паспорт, ИНН, трудовой договор).

Сущность, содержащая документы, названа Employee (Сотрудник).

Похожие статьи




Дополнительная логика: нумерация, состояния, зависимости, конфликты, Диаграмма классов - Разработка модуля для хранения и управления документами в электронном виде

Предыдущая | Следующая