在数据库中存储任何数据(包括演示数据)没有任何问题。如果它能帮助你产生有效的结果,同时减少代码,那么这是一个好习惯。你需要确保的是你不要混合你的表示逻辑和你的数据库逻辑。
您可以通过将表示层的数据封装在elementInfo
对象的属性中(例如)来确保分隔这些问题。
既然是你所谈论的CSS类,这演示数据应保持在业务数据分开。因此,虽然可以将演示数据和业务数据存储在数据库中,但将它们存储在同一个表中是不可接受的。
更新重新:评论不,您不应该添加PresentationClassRecord的Id作为业务对象上的FK。我对下面的db做了一个示例。我打电话给您的业务对象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"
)。
我把它的 “应用CSS类” 你的意思是应用类_attribute_? ;) – 2011-04-28 17:43:21
公约可以配置吗?我只需为状态表中的每条记录创建一个“status_”CSS类...只需应用一些标准字符串修改即可删除不适合CSS类名称的空格和其他字符。 –
Schwartzie
2011-04-28 17:45:24
你是否想过要添加许多不同的状态?如果您允许用户自定义状态以及它们的外观,那么您不会存储类信息 - 因为它们不能添加类。您可能正在存储特定的自定义选项,如背景颜色或字体颜色。通常地位是明确的,不应该有太大的变化。一个简单的函数,如GetStatusClass(statusValue),返回适当的类应该不会有太大变化。 – Prescott 2011-04-28 17:47:46