> 백엔드 개발 > C++ > 본문

\'Friend\' 종속성 선언을 리팩터링하는 방법: 과도한 상호 종속성을 제거하기 위한 단계별 가이드?

DDD
풀어 주다: 2024-11-05 10:02:02
원래의
364명이 탐색했습니다.

How to Refactor a

"친구" 종속성 선언을 리팩토링하는 방법

배경

두 클래스 사이의 "친구" 종속성을 제거하는 시나리오가 발생할 수 있습니다. 특히 과도한 상호 의존성, 유지 관리 문제 및 오래된 UML 표준에 대한 우려로 인해 더욱 그렇습니다.

1단계: 추상 인터페이스 도입

"friend" 클래스에 의해 노출된 메서드를 추출하고 새로운 추상 인터페이스. "friend" 클래스에서 인터페이스로 종속 관계를 설정하고 다른 클래스에서 인터페이스로 "호출" 종속성을 설정합니다.

2단계: 작업을 인터페이스로 이동

작업 이동 종속 클래스에서 추상 인터페이스로의 "호출" 종속성을 구성합니다. 인터페이스가 상속 목적을 위해 보호된 생성자를 확장하도록 만들고 종속 클래스와 인터페이스 간의 보호된 일반화 연관을 숨깁니다.

3단계: 함께 구현

마지막 단계에서 메서드를 만듭니다. "friend" 클래스에서 추상 인터페이스의 참조를 종속 클래스에 전달합니다. 필요한 연결을 설정하려면 초기화 중에 종속 클래스에서 이 메서드를 호출하세요.

구현

ClassA(공급자):

<code class="cpp">class ClassA : protected InternalInterface {
    public:
        attachAccessor(ClassAAccessor &accessor) {
            accessor.setInternalInterfaceRef(*this);
        }
};</code>
로그인 후 복사

ClassAAccessor(친구):

<code class="cpp">class ClassAAccessor {
    public:
        ClassAAccessor(ClassA& classA) : internalInterfaceRef(0) {
            classA.attachAccessor(*this);
        }
    private:  
        InternalInterface* internalInterfaceRef;
};</code>
로그인 후 복사

장점

  • 클래스 간의 불필요한 종속성을 제거
  • 최신 UML 표준 준수
  • 내부 작업을 공개적으로 숨겨 액세스 제어를 시행

제한

  • 코드 복잡성이 증가할 수 있음
  • 추상적인 인터페이스가 필요하여 성능 및 메모리 공간에 영향을 미침
  • 보호된 일반화 관계의 UML 표현은 어려울 수 있습니다

위 내용은 \'Friend\' 종속성 선언을 리팩터링하는 방법: 과도한 상호 종속성을 제거하기 위한 단계별 가이드?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!