Si tenes dudas de como armarlo, haciendo algo mas OOP, bsado en la idea,
avisame y te ayudo un poco mas.

Pero armas cosas muy potentes, muy mantenibles y respetas el
lenguaje/conceptos del dominio, ( si sos prolijo )

Saludos

Daniel

2008/9/12 Leandro Halfon <[EMAIL PROTECTED]>

> Gracias daniel...
> esta buena la idea...me va a llevar un tiempito cambiar las cosas pero a
> futuro va a ser mejor!
>
> Salu2,
>
> On Fri, Sep 12, 2008 at 12:02 PM, Daniel Calvin <[EMAIL PROTECTED]>wrote:
>
>> 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
>>
>
>


-- 
Daniel A. Calvin
Cooperator Team Member
http://www.cooperator.com.ar
Microsoft Certified Professional

Responder a