Pregunta

Esto es sobre todo una solicitud de comentarios si hay una razón por la que debe no ir por este camino.

Tengo un multi-tierd, CodeSmith generadas por la aplicación. A nivel de interfaz de usuario es necesario que existan algunos campos que son obligatorios, y los campos necesarios variarán dependiendo de los valores de campo en la entidad enlazada. Lo que estoy pensando en hacer es añadir un CustomAttribute "PropertyRequired" para cada propiedad de las entidades que puedo establecidos verdadera o falsa cuando cargo la entidad en su manager. A continuación, voy a utilizar la reflexión para consultar la propiedad y dar retroalimentación visual al usuario en el nivel de interfaz de usuario, y puedo comprobar que todas las propiedades requeridas tienen un valor válido en el administrador antes de guardar. He trabajado esto como una prueba de concepto con una propiedad en una sola entidad, pero antes de tratar de extenderlo al resto de la aplicación Me gustaría preguntar si hay alguien con más experiencia, ya sea a decirme que ir para ello, o por qué no me gusta cuando me aumento del acceso. Si esto es una mala idea, o si se puede sugerir un enfoque mejor por favor ofrecer su opinión.

¿Fue útil?

Solución

Es una forma bastante razonable para hacerlo (lo he hecho algo muy similar antes) - pero hay siempre desventajas:

  • cualquier código que necesita la entidad necesitará la referencia extra (suponiendo que el atributo y entidad están en diferentes conjuntos)
  • los valores (a menos que esté listo al respecto) se deben determinar en tiempo de compilación
  • que no puede usarlo en entidades fuera de su control

En la mayoría de los casos lo anterior no son un problema. Si son un problema, es posible que desee apoyar un modelo de metadatos externos - pero a menos que que lo necesite, esto sería una exageración. No lo haga a menos que debe (que significa: seguir adelante y atributos de uso, sino que son general bien)

.

Otros consejos

No hay ninguna razón intrínseca para evitar los atributos personalizados. Es una característica CLR soportado que es la columna vertebral de muchos productos disponibles (Code Contracts, FxCop, etc ...).

Esto no es un enfoque razonable y saludable que el bicarbonato de estas cosas en un nivel de interfaz de usuario. Hay un par de puntos vale la pena considerar antes de tomar la inmersión completa:

  • Se le acoplamiento firmemente la lógica de negocio con la propia entidad. ¿Hay circunstancias en las que se requiere un campo o valores válidos podría cambiar? Usted puede limitar a sí mismo o se enfrentará a un mecanismo de validación inconsistente
  • La asignación dinámica es posible, pero más difícil - es decir, cuando se establece un campo que se requiere eso es lo que será menos que lo sustituya
  • atributos
  • personalizados pueden ser bastante inflexible si más abajo en la línea de lo que quería hacer algo más complicado - es decir, si usted necesita para pasar Estado en un sistema de validación de atributos impulsada. Atributos como asignación declarativa. Sólo tener una verdadera propiedad necesaria / falso no debería ser un problema aquí, sin embargo

Sólo por ser un abogado del diablo realmente, en general, para una aplicación bastante sencilla en la que sólo se preocupa por los campos requeridos, esto es absolutamente una manera ordenada de hacerlo

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top