Pergunta

Há um monte de implementação AOP em C #, VB.net. esta é uma das AOP Implementações:

O que é a melhor aplicação para AOP em .net? O que devo usar?

Foi útil?

Solução

Eu acho que Castelo Proxy Dinâmico é a solução de escolha se a intercepção dinâmico pode lidar com o seu precisa. Essa estrutura é usada internamente por um monte de outras estruturas que querem oferecer capacidades AOP. Normalmente, a maioria dos recipientes de IoC existentes agora fornecer alguns mecanismos de intercepção dinâmico (Spring.Net, Castelo de Windsor, StructureMap, etc.) Se você já trabalha com um contêiner IoC, talvez poderia ser mais fácil olhar para o que se propõe.

Se a intercepção dinâmico não pode atender às suas necessidades (tecer classe selada, interceptando chamada não-virtual, etc.), então você certamente quer tecelagem estática. PostSharp é a referência neste domínio.

Note que também existe Linfu , que pode ser usado para alavancar ambas as modas AOP.

Outras dicas

"melhor" é subjetivo.

Em primeiro lugar, elaborar uma lista das características que você precisa, sua arquitetura, etc. Em seguida, olhar para as opções que fazem o que você precisa, sem introduzir complexidade desnecessária. Por exemplo, vários são interface orientada: é o seu código atualmente interface orientada? Se não, PostSharp pode ser uma escolha melhor (sendo tecida em classes originais). Mas, claro, PostSharp não pode ser configurado em tempo de execução ... cavalos para cursos.

A melhor maneira de fazer programação orientada a aspectos em .NET é usando técnicas de design bem conhecidos. Por exemplo, através da aplicação das princípios sólidos você pode conseguir a flexibilidade e modularidade que você precisa para permitir a adição de preocupações transversais. Se você tem o direito design, você vai mesmo ser capaz de aplicar preocupações mais transversais, sem qualquer estrutura. É uma falácia pensar que OOP é inadequado para fazer AOP.

Aqui estão algumas dicas:

  • Não dependem de casos concretos, mas dependem de abstrações.
  • Não misture preocupações transversais e lógica de negócios na mesma classe.
  • Adicionando preocupações transversais por classes de envolvimento com lógica de negócios em classes que implementam essas preocupações ( decoradores ).
  • Encontre artefatos comuns em seu projeto e modelá-los igualmente, de preferência usando o mesmo tipo de abstrações. Dê uma olhada na este e este por exemplo.

Quando você tem as abstrações certas no lugar, adicionando novas preocupações transversais ao sistema é apenas uma questão de escrever uma nova classe decorador e envolvê-la em torno das implementações certas. Se abstrações são genéricos, você pode envolver um único decorador em torno de um grande grupo de aulas (que é exatamente o que AOP é sobre).

Apesar de técnicas como proxies dinâmicos e tecelagem código poderia torná-lo mais fácil trabalhar com um aplicativo mal projetado, não há realmente nenhuma alternativa para um bom design. Mais cedo ou mais tarde você vai se queimar. Isso não significa que a geração de proxy dinâmica e tecelagem código não deve ser usado embora. Mas, sem um design aplicação adequada até mesmo essas técnicas vai ser apenas marginalmente útil.

Eu não sei quanto a melhor, há um grande número de quadros e não o suficiente horas no dia para julgá-los todos.

Eu fiz uso PostSharp e fiquei agradavelmente surpreendido como é fácil para começar com ele.

Eu também olhei para AOP com o Castelo de Windsor e Spring.Net, a abordagem é diferente (runtime vs tempo de compilação). Misturando AOP e IoC parece fazer sentido. Quando você não está usando uma dessas estruturas no entanto, é muito mais trabalho para começar, mas não deixe que isso te parar.

Para novos projetos agora eu provavelmente usar o Castelo de Windsor, mas isso é principalmente porque eu também gostaria de usar IoC. Se eu tivesse que implementar rapidamente AOP em uma base de código existente eu usaria PostSharp.

Há também Injection Política e Unidade Intercepção da Microsoft.

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