Praktik terbaik untuk membangun modul menggunakan kelas

19

Saya ingin mulai membangun modul saya sebagai kelas sekarang karena malas / auto-load di Drupal 7, dan saya ingin melihat beberapa modul (contrib atau inti) yang melakukan pekerjaan dengan baik.

Apakah ada cara kreatif untuk mengintegrasikan kelas sebagai pengait? Apakah saya menerapkan setiap fitur sebagai plugin ctools?

Setiap pelintas harus mencatat bahwa D7 memiliki files[]deklarasi baru dalam .infofile modul untuk kelas / antarmuka auto / lazy-loading: Menulis file .info (Drupal 7.x) .

Berikut ini adalah bacaan yang baik untuk mendapatkan motivasi dan konstitusi (seolah-olah) dari komunitas Drupal. Program Drupal dari perspektif berorientasi objek .

electblake
sumber

Jawaban:

16

Modul bukan kelas oleh Crell adalah apa yang harus Anda baca terlebih dahulu.

Bagian OOP terbesar di Drupal 7 adalah lapisan abstraksi basis data baru (dirancang oleh Crell yang sama dan lainnya). Itu menerapkan banyak pola yang dapat dan harus digunakan kembali.

Sebagai contoh:

Sesuatu yang masih kontroversial dibahas adalah menyembunyikan informasi . DBTNG mengimplementasikannya dengan membuat properti kelas terlindungi dan tidak diizinkan akses langsung. Di sisi lain, kita memiliki hook_query_alter () dan mereka dapat diubah secara hampir bebas dengan berbagai metode referensi pengambil .

Berdir
sumber
jawaban yang bagus, banyak sumber daya yang bagus untuk memperbarui pemikiran saya ketika menyusun kode modul saya!
electblake
3

Ini pertanyaan yang menarik.

Gagasan modul Drupal sebagai kelas sangat menarik. Namun bahkan dalam modul D7 cukup mengimplementasikan fungsi-fungsi kait yang dicek dengan namanya, jadi bahkan jika Anda membuat kelas untuk modul Anda, Anda masih perlu mengimplementasikan fungsi-fungsi kait untuk menjalankannya.

Namun banyak modul menggunakan kelas secara internal, dan mengekspos fungsionalitas melalui kelas-kelas ini. Contoh yang paling jelas adalah pandangan. Jadi itu mungkin tempat yang bagus untuk mencari. Namun perlu diketahui bahwa banyak modul menggunakan kelas dengan caranya sendiri, jadi apa yang Anda pelajari dari melihat tampilan mungkin tidak selalu berlaku.

Jeremy French
sumber
Terima kasih atas wawasannya, dan saya berasumsi bahwa saya masih perlu memiliki hook_functions untuk mendaftar dengan benar di dalam Drupal tetapi saya ingin tahu bagaimana modul mengimplementasikannya. Saya akan melihat pada modul views (dan semoga tidak hilang) - harap perbarui jawaban Anda jika Anda menemukan kasus / contoh pola yang lebih terisolasi yang Anda temukan: D
electblake
2

Entity API (modul contrib) memungkinkan Anda untuk mendeklarasikan "kelas entitas" untuk setiap jenis entitas Anda, sehingga semua kode yang terkait dengan entitas Anda (buat, muat, simpan, akses, dll.) Dapat masuk dalam kelas (lihat bagaimana Organik Grup melakukannya, misalnya).

Karena itu, jangan berlebihan. Plugin ctools adalah hal yang baik ketika Anda membutuhkannya (Anda sedang menulis Tampilan, Panel, atau Aturan selanjutnya), tetapi menggunakan kelas di mana-mana hanya untuk kemurnian ideologis tidak akan banyak membantu Anda.

Bojan Zivanovic
sumber