>  기사  >  웹 프론트엔드  >  (I): Typescript 및 Java를 사용하여 \'인터페이스 분리 원칙\' 적용

(I): Typescript 및 Java를 사용하여 \'인터페이스 분리 원칙\' 적용

Patricia Arquette
Patricia Arquette원래의
2024-11-27 13:07:14665검색

(I): Aplicando o

개념

SOLID는 Robert C. Martin(밥 삼촌)이 제안한 객체지향 프로그래밍의 5가지 기본 원칙을 나타내는 약어입니다. 여기에서 그의 기사에 대한 자세한 내용을 읽어보실 수 있습니다.
이러한 원칙은 코드의 구조와 유지 관리를 개선하여 코드를 더욱 유연하고 확장 가능하며 이해하기 쉽게 만드는 것을 목표로 합니다. 이러한 원칙은 프로그래머가 보다 체계적인 코드를 작성하고, 책임을 나누고, 종속성을 줄이고, 리팩토링 프로세스를 단순화하고, 코드 재사용을 촉진하는 데 도움이 됩니다.

약어의 "I"는 "인터페이스 분리 원칙"을 의미합니다. Bob 삼촌이 이 원칙을 정의하기 위해 사용한 문구는 다음과 같습니다.

"어떤 고객도 자신이 사용하지 않는 인터페이스에 의존하도록 강요받아서는 안 됩니다."

인터페이스 분리 원칙은 일반적인 문제, 즉 필요하지 않은 클래스에 불필요한 구현을 강제하는 지나치게 큰 인터페이스를 해결합니다.

실제 적용

사용자를 인증하기 위해 다양한 방법(예: 비밀번호, 생체 인식, QR 코드)이 사용되는 애플리케이션의 인증 시스템을 상상해 보세요.

먼저 Java 및 Typescript에서 ISP를 사용하지 않고 이 클래스를 적용하는 방법을 살펴보겠습니다.

자바

interface Authenticator {
    boolean authenticateWithPassword(String userId, String password);
    boolean authenticateWithBiometrics(String userId);
    boolean authenticateWithQRCode(String qrCode);
}

class PasswordAuthenticator implements Authenticator {
    @Override
    public boolean authenticateWithPassword(String userId, String password) {
        System.out.println("Authenticating with password...");
        return true;
    }

    @Override
    public boolean authenticateWithBiometrics(String userId) {
        throw new UnsupportedOperationException("Not implemented");
    }

    @Override
    public boolean authenticateWithQRCode(String qrCode) {
        throw new UnsupportedOperationException("Not implemented");
    }
}

타이프스크립트

interface Authenticator {
  authenticateWithPassword(userId: string, password: string): boolean;
  authenticateWithBiometrics(userId: string): boolean;
  authenticateWithQRCode(qrCode: string): boolean;
}

class PasswordAuthenticator implements Authenticator {
  authenticateWithPassword(userId: string, password: string): boolean {
    console.log("Authenticating with password...");
    return true;
  }

  authenticateWithBiometrics(userId: string): boolean {
    throw new Error("Not implemented");
  }

  authenticateWithQRCode(qrCode: string): boolean {
    throw new Error("Not implemented");
  }
}

문제:

  1. 사용하지 않는 메서드: PasswordAuthenticator 클래스는 해당 기능에 적합하지 않은 메서드를 구현합니다.
  2. 유지 관리가 번거롭다: 인터페이스가 변경되면 새 메서드를 사용하지 않더라도 구현 클래스를 모두 변경해야 합니다.
  3. 단일 책임 위반: 수업에서 자신이 해서는 안 될 문제를 다루기 시작합니다.

문제를 해결하기 위해 인증자 인터페이스를 더 작고 구체적인 인터페이스로 나눌 수 있습니다.

자바

interface PasswordAuth {
    boolean authenticateWithPassword(String userId, String password);
}

interface BiometricAuth {
    boolean authenticateWithBiometrics(String userId);
}

interface QRCodeAuth {
    boolean authenticateWithQRCode(String qrCode);
}

class PasswordAuthenticator implements PasswordAuth {
    @Override
    public boolean authenticateWithPassword(String userId, String password) {
        System.out.println("Authenticating with password...");
        return true;
    }
}

class BiometricAuthenticator implements BiometricAuth {
    @Override
    public boolean authenticateWithBiometrics(String userId) {
        System.out.println("Authenticating with biometrics...");
        return true;
    }
}

class QRCodeAuthenticator implements QRCodeAuth {
    @Override
    public boolean authenticateWithQRCode(String qrCode) {
        System.out.println("Authenticating with QR Code...");
        return true;
    }
}

타이프스크립트

interface PasswordAuth {
  authenticateWithPassword(userId: string, password: string): boolean;
}

interface BiometricAuth {
  authenticateWithBiometrics(userId: string): boolean;
}

interface QRCodeAuth {
  authenticateWithQRCode(qrCode: string): boolean;
}

class PasswordAuthenticator implements PasswordAuth {
  authenticateWithPassword(userId: string, password: string): boolean {
    console.log("Authenticating with password...");
    return true;
  }
}

class BiometricAuthenticator implements BiometricAuth {
  authenticateWithBiometrics(userId: string): boolean {
    console.log("Authenticating with biometrics...");
    return true;
  }
}

class QRCodeAuthenticator implements QRCodeAuth {
  authenticateWithQRCode(qrCode: string): boolean {
    console.log("Authenticating with QR Code...");
    return true;
  }
}

리팩토링의 이점

  1. 특정 인터페이스: 각 클래스는 실제로 사용하는 메서드만 구현합니다.
  2. 유연성: 새로운 인증 방법이나 모드를 추가해도 기존 구현에는 영향을 미치지 않습니다.
  3. 간단한 유지 관리: 코드 변경으로 인한 영향을 줄이고 불필요한 리팩토링을 방지합니다.

결론

위 내용은 (I): Typescript 및 Java를 사용하여 \'인터페이스 분리 원칙\' 적용의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.