Rumah > hujung hadapan web > tutorial js > (I): Menggunakan \'Prinsip Pengasingan Antara Muka\' dengan Typescript dan Java

(I): Menggunakan \'Prinsip Pengasingan Antara Muka\' dengan Typescript dan Java

Patricia Arquette
Lepaskan: 2024-11-27 13:07:14
asal
732 orang telah melayarinya

(I): Aplicando o

Konsep

SOLID ialah akronim yang mewakili lima prinsip asas pengaturcaraan berorientasikan objek, yang dicadangkan oleh Robert C. Martin - Uncle Bob. Di sini anda boleh membaca lebih lanjut tentang artikelnya.
Prinsip ini bertujuan untuk menambah baik struktur dan penyelenggaraan kod, menjadikannya lebih fleksibel, berskala dan lebih mudah difahami. Prinsip sedemikian membantu pengaturcara mencipta kod yang lebih teratur, membahagikan tanggungjawab, mengurangkan kebergantungan, memudahkan proses pemfaktoran semula dan menggalakkan penggunaan semula kod.

"I" dalam akronim bermaksud "Prinsip Pengasingan Antara Muka". Frasa yang uncle bob gunakan untuk mentakrifkan prinsip ini ialah:

"Tiada pelanggan harus dipaksa untuk bergantung pada antara muka yang mereka tidak gunakan"

Prinsip Pengasingan Antara Muka menangani masalah biasa: antara muka yang terlalu besar yang memaksa pelaksanaan yang tidak perlu ke dalam kelas yang tidak memerlukannya.

Aplikasi praktikal

Bayangkan sistem pengesahan dalam aplikasi, di mana kaedah berbeza digunakan untuk mengesahkan pengguna (cth., melalui kata laluan, dengan biometrik, dengan Kod QR).

Pertama, mari kita lihat aplikasi kelas ini tanpa menggunakan ISP dalam Java dan Typescript:

Jawa

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

Salin selepas log masuk

Skrip taip

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");
  }
}
Salin selepas log masuk

Masalah:

  1. Kaedah yang tidak digunakan: Kelas PasswordAuthenticator melaksanakan kaedah yang tidak masuk akal untuk fungsinya.
  2. Penyelenggaraan yang menyusahkan: Jika antara muka berubah, semua kelas pelaksana perlu ditukar, walaupun mereka tidak menggunakan kaedah baharu.
  3. Pelanggaran Tanggungjawab Tunggal: Kelas mula menangani kebimbangan yang tidak sepatutnya menjadi milik mereka.

Untuk menyelesaikan masalah, kami boleh membahagikan antara muka Pengesah kepada antara muka yang lebih kecil dan lebih khusus.

Jawa

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

Salin selepas log masuk

Skrip taip

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;
  }
}
Salin selepas log masuk

Faedah Pemfaktoran Semula

  1. Antara muka khusus: Setiap kelas hanya melaksanakan kaedah yang sebenarnya digunakan.
  2. Fleksibiliti: Menambah kaedah atau mod pengesahan baharu tidak memberi kesan kepada pelaksanaan sedia ada.
  3. Penyelenggaraan yang lebih mudah: Mengurangkan kesan perubahan kod, mengelakkan pemfaktoran semula yang tidak perlu.

Kesimpulan

Atas ialah kandungan terperinci (I): Menggunakan \'Prinsip Pengasingan Antara Muka\' dengan Typescript dan Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan