Estamos en proceso de rediseñar un software heredado para que sea más comprobable y hemos decidido que Dependency-Injection y Castle.Windsor nos ayuden.Patrón Multiple Decorator en castle-windsor
En primer lugar, nuestro objetivo: * Una serie de decoradores que funcionan en una secuencia de datos. * Son posibles múltiples combinaciones de decoradores y los nodos raíz en cada caso pueden ser necesarios para obtener datos de diferentes lugares.
Técnicamente, nuestro diseño es el siguiente:
interface IUpdateableValue<T>
{
T Get();
};
Tenemos, por ejemplo, tres conjuntos de datos se recuperen con un número de componentes, toda la implementación IUpdateableValue() (pseudo-código):
JsonParser(
Decompressor(
Decrypter(decryptionKey
FileCache(filename,
HttpWebDownloader(url))))
XmlParser(
Decompressor(
Decrypter(decryptionKey2
FileCache(filename2,
HttpWebDownloader(url2))))
estoy teniendo problemas para salir de diseño para caber en un marco como el DI-Castillo-Windsor . Sospecho que algunas de ellas podrían ser manejadas por instancias nombradas, pero esto parece mal para este uso.
La idea es que el "usuario" de, p. las instancias JsonParser y XmlParser no saben (ni se preocupan) si los datos provienen de un HttpUrl, un archivo o mágicamente se quitaron de un sombrero.
Estoy pensando que hay algo mal en nuestro diseño, pero no estoy seguro de cómo solucionarlo.
¿Alguna idea sobre cómo progresar?
Hay preguntas sobre el trabajo con decoradores genéricos en Windsor aquí en SO (como [este] (http://stackoverflow.com/questions/9888019)), pero no recuerdo que se haya respondido a nadie, por lo que Espero que esto sea difícil de hacer con Windsor. Otros contenedores, como Autofac o Simple Injector, pueden tener más éxito. Tal vez [esta página wiki sobre el registro de decoradores genéricos] (http://simpleinjector.codeplex.com/wikipage?title=Advanced-scenarios#Generic_Decorators) en Simple Injector podría darte algunas ideas sobre cómo diseñar tu sistema. – Steven
¿Por qué usaría Castle para esto? ¿Qué beneficios proporcionará? –