여기에 “도구 구현을위한 객체 지향 기술을 찾고 있다고 생각합니다.
두 가지 즉각적인 방법이 떠오르며 가장 일반적으로 사용되는 방법은 제가 추측하는 첫 번째 방법입니다.
-
실행되는 모든 메소드가 즉시 추가되는 글로벌 (싱글 톤 또는 보유한 것) 스택을 어딘가에 배치합니다. 글로벌 콜 체인을 효과적으로 유지 관리합니다. 계측하려는 각 방법의 끝, 다른 일반적인 계측 방법은 방법의 시작 부분에서 스톱워치를 시작하고 끝에서 중지하여 길이 등을 기록하는 것입니다.
-
모든 메소드 호출을위한 라우터 인 DI 유형 프레임 워크를 보유하십시오. 메시지 전달과 더 비슷하며,이 프레임 워크 내에서 위와 유사하게 발생하는 모든 메서드 호출을 스택에 적어 두어야합니다. 단 한 곳으로 중앙 집중화됩니다.
나는 AOP 프레임 워크 나 무언가를 사용하지 않고 # 2를 제안 할 수는 없지만, 100 % 메서드 호출에 대한 스택 추적을 유지하는 것은 내 눈에 약간의 극단적 인 도구입니다. 유형 항목을 디버깅하는 데 적합하며 “재귀 적 언어로 작업하지 않는 경우에 필요할 수 있습니다.하지만 프로덕션을 위해 이와 같은 것을 쉽게 해제 할 수 있고 방해가되지 않도록 최선을 다할 수 있습니다. 이것이 바로 제가 위의 # 2를 정말 좋아하지 않습니다.
둘 다 재귀 적 언어 내에서 필요하지 않으므로 교차 프로세스를 설명하는 경우를 제외하고 C #으로 구현해서는 안됩니다. 경계. (주의 : 올바르게 수행하면 반사보다 빠를 수 있을 수 있지만 유지 관리 비용으로 인해 가치가 없습니다)
댓글
IMHO 당신이 왜 이것이 필요하다고 생각하는지 진지하게 자문해야합니다.
MethodFoo()
가 어셈블리 A 또는 B에서 호출 될 때 다르게 동작하는 경우 호출 어셈블리는 MethodFoo()
예상치 못한 또는 잘못된 동작의 원인이 될 수 있습니다.따라서 대안으로 입력 매개 변수를 명시 적으로 만드십시오. 컨텍스트 또는 호출자를 나타내는 추가 매개 변수를 MethodFoo()
에 추가하십시오. enum
, string
매개 변수 또는
.
댓글