Model-View-Controller
From Joomla! Documentation
Joomla mengembangkan pola desain Model-View-Controller.
Ketika Joomla! memulai pemrosesan suatu permintaan dari seorang pengguna, seperti GET untuk halaman tertentu, atau POST yang berisi data formulir, salah satu yang paling pertama dilakukan oleh Joomla! adalah menganalisa URL terkait komponen mana yang akan bertanggungjawab untuk pemrosesan permintaan tersebut, kemudian meneruskan kontrolnya ke komponen itu.
Apabila komponen telah didesain menurut pola MVC, ia akan meneruskan kontrolnya ke controller. Controller bertanggungjawab menganalisa permintaan dan menentukan model mana yang dibutuhkan untuk memenuhi permintaan itu, dan view mana yang harus digunakan untuk mengembalikan hasilnya kembali kepada pengguna.
Model akan membungkus data yang digunakan oleh komponen itu. Di banyak kasus, data ini berasal dari database, baik itu database Joomla atau eksternal, dimana model mungkin saja mendapatkan data dari sumber-sumber lain seperti melalui API web service yang berjalan di server lain. Model juga bertanggungjawab untuk memperbarui database jika ada. Tujuan dari model adalah mengisolasi controller dan view dari detail bagaimana data tersebut diperoleh atau diubah.
View bertanggungjawab untuk menghasilkan keluaran yang dikirim ke browser oleh komponen itu. Ia memanggil model untuk sembarang informasi yang diperlukannya dan memformatnya. Sebagai contoh, sebuah daftar data yang ditarik dari model dapat dibungkus ke dalam sebuah tabel HTML oleh view.
Karena Joomla! didesain semodular mungkin, keluaran dari komponen biasanya hanya bagian dari halaman yang akhirnya akan dilihat oleh pengguna. Segera setelah view menghasilkan keluaran, komponen mengembalikan kendali ke kerangka Joomla yang akan memuat dan mengeksekusi templatnya. Templat merangkumkan keluaran dari komponen, serta sembarang modul yang sedang aktif di halaman yang sedang dilihat, sehingga ia dapat dikirimkan ke browser sebagai suatu halaman.
Untuk menyediakan kekuatan tambahan dan fleksibilitas kepada desainer web, yang mungkin memperhatikan masalah pembuatan desain baru daripada memanipulasi code yang ada, Joomla! memisahkan view yang tradisional ke dalam view dan layout. View akan menarik data dari model, sebagaimana suatu pola MVC yang tradisional, tapi kemudian menyederhanakan data tersebut sehingga tersedia untuk layout, yang akan bertanggungjawab untuk memformat data menjadi sebuah tampilan kepada pengguna. Keuntungan dengan adanya pemisahan ini adalah sistem templat Joomla! menyediakan mekanisme yang lebih sederhana untuk penggantian layout di dalam templat. Penggantian atau override layout ini (sering disebut template overrides karena mereka adalah bagian dari templat, meskipun sebenarnya layout-lah yang sedang diganti) dipaketkan bersama templat dan membuat para desainer templat memiliki kendali yang lebih terhadap keseluruhan keluaran inti Joomla! dan ekstensi pihak ketiga yang dipasang dimana ia tunduk pada pola desain MVC.