Código derivado de las asociaciones
en Este artículo se muestra cómo utilizar el código de derivados de asociaciones para implementar la clase definida por el usuario de las restricciones.
el Código de derivados de la asociación se deriva de la asociación sin proporcionado Derivados de expresión OCL - la lógica debe ser implementado en el código.
por Favor, lea Malcolm Groves artículos si usted no está seguro de lo que se derivó de la asociación.
Estos dos artículos son los más relevantes para el tema:
ECO : Derivados de Asociaciones
ECO : Derivan de los Atributos de la Parte 2 - Código Derivados de Atributos
Problema:
a Menudo, los usuarios nos preguntan si podemos hacer uno u otro campo de nuestra obligatorio del sistema.
Les gustaría tener más campos o ciertos datos de validación de reglas para lograr la mejor calidad de la información almacenada.
Solución:
proyecto de Ejemplo utilizado en este artículo se muestra cómo implementar personalizados definidos por el usuario restricciones de clase para la clase Persona.
el Usuario puede crear sus propios datos simples reglas de validación y verificación de las normas contra los objetos de base de datos cada vez que el usuario crea/accede a los objetos o cambia los atributos de los objetos.
Esto es diferente de la definición de tiempo de diseño de las restricciones de clase, la cual es proporcionada por ECO marco, porque el usuario será capaz de establecer sus propias restricciones de clase en tiempo de ejecución, almacenarlos en la base de datos y el uso de todo el sistema.
En mi aplicación que he creado 2 clases Persona y PersonConstraint.
la Clase de Persona que representa la Persona y sus atributos y la clase PersonConstraint tiendas definidos por el usuario las limitaciones de las reglas para el objeto de la Persona.
PersonConstraint clase tiene atributos de cadena de OCLExpression y ErrorMessage.
Atributo OCLExpression contiene expresiones OCL para ser evaluado contra la Persona seleccionada objeto.
Atributo ErrorMessage contiene una cadena a mostrar en la GUI si la restricción/validación de la regla de error.
También he creado un derivado de asociación entre la Persona y la PersonConstraint.
la Asociación de final BrokenConstraints devuelve todos violado las restricciones para el objeto de la Persona.
Porque yo no especificado Derivados OCL para la asociación, tengo que dar la implementación de derivados de la asociación, en mi código.
Por la asociación de final BrokenConstraints he creado una función declarada como esto:
las IList BrokenConstraintsDeriveAndSubscribe(ISubscriber reEvaluateSubscriber, ISubscriber reSubscribeSubcriber)
{
...
}
la Asociación de final tiene multiplicidad n y la función debe devolver IList.
El resto de los detalles de su declaración son similares a código cualidad derivada de la función (ver Malcolm Arboledas de los Blogs).
En mi función:
- crear un nuevo objeto de la aplicación de IList (por ejemplo, el objeto ArrayList),
- Ir a través de todos PersonConstrain objetos,
- Evaluar cada uno de los OCLExpression en objeto de la Persona,
- Si la validación falla, puedo añadir PersonConstraint objeto a la lista,
- Devolver los resultados de la lista
ECO utiliza esta función para obtener BrokenConstraints de la asociación de final.
a Pesar de que la función devuelve IList, ECO marco transforma resultado para IPersonConstraintList (esto se hace mediante el adaptador de clase en el marco).
Para reevaluar BrokenConstraints para cada objeto, cada vez que el objeto se actualiza, me suscribo de la Persona objeto de los cambios de uso de reEvaluateSubscriber y reSubscribeSubcriber como esto:
os.EvaluateAndSubscribe(este.AsIObject(), c.OCLExpression, reEvaluateSubscriber, reSubscribeSubcriber)
Otra cosa (gracias a Jan Norden para ayudar) es suscribirse en PersonConstraints' expresiones OCL cambios:
os.EvaluateAndSubscribe(null, 'PersonConstraint.allInstances.OCLExpression', reEvaluateSubscriber, reSubscribeSubcriber)
Este suscripción de las fuerzas de todos los OCLExpressions ser reevaluado para todos los objetos Persona, cuando los nuevos PersonConstraint se agrega.
Esta es la forma en que mi código derivada de la función de asociación se ve:
público IList BrokenConstraintsDeriveAndSubscribe(ISubscriber reEvaluateSubscriber,
ISubscriber reSubscribeSubcriber)
{
ArrayList brokenConstraints = new ArrayList()
IObjectList restricciones = null
IOclService os =
(IOclService)AsIObject().ServiceProvider.GetEcoService(
typeof(IOclService))
IElement e = null
objeto OCLResult = null
//Obtener todas las restricciones
e = os.EvaluateAndSubscribe(null,
'PersonConstraint.allInstances', null, null)
si (e es IObjectList)
limitaciones = (IObjectList)e
//suscribirse en todos los OCLExpressions
os.EvaluateAndSubscribe(null,
'PersonConstraint.allInstances.OCLExpression',
reEvaluateSubscriber, reSubscribeSubcriber)
//ir a través de todas las restricciones y evaluar expresiones en el objeto
for (int i = 0 i < limitaciones.El conde i )
{
PersonConstraint c = restricciones[i].AsObject como PersonConstraint
si (c.OCLExpression =='')
continuar
e = os.EvaluateAndSubscribe(este.AsIObject(), c.OCLExpression,
reEvaluateSubscriber, reSubscribeSubcriber)
si (e != null)
OCLResult = e.AsObject
//Añadir a la lista si la restricción está roto
if (!Convertir.ToBoolean(OCLResult))
brokenConstraints.Añadir(c)
}
volver brokenConstraints
}
Y este es mi aplicación:
Ahora puedo crear mi propio restricciones de clase/reglas de entrar expresiones OCL y mensajes de Error.
Cada vez que acceda la Persona objeto o cambiar sus atributos, el programa evalúa estas expresiones OCL y muestra una lista de Mensajes de Error para la Persona seleccionada objeto.
Si puedo añadir más reglas, que ser validadas en Persona seleccionada objeto.
Tan pronto como la Persona seleccionada objeto se ajusta a mi costumbre restricciones de clase, los mensajes de Error desaparece.
código Fuente puede ser descargado desde aquí.
Codigo derivado de las asociaciones
Codigo derivado de las asociaciones : Multi-millones de consejos para hacer su vida mas facil.
en Este articulo se muestra como utilizar el codigo de derivados de asociaciones para implementar la clase definida por el usuario de las restricciones.
el Codigo de derivados de la asociacion se deriva de la asociacion sin proporcionado Derivados de expresion OCL - la logica debe ser implementado en el codigo.
por Favor, lea Malcolm Groves articulos si usted no esta seguro de lo que se derivo de la asociacion.
Estos dos articulos son los mas relevantes para el tema:
ECO : Derivados de Asociaciones
ECO : Derivan de los Atributos de la Parte 2 - Codigo Derivados de Atributos
Problema:
a Menudo, los usuarios nos preguntan si podemos hacer uno u otro campo de nuestra obligatorio del sistema.
Les gustaria tener mas campos o ciertos datos de validacion de reglas para lograr la mejor calidad de la informacion almacenada.
Solucion:
proyecto de Ejemplo utilizado en este articulo se muestra como implementar personalizados definidos por el usuario restricciones de clase para la clase Persona.
el Usuario puede crear sus propios datos simples reglas de validacion y verificacion de las normas contra los objetos de base de datos cada vez que el usuario crea/accede a los objetos o cambia los atributos de los objetos.
Esto es diferente de la definicion de tiempo de diseño de las restricciones de clase, la cual es proporcionada por ECO marco, porque el usuario sera capaz de establecer sus propias restricciones de clase en tiempo de ejecucion, almacenarlos en la base de datos y el uso de todo el sistema.
En mi aplicacion que he creado 2 clases Persona y PersonConstraint.
la Clase de Persona que representa la Persona y sus atributos y la clase PersonConstraint tiendas definidos por el usuario las limitaciones de las reglas para el objeto de la Persona.
PersonConstraint clase tiene atributos de cadena de OCLExpression y ErrorMessage.
Atributo OCLExpression contiene expresiones OCL para ser evaluado contra la Persona seleccionada objeto.
Atributo ErrorMessage contiene una cadena a mostrar en la GUI si la restriccion/validacion de la regla de error.
Tambien he creado un derivado de asociacion entre la Persona y la PersonConstraint.
la Asociacion de final BrokenConstraints devuelve todos violado las restricciones para el objeto de la Persona.
Porque yo no especificado Derivados OCL para la asociacion, tengo que dar la implementacion de derivados de la asociacion, en mi codigo.
Por la asociacion de final BrokenConstraints he creado una funcion declarada como esto:
las IList BrokenConstraintsDeriveAndSubscribe(ISubscriber reEvaluateSubscriber, ISubscriber reSubscribeSubcriber)
{
...
}
la Asociacion de final tiene multiplicidad n y la funcion debe devolver IList.
El resto de los detalles de su declaracion son similares a codigo cualidad derivada de la funcion (ver Malcolm Arboledas de los Blogs).
En mi funcion:
- crear un nuevo objeto de la aplicacion de IList (por ejemplo, el objeto ArrayList),
- Ir a traves de todos PersonConstrain objetos,
- Evaluar cada uno de los OCLExpression en objeto de la Persona,
- Si la validacion falla, puedo añadir PersonConstraint objeto a la lista,
- Devolver los resultados de la lista
ECO utiliza esta funcion para obtener BrokenConstraints de la asociacion de final.
a Pesar de que la funcion devuelve IList, ECO marco transforma resultado para IPersonConstraintList (esto se hace mediante el adaptador de clase en el marco).
Para reevaluar BrokenConstraints para cada objeto, cada vez que el objeto se actualiza, me suscribo de la Persona objeto de los cambios de uso de reEvaluateSubscriber y reSubscribeSubcriber como esto:
os.EvaluateAndSubscribe(este.AsIObject(), c.OCLExpression, reEvaluateSubscriber, reSubscribeSubcriber)
Otra cosa (gracias a Jan Norden para ayudar) es suscribirse en PersonConstraints' expresiones OCL cambios:
os.EvaluateAndSubscribe(null, 'PersonConstraint.allInstances.OCLExpression', reEvaluateSubscriber, reSubscribeSubcriber)
Este suscripcion de las fuerzas de todos los OCLExpressions ser reevaluado para todos los objetos Persona, cuando los nuevos PersonConstraint se agrega.
Esta es la forma en que mi codigo derivada de la funcion de asociacion se ve:
publico IList BrokenConstraintsDeriveAndSubscribe(ISubscriber reEvaluateSubscriber,
ISubscriber reSubscribeSubcriber)
{
ArrayList brokenConstraints = new ArrayList()
IObjectList restricciones = null
IOclService os =
(IOclService)AsIObject().ServiceProvider.GetEcoService(
typeof(IOclService))
IElement e = null
objeto OCLResult = null
//Obtener todas las restricciones
e = os.EvaluateAndSubscribe(null,
'PersonConstraint.allInstances', null, null)
si (e es IObjectList)
limitaciones = (IObjectList)e
//suscribirse en todos los OCLExpressions
os.EvaluateAndSubscribe(null,
'PersonConstraint.allInstances.OCLExpression',
reEvaluateSubscriber, reSubscribeSubcriber)
//ir a traves de todas las restricciones y evaluar expresiones en el objeto
for (int i = 0 i < limitaciones.El conde i )
{
PersonConstraint c = restricciones[i].AsObject como PersonConstraint
si (c.OCLExpression =='')
continuar
e = os.EvaluateAndSubscribe(este.AsIObject(), c.OCLExpression,
reEvaluateSubscriber, reSubscribeSubcriber)
si (e != null)
OCLResult = e.AsObject
//Añadir a la lista si la restriccion esta roto
if (!Convertir.ToBoolean(OCLResult))
brokenConstraints.Añadir(c)
}
volver brokenConstraints
}
Y este es mi aplicacion:
Ahora puedo crear mi propio restricciones de clase/reglas de entrar expresiones OCL y mensajes de Error.
Cada vez que acceda la Persona objeto o cambiar sus atributos, el programa evalua estas expresiones OCL y muestra una lista de Mensajes de Error para la Persona seleccionada objeto.
Si puedo añadir mas reglas, que ser validadas en Persona seleccionada objeto.
Tan pronto como la Persona seleccionada objeto se ajusta a mi costumbre restricciones de clase, los mensajes de Error desaparece.
codigo Fuente puede ser descargado desde aqui.
Código derivado de las asociaciones
By Consejos Y Trucos
Código derivado de las asociaciones : Multi-millones de consejos para hacer su vida más fácil.