Programação orientada a MVC AOP
Acredito que todos não foram expostos à palavra AOP, mas na verdade você já foi exposto a ela, apenas no modo de design. A idéia usada pela AOP é realmente a mesma que o padrão de design, ou seja, as funções são adicionadas ou modificadas sem modificar o código original. Além disso, a AOP é usada principalmente na primavera, mas o que está escrito neste artigo é usado apenas no MVC, portanto, tenha cuidado.
1. Introdução
A chamada AOP (abreviação da programação orientada a aspectos) significa uma tecnologia que implementa a manutenção unificada das funções do programa por meio de métodos de pré-compilação e agentes dinâmicos durante o tempo de execução. AOP é uma continuação da OOP, um tópico quente no desenvolvimento de software, uma parte importante da estrutura da primavera e um paradigma derivado de programação funcional. As várias partes da lógica de negócios podem ser isoladas usando a AOP, reduzindo assim o acoplamento entre as várias partes da lógica de negócios, melhorando a reutilização do programa e melhorando a eficiência do desenvolvimento.
O exposto acima é a explicação oficial da enciclopédia de Baidu, mas, na minha opinião, a AOP é realmente mais uma espécie de pensamento, um tipo de pensamento que pode se mover e conectar todo o corpo. Na verdade, a AOP enfrenta mais um corpo de programa escrito por uma função de consentimento ou um processo de chamada. A partir de seu aspecto da primeira palavra, que se refere a um aspecto, também podemos entender que esse método é implementar um aspecto. Na verdade, isso é muito semelhante ao arquivo global no MVC e também é uma parte importante da estrutura da mola. É um paradigma derivado da programação funcional. As várias partes da lógica de negócios podem ser isoladas usando a AOP, reduzindo assim o acoplamento entre as várias partes da lógica de negócios, melhorando a reutilização do programa e melhorando a eficiência do desenvolvimento.
Em segundo lugar, sua natureza de pré -compilação pode lidar bem com alguns erros ou prejudicar algumas situações, o que também o leva a se tornar mais comum em julgar as permissões e a produção unificada de algo ao projetar. "Uma tecnologia pode ser alcançada por meio de métodos de pré -compilação e proxy dinâmico durante o tempo de execução para adicionar dinamicamente funções aos programas sem modificar o código -fonte. AOP é na verdade uma continuação do padrão de design do GOF. O padrão de design está perseguindo incansavelmente o desacoplamento entre o chamador e o calele, melhorando essa flexibilidade e escalabilidade do código. A frase acima também é uma boa interpretação da AOP.
2. Implementação no MVC
Dito muito, vamos dar uma olhada. Primeiro, precisamos criar um novo projeto MVC no vs., selecionar MVC3 ou 4 e está ok, depois criar um controlador, nomeá -lo à vontade e, em seguida, criar sua visualização e escrever o helloworld mais simples na visão.
<! Doctype html> <html> <head> <title> ÍNDICE </TITLE> </SHEFT> <body> <div> <a> Olá! Mundo </a> </div> </body> </html>
A imagem à direita mostra a solução MVC que eu criei, o controlador adicionado e a visualização. Escreva o código acima na visualização para exibir olá! Mundo.
Depois de executar (não funciona), a palavra helloworld aparece na página da web?
Ok, em seguida, começamos a criar um novo arquivo AOP e depois o usamos. Primeiro, adicione uma nova classe a este projeto, chamada FilterPublic, adicione a referência usando o System.web.mvc na referência e, em seguida, deixe essa classe herdar do ActionFilterAttribute. Todos devem prestar atenção à ação da palavra, o que significa que essa coisa é baseada na ação.
Então escrevemos o seguinte código:
mensagem de string pública {get; definir; } substituição pública void onactionExecuting (ActionExecutingContext filterContext) {base.onactionExecuting (filtercontext); filterContext.httpContext.Response.write ("Antes da ação Execução" + mensagem + "<r />"); } substituição pública void onactionExecuted (ActionExectedEdContext filterContext) {base.onactionExecuted (filtercontext); filterContext.httpContext.Response.write ("Após a execução da ação" + mensagem + "<r />"); } substituição pública void onResulExecuting (ResultExecutingContext filterContext) {base.onResultExecuting (filtercontext); filterContext.httpContext.Response.write ("retornar antes do resultado" + mensagem + "<r />"); } substituição pública void onResulouseded (ResultExectedEdContext filterContext) {base.onResultExecuted (filtercontext); filterContext.httpContext.Response.write ("Retorno após resultado" + mensagem + "<r />"); }Essas são as várias ações desencadeadas pelo filtro e, em seguida, fazemos as seguintes modificações no método padrão no controlador:
[<span style = "font-size: 18px;"> filterpublic </span> (message = "action")] public ActionResult Index () {httpContext.Response.write ("Ação está executando ・・ <r />"); Retornar conteúdo ("Resultado ・・ <r />"); } Em seguida, adicione uma frase [filtropublic (message = "controlador")] na classe do controlador e execute -a. O que vai acontecer?
Ação antes da ação de execução está executando ・・・ Após o resultado da ação de execução, antes que a ação de execução esteja retornando o resultado ・・・ após o resultado do retorno após o retorno
Você pode ver que, antes que o método no controlador seja executado, primeiro executaremos o código no FilterPublic que definimos abaixo. E como a ação ocorre em momentos diferentes, também podemos ver qual método é acionado.
No entanto, o método baseado em controlador escrito no controlador não acionou. Por que isso?
De fato, esse problema é muito simples. Quando configuramos nosso programa AOP, não definimos os parâmetros e não permitimos que os filtros fossem sobrepostos. No momento, apenas adicionamos: [AttributeUsage (AttributeTargets.all, permitirmultiple = true)] para a classe FilterPublic que você escreveu e podemos acionar vários filtros ou filtros sobrepostos. Neste momento, vamos tentar correr:
Controlador antes da ação ser executada. Ação é executada. Ação é executada. Após a ação ser executada. Ação é executada. Após a ação ser executada. O controlador retorna antes do resultado. O controlador retorna antes do resultado. A ação está retornando após o resultado. A ação está retornando após o resultado. O controlador retorna após o resultado.
Dessa forma, o filtro no controlador também é acionado; portanto, quando usamos o método AOP, precisamos apenas gravar uma tag de classe de filtro em nosso próprio método escrito ou o método de carregamento padrão da página.
Então, se tivermos uma função que exija que todas as páginas sejam acionadas, não seria problemático? Não se preocupe, é a nossa vez de trabalhar neste momento. Basta registrar o filtro que você escreveu no método RegisterGlobalfilters sob o arquivo global.asax:
public static void Registerglobalfilters (Filtros GlobalFilterCollection) {filters.add (new HandleErrorAttribute ()); // Defina seu próprio filtro como Global Filters.add (novo <span style = "font-size: 18px;"> filterpublic </span> () {message = "global <br/>"}); }Em seguida, corra e veja os resultados:
Ação Antes da execução Ação global Antes da execução Ação do controlador antes da execução Antes da execução A ação está sendo executada ・・・ Após a ação após a ação da execução após a ação do controlador de execução após a execução do resultado do retorno global antes do resultado do retorno global antes do resultado do retorno do controlador antes do resultado da ação do resultado
Dessa forma, o acionamento global é feito (a mensagem no filtro é usada apenas para identificar a hierarquia e não pode ser definida quando usada formalmente.)
Nessa perspectiva, se você deseja adicionar rapidamente um método global, basta criar um novo filtro e alterar o arquivo global. Não é muito conveniente?
O exposto acima são algumas das minhas breves pesquisas sobre a AOP. Se houver algum erro, por favor me corrija.
Obrigado pela leitura, espero que isso possa ajudá -lo. Obrigado pelo seu apoio a este site!