MVC AOP 지향 지향 프로그래밍
나는 모든 사람이 AOP라는 단어에 노출되지 않았다고 생각하지만, 실제로 당신은 이미 디자인 모드에서 그것에 노출되었습니다. AOP가 사용하는 아이디어는 실제로 디자인 패턴과 동일합니다. 즉, 원래 코드를 수정하지 않고 함수가 추가되거나 수정됩니다. 또한 AOP는 주로 봄에 사용되지만이 기사에 작성된 내용은 MVC에만 사용되므로 조심하십시오.
1. 소개
소위 AOP (Aspect Oriented Programming의 약어)는 런타임 동안 사전 컴파일 방법 및 동적 에이전트를 통해 프로그램 기능의 통합 된 유지 보수를 구현하는 기술을 의미합니다. AOP는 OOP, 소프트웨어 개발의 뜨거운 주제, 스프링 프레임 워크의 중요한 부분 및 기능적 프로그래밍의 파생 패러다임의 연속입니다. 비즈니스 로직의 여러 부분을 AOP를 사용하여 분리하여 비즈니스 논리의 다양한 부분 간의 커플 링을 줄이고 프로그램의 재사용 성을 향상 시키며 개발 효율성을 향상시킬 수 있습니다.
위의 내용은 바이두 백과 사전에 대한 공식적인 설명이지만, 제 생각에 AOP는 실제로 전신을 움직이고 연결할 수있는 일종의 생각입니다. AOP는 실제로 동의 기능이나 호출 프로세스로 작성된 더 많은 프로그램 기관에 직면합니다. 측면을 나타내는 첫 번째 단어 측면에서, 우리는이 방법이 한 가지 측면을 구현하는 것임을 이해할 수 있습니다. 이것은 실제로 MVC의 글로벌 파일과 매우 유사하며 Spring 프레임 워크의 중요한 부분입니다. 기능 프로그래밍의 파생적 패러다임입니다. 비즈니스 로직의 여러 부분을 AOP를 사용하여 분리하여 비즈니스 논리의 다양한 부분 간의 커플 링을 줄이고 프로그램의 재사용 성을 향상 시키며 개발 효율성을 향상시킬 수 있습니다.
둘째, 사전 컴파일 특성은 일부 오류를 잘 처리하거나 일부 상황을 편견 할 수 있으며, 이는 설계시 허가와 통일 된 출력을 판단하는 데 더욱 일반화됩니다. "소스 코드를 수정하지 않고 프로그램에 기능을 동적으로 추가하기 위해 런타임 동안 사전 컴파일 방법과 동적 프록시를 통해 기술을 달성 할 수 있습니다. AOP는 실제로 GOF 설계 패턴의 연속입니다. 디자인 패턴은 발신자와 Callee 간의 분리를 끊임없이 추구하여 코드의 유연성과 규모를 향상시킬 수 있습니다. 위의 문장은 또한 AOP에 대한 좋은 해석입니다.
2. MVC의 구현
너무 많이 말하면서 살펴 보겠습니다. 먼저, 우리는 vs.에서 새로운 MVC 프로젝트를 만들고, MVC3 또는 4를 선택하고 괜찮습니다. 그런 다음 컨트롤러를 만들고, 마음대로 이름을 지은 다음,보기에 가장 간단한 HelloWorld를 작성해야합니다.
<! doctype html> <html> <head> <head> <title> index </title> </head> <body> <div> <a> 안녕하세요! 세계 </a> </div> </body> </html>
오른쪽 그림은 내가 만든 MVC 솔루션, 추가 컨트롤러 및보기를 보여줍니다. Hello를 표시하려면 위의 코드를 작성하십시오! 세계.
실행 후 (작동하지 않음) HelloWorld라는 단어가 웹 페이지에 나타 납니까?
다음으로 새 AOP 파일을 만들기 시작한 다음 사용합니다. 먼저 FilterPublic이라는이 프로젝트에 새 클래스를 추가하고 참조에 System.Web.mvc를 사용하여 참조를 추가 한 다음이 클래스가 ActionFilterAttribute에서 상속되도록하십시오. 모든 사람은 행동이라는 단어에주의를 기울여야합니다. 즉,이 일은 행동에 기초한다는 것을 의미합니다.
그런 다음 다음 코드를 작성합니다.
공개 문자열 메시지 {get; 세트; } public override void onactionExecuting (actionExecutingContext FilterContext) {base.onActionExecuting (filterContext); FilterContext.httpcontext.response.write ( "동작 실행 전" + 메시지 + "<br />"); } public override void onactionExecuted (actionExecutedContext FilterContext) {base.onActionExecuted (FilterContext); FilterContext.httpcontext.response.write ( "조치 실행 후" + 메시지 + "<br />"); } public override void onresultexecuting (resultexecutingContext filterContext) {base.onResulTeXecuting (FilterContext); FilterContext.httpcontext.response.write ( "결과 이전" + 메시지 + "<br />"); } public override void onresultexecuted (resultexecutedContext filterContext) {base.onResulTeXecuted (FilterContext); FilterContext.httpcontext.response.write ( "결과 후 return" + message + "<br />"); }이것은 필터에 의해 트리거 된 다양한 동작이며 컨트롤러의 기본 메소드를 다음과 같은 수정합니다.
[<span style = "font-size : 18px;"> filterpublic < /span> (message = "action")] public actionResult index () {httpcontext.response.write ( "action is ・・ <br />"); 반환 내용 ( "결과 result <br />"); } 그런 다음 컨트롤러 클래스 클래스에 문장 [FilterPublic (Message = "Controller")]을 추가 한 다음 실행하십시오. 무슨 일이 일어날까요?
실행 조치가 실행되기 전의 조치 ・・・ 실행 조치가 반환 된 후 실행 조치가 반환되기 전 결과가 결과를 반환 한 후 결과를 반환 한 후 반환 후 결과 후 결과.
컨트롤러의 메소드가 실행되기 전에 먼저 아래에서 설정 한 FilterPublic에서 코드를 실행할 것임을 알 수 있습니다. 그리고 행동이 다른 시간에 이루어지면 어떤 방법이 트리거되는지 알 수 있습니다.
그러나 컨트롤러에 작성된 컨트롤러 기반 메소드는 트리거되지 않았습니다. 이게 왜?
실제로이 문제는 매우 간단합니다. 우리가 AOP 프로그램을 설정할 때, 우리는 매개 변수를 설정하지 않았으며 필터를 중첩 할 수 없었습니다. 이 시점에서 우리는 당신이 작성한 필터 공개 클래스에 [AttributeStargets.all, alluctiple = true)]를 추가하며 다양한 필터 나 중첩 된 필터를 트리거 할 수 있습니다. 현재로서는 실행을 시도해 봅시다.
조치가 실행되기 전에 컨트롤러. 행동이 실행됩니다. 행동이 실행됩니다. 조치가 실행 된 후. 행동이 실행됩니다. 조치가 실행 된 후. 컨트롤러는 결과 전에 반환됩니다. 컨트롤러는 결과 전에 반환됩니다. 결과 후에 행동이 돌아오고 있습니다. 결과 후에 행동이 돌아오고 있습니다. 결과 후 컨트롤러가 반환됩니다.
이러한 방식으로 컨트롤러의 필터도 트리거되므로 AOP 메소드를 사용할 때는 자체 서면 메소드 또는 페이지의 기본로드 메소드에 필터 클래스 태그 만 작성하면됩니다.
따라서 모든 페이지를 트리거 해야하는 기능이 있다면 번거롭지 않습니까? 걱정하지 마세요. 지금은 우리의 차례입니다. global.asax 파일에 따라 RegisterGlobalfilters 메소드에 작성된 필터를 등록하겠습니다.
public static void registerglobalfilters (GlobalFilterCollection Filters) {filters.add (new HandleerRorattribute ()); // 자신의 필터를 Global Filters.add로 정의합니다 (new <span style = "font-size : 18px;"> filterpublic </span> () {message = "global <br/>"}); }그런 다음 실행하고 결과를 확인하십시오.
실행 전 글로벌 조치 실행 컨트롤러 조치 실행 전 실행 전 조치 수행 전 실행 조치 수행 전 실행 후 실행 후 조치 수행 후 실행 컨트롤러 작업 후 조치 후 전역 반환 결과 전역 반환 결과 컨트롤러 반환 결과 결과 결과가 반환 된 후 결과가 반환 된 결과 결과 결과 결과 결과 결과 결과 결과 결과 결과 결과를 얻은 후 결과적으로 컨트롤러 반환 결과 결과.
이러한 방식으로 글로벌 트리거링이 수행됩니다 (필터의 메시지는 계층 구조를 식별하는 데만 사용되며 공식적으로 사용될 때 정의 할 수 없습니다.)
이러한 관점에서 글로벌 메소드를 빠르게 추가하려면 새 필터를 작성한 다음 전역 파일을 변경하면됩니다. 매우 편리하지 않습니까?
위의 것은 AOP에 대한 나의 간단한 연구 중 일부입니다. 오류가 있으면 저를 수정하십시오.
읽어 주셔서 감사합니다. 도움이되기를 바랍니다. 이 사이트를 지원 해주셔서 감사합니다!