Heim > Web-Frontend > js-Tutorial > (I): Anwendung des „Interface Segregation Principle' mit Typescript und Java

(I): Anwendung des „Interface Segregation Principle' mit Typescript und Java

Patricia Arquette
Freigeben: 2024-11-27 13:07:14
Original
731 Leute haben es durchsucht

(I): Aplicando o

Konzepte

SOLID ist ein Akronym, das fünf grundlegende Prinzipien der objektorientierten Programmierung darstellt, vorgeschlagen von Robert C. Martin – Onkel Bob. Hier können Sie mehr über seinen Artikel lesen.
Diese Prinzipien zielen darauf ab, die Struktur und Wartung des Codes zu verbessern und ihn flexibler, skalierbarer und verständlicher zu machen. Solche Prinzipien helfen dem Programmierer, besser organisierte Codes zu erstellen, Verantwortlichkeiten aufzuteilen, Abhängigkeiten zu reduzieren, den Refactoring-Prozess zu vereinfachen und die Wiederverwendung von Code zu fördern.

Das „I“ im Akronym steht für „Interface Segregation Principle“. Der Satz, mit dem Onkel Bob dieses Prinzip definierte, war:

„Kein Kunde sollte gezwungen werden, sich auf Schnittstellen zu verlassen, die er nicht nutzt“

Das Interface-Segregation-Prinzip behebt ein häufiges Problem: übermäßig große Schnittstellen, die unnötige Implementierungen in Klassen erzwingen, die sie nicht benötigen.

Praktische Anwendung

Stellen Sie sich ein Authentifizierungssystem in einer Anwendung vor, bei dem verschiedene Methoden zur Authentifizierung eines Benutzers verwendet werden (z. B. per Passwort, per Biometrie, per QR-Code).

Schauen wir uns zunächst die Anwendung dieser Klasse ohne Verwendung des ISP in Java und Typescript an:

Java

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");
    }
}

Nach dem Login kopieren

Typoskript

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");
  }
}
Nach dem Login kopieren

Probleme:

  1. Unbenutzte Methoden: Die PasswordAuthenticator-Klasse implementiert Methoden, die für ihre Funktion keinen Sinn ergeben.
  2. Ärgerliche Wartung: Wenn sich die Schnittstelle ändert, müssen alle implementierenden Klassen geändert werden, auch wenn sie die neuen Methoden nicht verwenden.
  3. Verletzung der Einzelverantwortung: Die Klassen beginnen, sich mit Anliegen zu befassen, die nicht ihre eigenen sein sollten.

Um das Problem zu lösen, können wir die Authenticator-Schnittstelle in kleinere, spezifischere Schnittstellen aufteilen.

Java

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;
    }
}

Nach dem Login kopieren

Typoskript

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;
  }
}
Nach dem Login kopieren

Vorteile des Refactorings

  1. Spezifische Schnittstellen: Jede Klasse implementiert nur die Methoden, die sie tatsächlich verwendet.
  2. Flexibilität: Das Hinzufügen neuer Authentifizierungsmethoden oder -modi hat keine Auswirkungen auf bestehende Implementierungen.
  3. Einfachere Wartung: Reduziert die Auswirkungen von Codeänderungen und vermeidet unnötige Refactorings.

Abschluss

Das obige ist der detaillierte Inhalt von(I): Anwendung des „Interface Segregation Principle' mit Typescript und Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage