Students Save 30%! Learn & create with unlimited courses & creative assets Students Save 30%! Save Now
Advertisement
  1. Code
  2. WordPress Plugins
Code

Autoloading Berorientasikan Objek di WordPress, Bahagian 2

by
Difficulty:IntermediateLength:LongLanguages:
This post is part of a series called Object-Oriented Autoloading in WordPress.
Object-Oriented Autoloading in WordPress, Part 1
Object-Oriented Autoloading in WordPress, Part 3

Malay (Melayu) translation by Neurion (you can also view the original English article)

Dalam tutorial terdahulu, kami merangkumi beberapa konsep, yang semuanya perlu untuk memahami sepenuhnya apa yang kami lakukan dalam tutorial ini.

Khususnya, kami meliputi topik berikut:

  • antara muka berorientasikan objek
  • prinsip tanggungjawab tunggal
  • bagaimana rupa ini dalam PHP
  • di mana kita menuju dengan plugin kami

Dalam beberapa siri, mudah untuk melangkau tutorial yang tidak boleh membina satu sama lain; Walau bagaimanapun, siri ini tidak dimaksudkan untuk menjadi seperti itu. Sebaliknya, ia dimaksudkan untuk dibaca dalam susunan berurutan, dan ia bertujuan untuk membina kandungan setiap tutorial sebelumnya.

Dengan itu, saya mengandaikan bahawa anda semua terperangkap.

Bermula

Walaupun saya mungkin telah menyebutnya dalam tutorial pertama, saya masih ingin memastikan kita semua berada di halaman yang sama berkenaan dengan apa yang kita lakukan dalam setiap tutorial dan dengan perisian apa yang akan anda perlukan.

Ralat Jalan Kami

Jadi dalam tutorial ini, pelannya adalah seperti berikut:

  1. Periksa kod yang telah kami tulis setakat ini.
  2. Tentukan bagaimana kita dapat refactor menggunakan teknik berorientasikan objek.
  3. Sediakan garis besar peringkat tinggi untuk pelaksanaan kami.

Pada akhirnya, kami tidak akan menulis banyak kod dalam tutorial ini, tetapi kami akan menulis beberapa. Walau bagaimanapun, ia adalah satu tutorial praktikal kerana kami melakukan analisis dan reka bentuk berorientasikan objek. Ini merupakan fasa yang perlu bagi banyak projek berskala besar (dan sesuatu yang sepatutnya berlaku untuk projek kecil).

Apa yang Anda Perlu

Sekiranya anda telah mengikutinya, anda sepatutnya telah menetapkan ini. Tetapi untuk memastikan, ini adalah versi pendek semua yang anda perlukan:

  • persekitaran pembangunan tempatan yang sesuai untuk sistem pengendalian anda
  • direktori di mana WordPress 4.6.1 sedang dihoskan
  • editor teks atau IDE
  • pengetahuan API Plugin WordPress

Dengan semua itu, kami bersedia untuk bekerja pada kod yang dikongsi dalam tutorial sebelumnya. Jadi mari kita mulakan.

Menganalisa Kod

Perkara pertama yang ingin kita lakukan ialah menganalisis keadaan semasa autoloader kita. Ia mungkin kelihatan seperti banyak kod untuk dimasukkan ke dalam satu blok kod, tetapi itu sendiri dan menunjukkan kepada kami bahawa kami mempunyai beberapa tugas untuk dilakukan.

Dengan kata itu, inilah keadaan semasa autoloader kami:

Pada ketika ini, ingat bahawa prinsip tanggungjawab tunggal menyatakan perkara berikut:

Kelas hanya mempunyai satu sebab untuk berubah.

Sekarang, kita bahkan tidak mempunyai kelas, apalagi banyak kaedah individu yang mempunyai satu pun alasan untuk berubah.

Dan walaupun mungkin masuk akal untuk bermula dengan memecahkan kaedah autoloader ini kepada kaedah yang lebih kecil, individu, mari bermula dari tahap yang lebih tinggi dan mula berfikir tentang autoloader dari segi antara muka. Kemudian kami akan mengetengahkan kelas (atau kelas).

Analisis Berorientasikan Objek: Tanggungjawab

Ingat dari tutorial sebelumnya bahawa antara muka ditakrifkan oleh manual PHP seperti berikut:

Antara muka objek membolehkan anda membuat kod yang menentukan kaedah mana kelas mesti dilaksanakan, tanpa perlu menentukan bagaimana kaedah ini dikendalikan.

Memandangkan kod dan definisi di atas, mari kita fikirkan tentang apa yang perlu dilakukan oleh autoloader dari perspektif yang lebih modular. Khususnya, mari memecahkannya ke dalam mata yang mewakili apa yang mungkin cukup untuk berubah. Tidak, kita tidak boleh menggunakan semua perkara ini, tetapi inilah sebabnya ia dipanggil analisis. Kami akan bekerjasama pada reka bentuk kemudian.

Kod ini yang berikut:

  1. Mengesahkan kami bekerja secara eksplisit dengan ruang nama kami.
  2. Memisahkan nama kelas yang masuk ke dalam bahagian untuk menentukan sama ada kelas atau antara muka (jadi $ class_name adalah nama pembolehubah yang tidak baik).
  3. Semak untuk melihat sama ada kami bekerja dengan fail antara muka.
  4. Cek untuk melihat sama ada kami bekerja dengan fail kelas.
  5. Cek untuk melihat sama ada kami bekerja dengan antara muka.
  6. Berdasarkan hasil syarat di atas, menghasilkan nama fail.
  7. Membina laluan fail berdasarkan nama fail yang dijana.
  8. Jika fail itu wujud pada nama yang dihasilkan, masukkannya.
  9. Jika tidak, kod itu menghasilkan ralat.

Oleh itu, kod di atas melakukan sembilan perkara-iaitu, ia mempunyai sekurang-kurangnya sembilan alasan untuk berubah-sebelum ia selesai menyelesaikan tugasnya.

Ini tidak boleh dikatakan, tetapi fungsi khusus ini merupakan contoh yang sempurna yang boleh kita refactor untuk menunjukkan analisis berorientasi objek, reka bentuk, antara muka, dan pelaksanaan.

Dan ini menimbulkan persoalan: Di manakah kita bermula?

Analisis Berorientasikan Objek

Pada ketika ini, adalah adil untuk mengatakan bahawa kita boleh mula melakukan analisis berorientasikan objek-iaitu, melihat apa kelas yang mungkin kita ada dan bagaimana mereka berinteraksi-diberikan segala yang kita telah disenaraikan di atas. Ingat, kami juga mahu prinsip tanggungjawab tunggal untuk membantu membimbing kami dalam membuat keputusan kami.

Pada ketika ini, kita tidak terlalu bimbang tentang bagaimana kelas-kelas akan berkomunikasi dengan satu sama lain. Sebaliknya, kita lebih tertumpu pada mewujudkan kelas yang mempunyai satu punca untuk berubah.

Dengan itu, saya akan menyediakan satu set contoh kelas yang saya fikir mungkin berfungsi. Sebelum pergi lagi, lihat apa yang telah kami lakukan dan cuba buat senarai anda sendiri. Kemudian kita dapat membandingkan nota.

Satu Perkataan Mengenai Kemahiran

Perhatikan bahawa anda mungkin mempunyai idea yang lebih baik daripada apa yang disenaraikan di bawah, atau anda mungkin mengambil sesuatu dari apa yang telah kami kongsi. Walau apa pun, ini adalah latihan pembelajaran. Kami cuba memperbaiki kod kami, organisasi kami, dan akhirnya menjadi pengaturcara yang lebih baik.

Kelas Potensi Kami

Memandangkan apa yang saya telah disenaraikan di atas, saya telah tampil dengan kelas berikut:

  1. Autoloader. Ini adalah kelas utama yang bertanggungjawab untuk akhirnya termasuk kelas kami, ruang nama kami, atau antara muka kami. Kami akan memanggil kelas ini. Selebihnya adalah kelas yang akan mengurus kerja yang diperlukan bahawa kelas satu ini perlu memasukkan fail tersebut.
  2. NamespaceValidator. Fail ini akan melihat kelas, antara muka, atau apa yang anda ada, dan akan menentukan sama ada ia sah. Ini akan memberi kita faktor penentu jika kita boleh meneruskan dengan kod kami yang lain tidak.
  3. FileInvestigator. Kelas ini melihat jenis fail yang dihantar ke autoloader. Ia akan menentukan sama ada kelas, antara muka, atau ruang nama dan mengembalikan nama path yang lengkap kepada fail supaya ia boleh dimasukkan.
  4. FileRegistry. Ini akan menggunakan laluan fail berkelayakan yang akhirnya dipulangkan dari kelas lain dan akan memasukkannya ke dalam plugin.

Dan itu sahaja. Sekarang kelas pihak ketiga dalam plugin kami hanya perlu tahu tentang kelas autoloader, tetapi autoloader memerlukan pengetahuan kelas lain, dan kelas lain memerlukan pengetahuan mengenai kelas lain.

Ada cara untuk mengendalikan ini (menggunakan bekas suntikan ketergantungan, tetapi itu di luar skop projek ini). Tetapi apa yang akan kami lakukan melalui kod kami adalah meminimumkan berapa banyak kelas yang mengetahui tentang satu sama lain.

Reka Bentuk Berorientasikan Objek

Pada ketika ini, pemaju, firma, agensi, dan pasukan yang berbeza akan mengambil pendekatan yang berbeza tentang bagaimana mereka mereka bentuk sistem di mana mereka bekerja.

Salah satu cara yang paling biasa untuk melakukan ini ialah dengan menggunakan sesuatu yang dipanggil gambarajah UML. Walaupun ia berguna, ia bukan sesuatu yang patut dilakukan dalam skop tutorial ini kerana ia memerlukan keseluruhan tutorial lain untuk menjelaskan semua kepingan.

Oleh itu untuk tujuan tutorial kami, dan kerana kami bekerja dengan sejumlah kecil kod tersebut, kami akan cuba untuk merancang bagaimana setiap kelas di atas dapat berfungsi sebelum kami melaksanakannya. Dengan cara ini, kami akan mendapat idea tentang bagaimana kami dapat mengatur kod kami.

Harap maklum bahawa kami tidak akan menjadi nama dalam mana-mana kod ini lagi, dan tidak ada kod ini yang harus dilaksanakan atau diuji terhadap WordPress belum lama ini. Kami akan masuk ke dalam tutorial seterusnya.

Mari bermula dengan Autoloader dan kerja dari sana.

pengisi automatik

Ingat, kelas ini bertanggungjawab untuk memasukkan fail yang diperlukan. Ini adalah fail yang akan didaftarkan dengan fungsi spl_autoload_register.

Ambil perhatian bahawa kelas ini bergantung pada NamespaceValidator dan kelas FileRegistry. Kami akan melihat setiap ini dengan lebih terperinci dalam seketika.

NamespaceValidator

Fail ini akan melihat nama fail masuk dan akan menentukan sama ada ia sah. Ini dilakukan dengan melihat ruang nama dalam nama fail.

Jika fail itu sebenarnya milik ruang nama kami, maka kami boleh menganggapnya selamat untuk memuatkan fail kami.

FileInvestigator

Kelas ini melakukan sedikit kerja, walaupun sebahagiannya dilakukan melalui kaedah penolong yang sangat mudah dan sangat kecil. Sepanjang pelaksanaan, ia melihat jenis fail yang diluluskannya.

Ia kemudian mengambil nama fail yang lengkap untuk jenis fail.

Sekiranya ada fail yang boleh diubahsuai sedikit lagi, maka inilah ia. Lagipun, ia cuba menentukan sama ada kita bekerja dengan kelas, antara muka, atau kelas. Kilang mudah mungkin lebih sesuai untuk ini.

Apabila tiba masanya untuk melaksanakan kod kami, mungkin kami akan memfaktorkan lagi ini. Sehingga itu, ini adalah reka bentuk awal yang boleh berfungsi dengan baik.

FileRegistry

Ini akan menggunakan laluan fail yang lengkap dan termasuk fail; sebaliknya, ia akan menggunakan API WordPress untuk memaparkan mesej ralat.

Satu lagi alternatif untuk menggunakan WordPress API adalah membuang mesej Pengecualian adat. Dengan cara itu, kami akan dapat memisahkan atau menyahkod sepenuhnya kod kami dari WordPress.

Sekali lagi, kod ini adalah pengangkut dari autoloader awal. Semasa pelaksanaan, kami boleh mengubahnya, juga.

Kesimpulannya

Baiklah, jadi kami telah melihat kod yang sedia ada untuk autoloader kami, dan kemudian kami telah menggariskan beberapa kod berpotensi yang boleh kami gunakan berdasarkan analisis dan reka bentuk berorientasikan objek.

Adakah penyelesaian yang kita sedang berusaha ke arah yang lebih baik daripada apa yang kita ada? Sudah tentu. Adakah ini akan berfungsi dalam konteks WordPress dan plugin sedia ada kami? Kami tidak akan tahu sehingga kami mula memasukkan ini ke dalam plugin kami.

Seperti yang dinyatakan sebelum ini, masih terdapat beberapa kawasan di mana kita mungkin dapat refactor kod ini. Sekiranya kita memukul isu jenis ini apabila melaksanakan kod kami pada versi terakhir plugin kami, kami akan melihatnya dengan tepat.

Walau apa pun, kod yang kita ada sekarang perlu lebih mudah dibaca (walaupun kita masih mempunyai DocBlocks dan beberapa komen sebaris untuk diperkenalkan) dan lebih banyak boleh dipelihara dan lebih mudah diuji.

Dengan semua itu berkata, saya berharap ini memberi anda idea bagaimana untuk mengambil kaedah yang panjang dan memecahnya ke dalam kelas yang lebih didorong oleh tujuan. Pasti, setelah kelas banyak mungkin merasa pelik pada mulanya, tetapi itu tidak bermakna ia adalah perkara yang buruk. Mempunyai lebih banyak fail (dan sebagainya kelas) dengan kod kurang daripada satu fail dengan banyak kod adalah lebih baik.

Mendapatkan sifat yang berlawanan dengan pengaturcaraan berorientasikan objek dalam hal ini. Dalam tutorial seterusnya, kami akan kembali ke plugin kami dan akan berusaha melaksanakan variasi kod di atas. Kita mungkin akan debug beberapa juga. Lagipun, jarang sekali kita melakukannya dengan betul pada kali pertama

Sehingga itu, jika anda berminat untuk membaca lebih lanjut mengenai pengaturcaraan berorientasikan objek dalam konteks WordPress, anda boleh mencari semua tutorial saya sebelum ini di halaman profil saya. Jangan ragu untuk mengikuti saya di blog saya atau ikuti saya di Twitter di mana saya sering bercakap tentang kedua-duanya.

Sumber

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.