ホームページ > 記事 > ウェブフロントエンド > (I): Typescript と Java で「インターフェイス分離原則」を適用する
SOLID は、ロバート C. マーティン (アンクル ボブ) によって提案された、オブジェクト指向プログラミングの 5 つの基本原則を表す頭字語です。ここで彼の記事の詳細を読むことができます。
これらの原則は、コードの構造とメンテナンスを改善し、コードをより柔軟でスケーラブルにし、理解しやすくすることを目的としています。このような原則は、プログラマーがより組織化されたコードを作成し、責任を分割し、依存関係を減らし、リファクタリング プロセスを簡素化し、コードの再利用を促進するのに役立ちます。
頭字語の「I」は、「インターフェース分離原理」 を表します。ボブおじさんがこの原則を定義するために使用したフレーズは次のとおりです:
「顧客は使用しないインターフェイスに依存することを強制されるべきではありません」
インターフェイス分離原則は、一般的な問題、つまり必要のないクラスに不必要な実装を強制する大きすぎるインターフェイスに対処します。
ユーザーの認証にさまざまな方法 (パスワード、生体認証、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"); } }
この問題を解決するには、Authenticator インターフェースをより小さく、より具体的なインターフェースに分割できます。
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; } }
以上が(I): Typescript と Java で「インターフェイス分離原則」を適用するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。