Reevaluar o suscribir?


en Este artículo se explica derivados de los miembros de la ECO. & nbsp Es el propósito principal es describir la diferencia entre el ReEvaluateSubscriber y ReSubscribeSubscriber parámetros cuando se deriva de los miembros en el código.

Una de las características excelentes de la Negrita que han hecho la transición a la ECO se deriva de los miembros. & nbsp Un miembro derivado es un poco como un campo calculado en un conjunto de datos, excepto que sólo se calcula la primera vez que se solicita su valor y, a continuación, que es el valor almacenado en la caché de tiempo de procesamiento.

Tome la persona FullName como un ejemplo. & nbsp nombre Completo se calcula de la

Resultado := Título de ''Nombre '' Apellido

El primer paso importante para la creación de dicho atributo en el ECO es marcar el atributo Derivado. & nbsp en realidad, es posible especificar algunos 'Derivación OCL' y tienen el ECO sistema de derivar todo para usted

título de ''nombre '' apellido

pero en este artículo se pretende mostrar cómo manejar mucho más complicado de los escenarios.

Con un típico conjunto de datos de campo calculado es de esperar, el método que se calcula cada vez que el valor es requerido. & nbsp Si el objeto actual se muestra como una lista en un DataGrid, a continuación, llamar a este método para cada instancia cada vez que el DataGrid vuelve a pintar puede ser la CPU, especialmente si el valor se calcula a partir de otros atributos de objetos.

En la ECO el método se ejecuta la primera vez que el valor es solicitada, pero el resultado será almacenado en caché de forma automática dentro de la ECO espacio. & nbsp Futuras solicitudes para el valor de esta derivada miembro devolverá el valor almacenado en caché en su lugar. & nbsp El potencial de la CPU de ahorro de aquí es evidente, sobre todo con rutinas complicadas.

Un código derivado de método para un miembro tiene un nombre específico lista de parámetros, ECO utiliza la reflexión para encontrar el método. & nbsp de La estructura es

función DeriveAndSubscribe(ReEvaluateSubscriber,
& nbsp ReSubscribeSubscriber: ISubscriber):

en nuestra FullName ejemplo de ECO esperaría encontrar

la función FullNameDeriveAndSubscribe(ReEvaluateSubscriber,
& nbsp ReSubscribeSubscriber: ISubscriber): string

El problema aquí es este. & nbsp Si el valor de la Derivada de los estados sólo se calcula una vez y, a continuación, caché, ¿qué ocurre si el valor de Título, Nombre o Apellido de los cambios? & nbsp

El ECO marco, obviamente, no tiene idea de lo que le hicieron a obtener el valor de este miembro, ni que los demás objetos/miembros fueron utilizados para el cálculo. & nbsp Para asegurarse de que ECO nunca devuelve un valor incorrecto, se necesita saber cuando este miembro debe ser recalculado. & nbsp De hecho, lo que realmente necesita saber es cuando este miembro debe ser marcado como 'no Válido', no se actualizan hasta que su valor es requerido.

El ECO framework utiliza un tipo de patrón observer para ver los objetos relevantes/miembros, siempre que uno de ellos se altera la EcoSpace marcará el miembro derivado no válido (derivados de un miembro a través de 'Derivación OCL' lugar estas suscripciones de forma automática). & nbsp Así, nuestro código ahora se ve algo como esto

la función FullNameDeriveAndSubscribe(ReEvaluateSubscriber, ReSubscribeSubscriber: ISubscriber): string
begin
& nbsp Resultado := Título de ''Nombre '' Apellido
& nbsp //Ahora ponemos o 'Suscripciones'
& nbsp Auto.AsIObject().Propiedades['Title'].SubscribeToValue(ReEvaluateSubscriber)
& nbsp Auto.AsIObject().Propiedades['Nombre'].SubscribeToValue(ReEvaluateSubscriber)
& nbsp Auto.AsIObject().Propiedades['Apellido'].SubscribeToValue(ReEvaluateSubscriber)
fin

El 'ReEvaluateSubscriber' es un observador de objeto que se pasa a nosotros desde algún lugar en el funcionamiento interno de la ECO marco. & nbsp Todo lo que tenemos que hacer es asegurarnos de suscribirse a todos los objetos relevantes/miembros. & nbsp cada vez que uno de estos depende de los elementos tiene su valor modificado, el ReEvaluateSubscriber dirá el ECO de un marco en que el valor del o de los miembros debe ser 'Reevaluado' la próxima vez que se solicita.

Reevaluar o Suscribir?
Esto me lleva al último punto. & nbsp Hay dos suscriptores que pasa a nuestro método, 'ReEvaluateSubscriber' y 'ReSubscribeSubscriber', así que lo que el otro hace, y cuando se utiliza?

En el ejemplo anterior hemos utilizado la ReEvaluateSubscriber debido a que sólo se necesita para saber cuando los valores de Título, Nombre o Apellido de cambio. & nbsp En un ejemplo más complejo que podemos necesitar para hacer algo estructuralmente más complicado, como la iteración de cada OrderLine de un PurchaseOrder y suscribirse a los miembros de las relacionadas con los objetos en su lugar.

En este tipo de situación, ¿qué pasa si una nueva OrderLine se agrega? & nbsp podemos no es posible que ya se han suscrito a un objeto que aún no había existido en el punto en el que hemos colocado nuestras suscripciones? & nbsp Lo que si un OrderLine es removido o eliminado?

Esto es exactamente lo que el ReSubscribeSubscriber. & nbsp suscriptor debe ser disparada cuando queremos decir 'Volcado de todas las suscripciones puse la última vez, vamos a empezar de nuevo'. & nbsp Básicamente, no es de los 'Valores' de los elementos que están cambiando, necesitamos reemplazar nuestras suscripciones, ya que hay más o menos objetos a tener en cuenta.

la función OrderValueDeriveAndSubscribe(ReEvaluateSubscriber,
& nbsp ReSubscribeSubscriber: ISubscriber): Decimal
var
& nbsp CurrentOrderLine: OrderLine
begin
& nbsp Resultado := 0
& nbsp para CurrentOrderLine en Auto.OrderLines hacer
& nbsp empezar
& nbsp & nbsp & nbsp Resultado := Resultado CurrentOrderLine.LineValue
& nbsp & nbsp & nbsp //Suscribirse a los miembros de la actual objeto secundario
& nbsp & nbsp & nbsp CurrentOrderLine.AsIObject().Propiedades['LineValue'].SubscribeToValue(ReEvaluateSubscriber)

& nbsp final
& nbsp //por último, si el Auto.OrderLines lista de cambios en alguna manera
& nbsp //tenemos que desechar todos nuestras suscripciones y empezar de nuevo.
& nbsp Auto.AsIObject().Propiedades['OrderLines'].SubscribeToValue(ReSubscribeSubscriber)
fin

Conclusión
Espero que esto haya sido una revelación en cuanto a las habilidades de código derivados de los miembros de la ECO. & nbsp Si no lo has hecho ya me gustaría recomendar la lectura de Rolf Lampa del artículo Dinámica de navegación para un mayor rendimiento, fue escrito para la Negrita, pero los principios son los mismos.









Reevaluar o suscribir?


Reevaluar o suscribir? : Multi-millones de consejos para hacer su vida mas facil.


en Este articulo se explica derivados de los miembros de la ECO. & nbsp Es el proposito principal es describir la diferencia entre el ReEvaluateSubscriber y ReSubscribeSubscriber parametros cuando se deriva de los miembros en el codigo.

Una de las caracteristicas excelentes de la Negrita que han hecho la transicion a la ECO se deriva de los miembros. & nbsp Un miembro derivado es un poco como un campo calculado en un conjunto de datos, excepto que solo se calcula la primera vez que se solicita su valor y, a continuacion, que es el valor almacenado en la cache de tiempo de procesamiento.

Tome la persona FullName como un ejemplo. & nbsp nombre Completo se calcula de la

Resultado := Titulo de ''Nombre '' Apellido

El primer paso importante para la creacion de dicho atributo en el ECO es marcar el atributo Derivado. & nbsp en realidad, es posible especificar algunos 'Derivacion OCL' y tienen el ECO sistema de derivar todo para usted

titulo de ''nombre '' apellido

pero en este articulo se pretende mostrar como manejar mucho mas complicado de los escenarios.

Con un tipico conjunto de datos de campo calculado es de esperar, el metodo que se calcula cada vez que el valor es requerido. & nbsp Si el objeto actual se muestra como una lista en un DataGrid, a continuacion, llamar a este metodo para cada instancia cada vez que el DataGrid vuelve a pintar puede ser la CPU, especialmente si el valor se calcula a partir de otros atributos de objetos.

En la ECO el metodo se ejecuta la primera vez que el valor es solicitada, pero el resultado sera almacenado en cache de forma automatica dentro de la ECO espacio. & nbsp Futuras solicitudes para el valor de esta derivada miembro devolvera el valor almacenado en cache en su lugar. & nbsp El potencial de la CPU de ahorro de aqui es evidente, sobre todo con rutinas complicadas.

Un codigo derivado de metodo para un miembro tiene un nombre especifico lista de parametros, ECO utiliza la reflexion para encontrar el metodo. & nbsp de La estructura es

funcion DeriveAndSubscribe(ReEvaluateSubscriber,
& nbsp ReSubscribeSubscriber: ISubscriber):

en nuestra FullName ejemplo de ECO esperaria encontrar

la funcion FullNameDeriveAndSubscribe(ReEvaluateSubscriber,
& nbsp ReSubscribeSubscriber: ISubscriber): string

El problema aqui es este. & nbsp Si el valor de la Derivada de los estados solo se calcula una vez y, a continuacion, cache, ¿que ocurre si el valor de Titulo, Nombre o Apellido de los cambios? & nbsp

El ECO marco, obviamente, no tiene idea de lo que le hicieron a obtener el valor de este miembro, ni que los demas objetos/miembros fueron utilizados para el calculo. & nbsp Para asegurarse de que ECO nunca devuelve un valor incorrecto, se necesita saber cuando este miembro debe ser recalculado. & nbsp De hecho, lo que realmente necesita saber es cuando este miembro debe ser marcado como 'no Valido', no se actualizan hasta que su valor es requerido.

El ECO framework utiliza un tipo de patron observer para ver los objetos relevantes/miembros, siempre que uno de ellos se altera la EcoSpace marcara el miembro derivado no valido (derivados de un miembro a traves de 'Derivacion OCL' lugar estas suscripciones de forma automatica). & nbsp Asi, nuestro codigo ahora se ve algo como esto

la funcion FullNameDeriveAndSubscribe(ReEvaluateSubscriber, ReSubscribeSubscriber: ISubscriber): string
begin
& nbsp Resultado := Titulo de ''Nombre '' Apellido
& nbsp //Ahora ponemos o 'Suscripciones'
& nbsp Auto.AsIObject().Propiedades['Title'].SubscribeToValue(ReEvaluateSubscriber)
& nbsp Auto.AsIObject().Propiedades['Nombre'].SubscribeToValue(ReEvaluateSubscriber)
& nbsp Auto.AsIObject().Propiedades['Apellido'].SubscribeToValue(ReEvaluateSubscriber)
fin

El 'ReEvaluateSubscriber' es un observador de objeto que se pasa a nosotros desde algun lugar en el funcionamiento interno de la ECO marco. & nbsp Todo lo que tenemos que hacer es asegurarnos de suscribirse a todos los objetos relevantes/miembros. & nbsp cada vez que uno de estos depende de los elementos tiene su valor modificado, el ReEvaluateSubscriber dira el ECO de un marco en que el valor del o de los miembros debe ser 'Reevaluado' la proxima vez que se solicita.

Reevaluar o Suscribir?
Esto me lleva al ultimo punto. & nbsp Hay dos suscriptores que pasa a nuestro metodo, 'ReEvaluateSubscriber' y 'ReSubscribeSubscriber', asi que lo que el otro hace, y cuando se utiliza?

En el ejemplo anterior hemos utilizado la ReEvaluateSubscriber debido a que solo se necesita para saber cuando los valores de Titulo, Nombre o Apellido de cambio. & nbsp En un ejemplo mas complejo que podemos necesitar para hacer algo estructuralmente mas complicado, como la iteracion de cada OrderLine de un PurchaseOrder y suscribirse a los miembros de las relacionadas con los objetos en su lugar.

En este tipo de situacion, ¿que pasa si una nueva OrderLine se agrega? & nbsp podemos no es posible que ya se han suscrito a un objeto que aun no habia existido en el punto en el que hemos colocado nuestras suscripciones? & nbsp Lo que si un OrderLine es removido o eliminado?

Esto es exactamente lo que el ReSubscribeSubscriber. & nbsp suscriptor debe ser disparada cuando queremos decir 'Volcado de todas las suscripciones puse la ultima vez, vamos a empezar de nuevo'. & nbsp Basicamente, no es de los 'Valores' de los elementos que estan cambiando, necesitamos reemplazar nuestras suscripciones, ya que hay mas o menos objetos a tener en cuenta.

la funcion OrderValueDeriveAndSubscribe(ReEvaluateSubscriber,
& nbsp ReSubscribeSubscriber: ISubscriber): Decimal
var
& nbsp CurrentOrderLine: OrderLine
begin
& nbsp Resultado := 0
& nbsp para CurrentOrderLine en Auto.OrderLines hacer
& nbsp empezar
& nbsp & nbsp & nbsp Resultado := Resultado CurrentOrderLine.LineValue
& nbsp & nbsp & nbsp //Suscribirse a los miembros de la actual objeto secundario
& nbsp & nbsp & nbsp CurrentOrderLine.AsIObject().Propiedades['LineValue'].SubscribeToValue(ReEvaluateSubscriber)

& nbsp final
& nbsp //por ultimo, si el Auto.OrderLines lista de cambios en alguna manera
& nbsp //tenemos que desechar todos nuestras suscripciones y empezar de nuevo.
& nbsp Auto.AsIObject().Propiedades['OrderLines'].SubscribeToValue(ReSubscribeSubscriber)
fin

Conclusion
Espero que esto haya sido una revelacion en cuanto a las habilidades de codigo derivados de los miembros de la ECO. & nbsp Si no lo has hecho ya me gustaria recomendar la lectura de Rolf Lampa del articulo Dinamica de navegacion para un mayor rendimiento, fue escrito para la Negrita, pero los principios son los mismos.


Reevaluar o suscribir?

Reevaluar o suscribir? : Multi-millones de consejos para hacer su vida más fácil.
Recommander aux amis
  • gplus
  • pinterest

Comentario

Dejar un comentario

Clasificación