No hay nada de malo en almacenar datos en la base de datos, incluidos los datos de presentación. Si le ayuda a producir resultados efectivos, mientras escribe menos código, entonces es una buena práctica. Lo que necesita asegurarse es que no mezcle su lógica de presentación con su lógica de base de datos.
Puede asegurarse de que estas preocupaciones se separen encapsulando los datos de su capa de presentación en las propiedades de un objeto elementInfo
(por ejemplo).
Dado que es una clase CSS que se está hablando, estos datos presentación debe mantenerse separado de los datos de negocio . Entonces, aunque está bien almacenar datos de presentación y comerciales en la base de datos, no es aceptable almacenarlos en la misma tabla.
la actualización de nuevo: Comentario No, no habría que añadir el ID de un PresentationClassRecord como FK en el objeto de negocio. Hice una muestra de un enfoque para el DB a continuación. Llamé al DummyTable
sus objetos comerciales, y el resto sigue las especificaciones. La parte más relevante es la 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
Ahora, con dos simples unirse a las cláusulas, usted puede obtener los datos de presentación y que esté completamente desacoplado de datos de su empresa. Su secuencia de comandos podría hacer algo así como comprobar si el estado del maniquí tiene asignaciones de presentación. Si lo hace, mira el PresentationType, obtiene la función apropiada para aplicar los datos de presentación a la presentación y la ejecuta. (Debería tener una función para cada PresentationType que sepa cómo manejar el valor, algo que podría ser encapsulado por algo como function applyPresentationValue(presentationElement, presentationType, presentationValue)
que llama a una función diferente applyCssClass(presentationElement, value)
si es presentationType == "CssClass"
).
lo tomo por "aplicar una clase CSS" quiere decir aplicar una _attribute_ clase? ;) –
Convención sobre configuración tal vez? Solo crearía una clase de CSS "status_" para cada registro en la tabla de estado ... solo aplique algunas modificaciones de cadena estándar para eliminar espacios y otros caracteres que no son adecuados para los nombres de clases de CSS. –
Schwartzie
¿Estás pensando que agregarás muchos estados diferentes? Si permite que los usuarios personalicen el estado y su aspecto, entonces no almacenaría la información de la clase, porque no pueden agregar clases. Es posible que esté almacenando opciones personalizables específicas como color de fondo o color de fuente. Normalmente, el estado está bien definido y no debería cambiar mucho. Una función simple como GetStatusClass (statusValue) que devuelve la clase adecuada no debería cambiar mucho. – Prescott