Pergunta

Tenho usado algumas soluções básicas de estilo AOP para questões transversais, como segurança, registro, validação, etc.Minha solução envolveu cerca de Castelo Windsor e DynamicProxy.Eu segui esse caminho porque posso aplicar tudo usando uma DSL baseada em Boo e manter meu código livre de atributos.Disseram-me no fim de semana para dar uma olhada PostSharp já que deveria ser uma solução "melhor".Dei uma olhada rápida no PostSharp, mas fiquei desanimado com o uso do atributo.

Alguém já tentou as duas soluções e gostaria de compartilhar suas experiências?

Foi útil?

Solução

Eu só olhei para Castle-Windsor por um curto período de tempo (ainda), então não posso comentar sobre isso, mas usei o Postharp.

Postsharp funciona tecendo em tempo de compilação.Ele anuncia uma etapa pós-compilação para sua construção, onde modifica seu código.O código é compilado como se você tivesse acabado de programar as preocupações transversais em seu código.Isso tem um desempenho um pouco melhor do que a tecelagem em tempo de execução e, devido ao uso de atributos, o Postsharp é muito fácil de usar.Acho que usar atributos para AOP não é tão problemático quanto usá-los para DI.Mas isso é apenas meu gosto pessoal.

Mas...

Se você já usa o castelo para injeção de dependência, não vejo uma boa razão para não usá-lo também para coisas de AOP.Acho que embora o AOP em tempo de execução seja um pouco mais lento do que em tempo de compilação, também é mais poderoso.AOP e DI são, na minha opinião, conceitos relacionados, então acho uma boa ideia usar uma estrutura para ambos.Então provavelmente irei dar uma olhada nas coisas do castelo novamente no próximo projeto. Preciso de AOP.

Outras dicas

Alguns pequenos problemas com o PostSharp...

Um problema que tive com o PostSharp é que, ao usar o asp.net, os números de linha para mensagens de exceção estão 'fora' pelo número de instruções IL injetadas em assemblies pelo PostSharp, pois os PDBs também não são injetados :-).

Além disso, sem os assemblies PostSharp disponíveis em tempo de execução, ocorrem erros de tempo de execução.Usando Windsor, os cortes transversais podem ser desativados posteriormente sem recompilar o código.

(espero que isso faça sentido)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top