Estoy usando StructureMap
por el momento, generalmente con autoconfiguración basada en convenciones (Scan()
), y estoy buscando agregar caché basado en decorador a la tubería.Influencia de AOP con atributos a través de IoC; código de olor o elegante?
Si puedo configurar manualmente que está muy bien, pero Scan()
es tan conveniente cuando se obtiene gran cantidad de dependencias ... Estoy jugando con señalar caché sugerencias en la interfaz (s), por ejemplo:
public interface IFoo {
[CacheDuration(20)] // cache for 20 minutes
string[] DoSomethingReusable();
SomeType DoSomethingNonReusable(int key); // not cached
}
con la idea de que mediante la adición de una costumbre "convención" a StructureMap
's de barrido (bastante fácil) que puede detectar que uno -o-más métodos están decoradas para el almacenamiento en caché, y automáticamente inyectar un decorador de almacenamiento en caché generada en la tubería de ese tipo (generando una clave de caché a partir de la interfaz/nombre del método y parámetro va lues).
En el lado positivo, hace que agregar el almacenamiento en caché sea muy sencillo, solo decore un poco la interfaz; pero es un olor a código? ¿Y/o estoy duplicando algo que ya está resuelto?
+1 Esta respuesta plantea algunos puntos en los que no había pensado. Más munición contra atributos :) –
Re el segundo; para nuestro entorno la reconstrucción de la entidad no es diferente a la reconstrucción del código de nivel superior que registra/configura las cosas. –
podría no serlo, parte importante es que son constantes de tiempo de compilación, con todas las limitaciones que lo acompañan. –