Pregunta

estoy manteniendo una aplicación que ha sido diseñado de esta manera:

messy code --abuses--> simplePoco (POCO data capsule)

La cápsula de datos es una clase simple con las porciones de captadores y definidores (propiedades) Se utiliza un marco DI y utilizar consistentemente el contenedor IoC para proporcionar instancias de la cápsula de datos (por suerte!).

El problema es que necesito introducir un mecanismo de "notificación de cambio" en simplePoco

messy code --abuses--> simplePoco 
               |
               V
         changes logger,
         status monitor
     (I wanna know about changes)

Tengo un par de opciones:

  • Introducir un IPoco y modificar el código desordenado, por lo que puedo tener simplePoco para la velocidad o notifyingPoco cuando quiero cambiar la notificación (de forma selectiva lenta)? o ...

  • Hacer todo lo virtual y rodar mi propia clase notifyingPoco personalizado en la parte superior de simplePoco (aunque lento)?

  • Los patrones de diseño que no sé?

Se trata de un sistema cliente / servidor, pero sólo estoy modificando la parte del servidor por lo que si es posible, prefiero no toca el código desordenado o el código de cliente (hay serializadores y reflexiones y Ninja mete miedo ...) como para no romper accidentalmente nada.

haría con una interfaz impide JIT de inlining las llamadas a captador /?

¿Cuál es la mejor manera de ir teniendo en cuenta que los casos son simplePoco muy abusado?

¿Fue útil?

Solución

Cualquier tipo de llamada virtual (ya sea en la interfaz o directamente en una clase - todos llamadas de interfaz son virtuales!) No se inline por JIT CLR. Dicho esto, las llamadas de interfaz son ligeramente más lento, ya que deben ir siempre a través de la ruta de remoted potencialmente / proxy, y porque tienen que cambiar this-puntero a punto al comienzo de la clase antes de entrar en el cuerpo de la función. llamadas virtuales directamente en miembros de la clase no tienen que hacer el cambio, y, a menos que la clase se deriva de MarshalByRefObject, no golpear los controles de proxies.

Dicho esto, las diferencias de rendimiento entre estos dos son muy menor, por lo que probablemente debería ignorarlos y se centran en la limpieza del diseño y la facilidad de aplicación en su lugar.

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