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.
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:
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"); } }
Um das Problem zu lösen, können wir die Authenticator-Schnittstelle in kleinere, spezifischere Schnittstellen aufteilen.
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; } }
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!