Rumah >hujung hadapan web >tutorial js >Jadual Keputusan dalam TypeScript: Corak Diremehkan untuk Kod Lebih Bersih

Jadual Keputusan dalam TypeScript: Corak Diremehkan untuk Kod Lebih Bersih

PHPz
PHPzasal
2024-09-06 21:00:43656semak imbas

Decision Tables in TypeScript: An Underrated Pattern for Cleaner Code

Apabila membina sistem perisian yang kompleks, pembangun sering menggunakan if-else yang panjang atau menukar kenyataan untuk mengendalikan logik membuat keputusan.

Walaupun pendekatan ini boleh berfungsi, pendekatan ini menjadi tidak terurus dengan cepat apabila bilangan keadaan bertambah. Di sinilah jadual keputusan masuk.

Corak berkuasa tetapi kurang digunakan yang memudahkan proses membuat keputusan yang rumit dengan cara yang bersih dan boleh diselenggara.

Dalam artikel ini, kami akan meneroka apakah jadual keputusan, sebab anda perlu menggunakannya dan cara melaksanakannya dalam TypeScript untuk mengendalikan logik yang kompleks dengan mudah.

Apakah jadual keputusan?

Jadual keputusan ialah cara berstruktur untuk memetakan pelbagai kombinasi keadaan input kepada tindakan atau hasil yang sepadan. Fikirkannya sebagai jadual di mana setiap baris mewakili gabungan unik pembolehubah input, dan lajur yang sepadan mentakrifkan output atau tindakan. Ini membolehkan anda menggambarkan semua senario yang mungkin di satu tempat, menjadikannya lebih mudah untuk diurus dan difahami.

Sebagai contoh, katakan anda sedang membina platform e-dagang dan perlu menghantar templat e-mel yang berbeza kepada pengguna berdasarkan status pelanggan mereka, sejarah pembelian, promosi yang tersedia dan bahasa pilihan.

Dengan 3 pembolehubah boolean (isGoldCustomer, isFirstPurchase, isPromoAvailable) dan satu pembolehubah enum (emailLanguage), terdapat 24 kemungkinan kombinasi untuk dikendalikan.

Tetapi daripada menulis 24 if-else atau menukar kes, jadual keputusan menyediakan penyelesaian yang lebih bersih.

Mengapa Menggunakan Jadual Keputusan?

Jadual keputusan menawarkan beberapa kelebihan berbanding logik bersyarat tradisional:

  • Kebolehbacaan yang Dipertingkat: Satu jadual menangkap semua kombinasi yang mungkin, menjadikannya lebih mudah untuk difahami dengan sepintas lalu.
  • Penyelenggaraan Lebih Mudah: Mengubah suai logik menjadi semudah mengemas kini satu baris dalam jadual berbanding menyisir baris keadaan bersarang.
  • Skalabiliti: Jadual keputusan boleh mengendalikan senario membuat keputusan yang lebih kompleks tanpa menjadi tidak terurus.

Mari kita mendalami cara melaksanakan jadual keputusan dalam TypeScript.

Bagaimana untuk melaksanakan jadual keputusan dalam TypeScript

Cara paling mudah untuk melaksanakan jadual keputusan dalam TypeScript ialah menggunakan tatasusunan objek. Setiap objek mewakili satu baris dalam jadual keputusan.
Kemudian anda boleh menggunakan kaedah cari tatasusunan untuk mencari baris yang sepadan dengan pembolehubah input dan mengembalikan nilai output yang sepadan.

type TEmailLanguage = 'en' | 'es' | 'fr';

interface IDecisionTableRow {
  //These are the input values that determine the output value
  isGoldCustomer: boolean;
  isFirstPurchase: boolean;
  isPromoAvailable: boolean;
  emailLanguage: TEmailLanguage;

  // The last property is the output value
  template: string;
};

const DECISION_TABLE: IDecisionTableRow[] = [
  {
    isGoldCustomer: true,
    isFirstPurchase: true,
    isPromoAvailable: true,
    emailLanguage: 'en',
    template: 'welcome_en.html',
  },
  {
    isGoldCustomer: true,
    isFirstPurchase: true,
    isPromoAvailable: true,
    emailLanguage: 'es',
    template: 'welcome_es.html',
  },
  {
    isGoldCustomer: true,
    isFirstPurchase: true,
    isPromoAvailable: true,
    emailLanguage: 'fr',
    template: 'welcome_fr.html',
  },
  // more rows...
];

const getTemplate = (
  isGoldCustomer: boolean,
  isFirstPurchase: boolean,
  isPromoAvailable: boolean,
  emailLanguage: EmailLanguage
): string => {
  const row = decisionTable.find(
    (row) =>
      row.emailLanguage === emailLanguage &&
      row.isGoldCustomer === isGoldCustomer &&
      row.isFirstPurchase === isFirstPurchase &&
      row.isPromoAvailable === isPromoAvailable 
  );

  if (!row) {
    throw new Error('No matching row in decision table');
  }

  return row.template;
};

Dalam contoh ini, kami mempunyai tatasusunan objek yang dipanggil DECISION_TABLE yang mewakili jadual keputusan.
Setiap objek mempunyai 4 sifat yang mewakili pembolehubah input dan 1 sifat yang mewakili nilai output.

Fungsi getTemplate mengambil pembolehubah input sebagai argumen dan menggunakan kaedah cari untuk mencari baris dalam jadual keputusan yang sepadan dengan pembolehubah input.

Jika tiada baris ditemui, fungsi tersebut menimbulkan ralat.

Dan itu sahaja! Anda kini mempunyai cara yang bersih dan boleh diselenggara untuk mengendalikan logik kompleks yang bergantung pada berbilang pembolehubah input.

Pertimbangan Tambahan

  • Keutamaan Peraturan: Jika berbilang peraturan sepadan dengan syarat input, anda mungkin perlu menentukan mekanisme keutamaan untuk menentukan output yang betul.
  • Nilai Lalai: Pertimbangkan untuk menyediakan output lalai sekiranya tiada peraturan yang sepadan ditemui.
  • Pengesahan Data: Laksanakan pengesahan untuk memastikan bahawa nilai input adalah sah dan dalam julat yang dijangkakan.

Kesimpulan

Jadual keputusan menawarkan pendekatan yang berkuasa dan berkesan untuk mengurus logik membuat keputusan yang kompleks dalam TypeScript. Dengan menyediakan perwakilan peraturan yang jelas dan berstruktur, ia meningkatkan kebolehbacaan kod, kebolehselenggaraan dan kebolehskalaan. Dengan mengguna pakai jadual keputusan dalam projek anda, anda boleh meningkatkan kualiti dan kecekapan keseluruhan pangkalan kod anda.

Jadi apabila anda mendapati diri anda menulis sekumpulan pernyataan if-else atau menukar pernyataan untuk mengendalikan logik yang kompleks, pertimbangkan untuk menggunakan jadual keputusan.

Selamat pengekodan!

Atas ialah kandungan terperinci Jadual Keputusan dalam TypeScript: Corak Diremehkan untuk Kod Lebih Bersih. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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