이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 21364|회답: 1

[출처] .net/C#은 간단한 AOP를 구현하기 위해 속성(Attribute)을 사용합니다

[링크 복사]
게시됨 2017. 4. 18. 오후 2:54:11 | | |

간단한 코드 한 조각부터 시작해 보겠습니다:



예를 들어 웹 프로그램이라고 가정해 봅시다. 먼저 세션을 확인하고, 권한을 확인하고, 트랜잭션을 시작하고, 로그를 작성하고, 직접 연산을 실행한 후 마지막으로 로그를 작성합니다. 분명히 위 연산에 대한 모든 메서드 호출을 DoSomething()에서 쓸 수는 없으니, 코드가 엉망이 될 텐데, 그럼 어떻게 해야 할까요?

spring 같은 프레임워크를 사용하는 등 구현 방법은 다양하지만, 실제 프로젝트에서는 프레임워크를 가볍게 도입하는 것이 불가능하며, 많은 경우 우리가 직접 메커니즘을 작성해야 합니다.

여기서 저는 MVC의 필터를 생각하는데, 컨트롤러나 액션에 속성 태그를 붙이기만 하면 메서드가 실행되기 전후에 다른 작업도 할 수 있습니다. 그럼 단순히 필터 구현을 시뮬레이션해 봅시다.

우선, 원래의 방법을 우아하게 특징 라벨 방식으로 변환합니다:




특징 태그의 경우, 특성 태그에 대응하는 클래스와 AOP 구현이 반드시 있어야 하며, 이는 파일이나 어셈블리에 독립적으로 포함될 수 있습니다.

먼저, 메서드에 붙은 라벨, 공허로 구현된 것:

//贴在方法上的标签
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]
public sealed class MyInterceptorMethodAttribute : Attribute { }
그 다음, 클래스에 붙일 레이블을 정의합니다:




다음은 다음과 같이 구현된 MyAopHandler 클래스의 정의입니다:




위 코드의 특정 연산 부분은 "프록시 클래스"와 동등하며, 이는 메서드 실행의 맥락을 본질적으로 변경합니다. delegate와 같은 객체지향 프로그램 구조를 사용하여 특정 구현을 외부 세계에 노출시켜 2차 개발을 할 수 있습니다.




이전의:ES5, ES6, ES2016, ES입니다. 다음: Javascrip{filter}t 버전은 어떻게 된 건가요?
다음:PowerShell 시작 튜토리얼 - v0.3 버전
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com