Hola Leandro
Te digo comomanejo ese tipode cosas.
Uso un campo que me dice la funciond el estado, su siginificado.
Ejemplo
1 Activo 00000001
2 Cara de Tomate 00000001
3 En curso 00000010
4 Trabajando en ello 00000010
5 Esperando algo 00000100
5 Detenido 00000100
6 Cancelado 00001000
Esto me idendepndiza del ID y me permite tener mas de un estado, que aplique
al mismo concepto o una conjuncion de ellos.
De esa forma, mas alla de tener su ID y una leyenda, lo que se hardcodea es
el valor que reopresenta.
Puedo tener mas de une stado que significa la mismo, puedo tener enums que
me permitan evaluar situaciones validas o necesarias para:
en pseudocodigo:
[Flag] // Esto par indicar que los valores deben ser potencia de 2
public enum TareaEstadaEnum { Activo=1, EnCurso=2,Detenido=4,Cancelado=8 }
Esto permite luego tener armadas las precondiciones como expresiones
booleanas, un buen complemento de esto es armar algun enum para condiciones
ante una posible acciones.
[Flag] // Esto par indicar que los valores deben ser potencia de 2
Public enum AccionesEnum { Cancelar=1, ReActivar=2, NoSeQueOtra=4 }
Luego en alguna clase o helper podes establecer precondiciones para una
tarea en base su estado, indpendientemente de como se llame en la base de
datos o como se lo muestres al usuario.
En Coop evaluamos algunas situaciones utlizando esta tecnica, aca no tengo
nada a mano en C#, te pego algo vb6, que aplica el concepto.
Ej:
OPCAMHelper.Estado.Admite(enuOperaciones.Abrir, OEstado)
Esto te dice si par el estado actual, OEstado, se puede o no aplicar la
operación abrir, (enuOperaciones.Abrir).
OPCAMHelper.Estado.LogOperacionesAdmitidas( OEstado, enuOperaciones.Abrir )
Esrto registra en un Log loque se intenta hacer y sus violaciones, si
existen.
OEstado = OPCAMHelper.Estado.ActualizaEstado(enuOperaciones.Abrir, OEstado)
Esto actualiza al nuevo estado si la transicion es válida y lo retorna.
( Ojo esto s muy viejo y en modo Helper, es VB6, podes hacer algo parecido
con OOP y mucho mas elgante. )
Algunos enum de lo que utiliza esto y algunas constantes.
Public Enum enuOperaciones
Ninguna = 0
Abrir = 1
Desdoblar = 2
Agrupar = 4
FiltroCrear = 8
FiltroAplicar = 16
Buscar = 32
Modificar = 64
Generar = 128
Validar = 256
Cerrar = 512
Revisar = 1024
Eliminar = 2048
Exportar = 4096
ExportarErrores = 8192
End Enum
Public Enum enuOperacionesEstado
Ninguno = 0
Abierto = 1
FiltroCreado = 2
FiltroAplicado = 4
OperacionSeleccionada = 8
Modificado = 16
generado = 32
validado = 64
Cerrado = 128
Revisado = 256
Todos = Ninguno Or Abierto Or FiltroCreado Or FiltroAplicado Or
OperacionSeleccionada Or Modificado Or generado Or validado Or Cerrado Or
Revisado
End Enum
Public Enum enuOperacionCondiciones
Abrir = enuOperacionesEstado.Ninguno Or enuOperacionesEstado.Cerrado
Desdoblar = enuOperacionesEstado.Abierto Or
enuOperacionesEstado.OperacionSeleccionada
Agrupar = enuOperacionesEstado.Abierto Or
enuOperacionesEstado.OperacionSeleccionada
FiltroCrear = enuOperacionesEstado.Abierto
FiltroAplicar = enuOperacionesEstado.Abierto Or
enuOperacionesEstado.FiltroCreado
Buscar = enuOperacionesEstado.Abierto
Modificar = enuOperacionesEstado.Abierto
Generar = enuOperacionesEstado.Abierto Or enuOperacionesEstado.validado
Exportar = enuOperacionesEstado.Abierto
ExportarErrores = enuOperacionesEstado.Abierto Or
enuOperacionesEstado.validado
Validar = enuOperacionesEstado.Abierto
Revisar = enuOperacionesEstado.Abierto
Cerrar = enuOperacionesEstado.Abierto
Eliminar = enuOperacionesEstado.Abierto Or
enuOperacionesEstado.OperacionSeleccionada
End Enum
En Net lo podes armar mucho mejor y más dinámico.
Bue, en este caso es para amnejar parte de los permisos sobre ciertos
controladores de caso de uso.
Saludos
Daniel Calvin
El 12 de septiembre de 2008 10:35, Leandro Halfon
<[EMAIL PROTECTED]>escribió:
> Lista..tengo un problema que supongo que muchos de ustedes habran tenido en
> algun momento..a ver si me pueden ayudar
>
> Hace un tiempo tenia un sistema de tracking que era simplemente ABM'S
> varios..
> Por ej: una actividad tenia varios estados (nueva, en cola, terminada, etc)
> pero sin logica alguna.
>
> A nivel de BD, la actividad tiene una FK a una tabla de estados...
>
> Esos estados, en la BD de produccion son diferentes a los de la BD de
> testing ...
>
> El problema es que como ahora se agregaron varias validaciones, reglas de
> negocios, etc en base a esos estado (porq fue un sistema que se fue haciendo
> de a poco), si comparo los valores en base a un "id" dijo al momento de
> realizar prueba se me complica....y tampoco me gusta mucho eso ya que seria
> harcodeo..
>
> alguna idea?
>
> Espero que se haya entendido...
>
> Gracias!
>
> Leandro
>
--
Daniel A. Calvin
Cooperator Team Member
http://www.cooperator.com.ar
Microsoft Certified Professional