2008-09-15 7 views
12

저는 보안, 로깅, 유효성 검사 등과 같은 크로스 커팅 문제에 기본 AOP 스타일 솔루션을 사용했습니다. 내 솔루션은 Castle Windsor 및 DynamicProxy 부근에 있습니다. 부 라우 (Boo) 기반 DSL을 사용하여 모든 것을 적용 할 수 있고 코드에서 속성을 깨끗하게 유지할 수 있기 때문에이 방법을 사용하지 않았습니다. 나는 주말에 PostSharp을 "더 나은"해결책으로 생각하고 있다고 들었다. PostSharp를 간략하게 살펴 봤지만, 애트리뷰트 사용법은 미루어.AOP 적용

누구나 두 가지 해결책을 시도해 본 경험이 있습니까?

답변

9

저는 성 - 윈저를 잠깐 (아직) 보았습니다. 그래서 나는 그것에 대해 언급 할 수는 없지만 postsharp를 사용했습니다.

포스트 샤프는 컴파일 타임에 직조 작업을합니다. 코드를 수정하는 빌드 후 단계로 광고합니다. 코드는 교차 절단 문제를 코드에 프로그래밍 한 것처럼 컴파일됩니다. 이것은 런타임 짜기보다 약간 더 효과적이며 속성을 사용하기 때문에 Postsharp는 매우 사용하기 쉽습니다. 나는 AOP를위한 속성을 사용하는 것이 DI를 위해 사용하는 것만 큼 문제가되지 않는다고 생각한다. 하지만 그건 내 개인 취향 뿐이야.

하지만 ...

이미 의존성 주입을위한 성을 사용하는 경우 당신은 또한 AOP의 물건을 사용하지 말아야하는 이유 좋은 이유가 표시되지 않습니다. 나는 런타임시 AOP가 컴파일 타임보다 약간 느리지 만 더 강력하다고 생각한다. AOP와 DI는 내 생각에 관련된 개념입니다. 그래서 두 프레임 워크 모두에 하나의 프레임 워크를 사용하는 것이 좋습니다. 그래서 나는 아마도 AOP가 필요한 다음 프로젝트를 다시 성의 물건으로 볼 것입니다. 내가 PostSharp로 했어 PostSharp와 사소한 문제의

14

커플 ...

한 가지 문제는 asp.net을 사용하는 동안, 예외 메시지에 대한 행 번호가 주입 IL 지침의 숫자로 '아웃'되는 것입니다 PDBs가 주사되지 않기 때문에 PostSharp에 의해 엉덩이가 :-).

또한 런타임시 PostSharp 어셈블리를 사용할 수 없으면 런타임 오류가 발생합니다. Windsor를 사용하면 크로스 컴파일은 나중에 코드를 재 컴파일하지 않고 끌 수 있습니다.

+5

이 난에서 발견 꽤 오래된 대답은 (이 말이 바랍니다)하지만, 난 그냥 디버깅 문제가 더 이상 없도록 PostSharp 지금 실제로 (참조 PDB 파일을 변환 않습니다 싶어 : http://stackoverflow.com/questions/2006508/postsharp-pdb-debugging-and-referenced-assemblies) –