Нет ничего плохого в хранении любых данных в базе данных, включая данные презентации. Если это помогает вам получать эффективные результаты, а при написании меньшего количества кода - это хорошая практика. В чем вы должны убедиться, так это в том, что вы не смешиваете логику представления с логикой базы данных
Вы можете убедиться, что эти проблемы разделены, инкапсулировав данные для уровня презентации в свойствах объекта elementInfo
(например).
Поскольку речь идет об CSS-классе, эти данные представления должны храниться отдельно от бизнес-данных . Поэтому, хотя в базе данных можно хранить как презентационные, так и бизнес-данные, их нельзя хранить в одной таблице.
Обновление re: comment Нет, вам не следует добавлять идентификатор PresentationClassRecord в качестве FK для бизнес-объекта. Я сделал пример подхода к БД ниже. Я назвал DummyTable
ваши бизнес-объекты, а остальное следует спецификации. Самая важная часть - StatusPresentationAssignmentTable
-----------------------------------------------
DummyTable
-----------------------------------------------
Id Name SomeOtherDataField StatusId
PK int varchar int FK int
-----------------------------------------------
StatusTable
-----------------------------------------------
Id Name ModifiedDate
PK int varchar datetime
-----------------------------------------------
PresentationTable
-----------------------------------------------
Id PresentationType Value
PK int varchar
sample data:
43 CssClass prettyBackground
-----------------------------------------------
StatusPresentationAssignmentTable
-----------------------------------------------
StatusId PresentationId
FK int FK int
Теперь с помощью двух простых предложений объединения вы можете получить данные презентации, и они полностью отделены от ваших бизнес-данных. Ваш сценарий может сделать что-то вроде проверки, есть ли в статусе манекена какие-либо назначения для презентации. Если это так, то он просматривает PresentationType, получает соответствующую функцию для применения данных презентации к презентации и выполняет ее. (Вам необходимо иметь функцию для каждого PresentationType, которая знает, как обрабатывать значение - что-то, что может быть инкапсулировано чем-то вроде function applyPresentationValue(presentationElement, presentationType, presentationValue)
, которое вызывает другую функцию applyCssClass(presentationElement, value)
, если presentationType == "CssClass"
).