문제

다음과 같이 설계된 응용 프로그램을 유지하고 있습니다.

messy code --abuses--> simplePoco (POCO data capsule)

Data Capsule은 DI 프레임 워크를 사용하고 IOC 컨테이너를 지속적으로 사용하여 데이터 캡슐 (Lucky Me!)을 사용하여 일관되게 IOC 컨테이너를 사용하는 간단한 클래스입니다.

문제는 "변경 사항 변경"메커니즘을 도입해야한다는 것입니다. simplePoco

messy code --abuses--> simplePoco 
               |
               V
         changes logger,
         status monitor
     (I wanna know about changes)

몇 가지 옵션이 있습니다.

  • 소개 IPoco 지저분한 코드를 수정하여 simplePoco 속도 또는 notifyingPoco 변경 알림 (선택적으로 느리게)을 원할 때? 또는 ...

  • 모든 것을 가상으로 만들고 내 자신의 관습을 굴리십시오 notifyingPoco 위에 클래스 simplePoco (느리게)?

  • 내가 모르는 디자인 패턴?

클라이언트/서버 시스템이지만 서버 부분을 수정하고 있으므로 가능하면 오히려 ~ 아니다 지저분한 코드 또는 클라이언트 코드 (시리얼 라이저 및 반사 및 무서운 닌자 물건이 있습니다 ...)는 실수로 아무것도 깨지 않도록 터치합니다.

인터페이스를 사용하면 JIT가 getter/setter에 대한 호출을 일으키는 것을 방지합니까?

SimplePoco 인스턴스를 고려하는 가장 좋은 방법은 무엇입니까? 무겁게 학대?

도움이 되었습니까?

해결책

모든 종류의 가상 호출 (인터페이스에서 또는 클래스에서 직접 - 모두 인터페이스 호출은 가상입니다!)는 CLR JIT에 의해 인쇄되지 않습니다. 즉, 인터페이스 호출은 항상 잠재적으로 회상/프록스 경로를 거쳐야하며 이동해야하기 때문에 약간 느립니다. this-기능의 본문에 들어가기 전에 수업 시작 부분을 가리키는 포인터. 클래스 멤버에 대한 가상 전화는 교대를 할 필요가 없으며, 수업이 도출되지 않는 한 MarshalByRefObject, 프록시 검사에 도달하지 마십시오.

즉,이 둘 사이의 성능 차이는 매우 작은이므로 아마도 그것들을 무시하고 디자인의 청결성과 구현의 용이성에 집중해야 할 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top