Rabu, 19 November 2008

Front Controller Pattern

Mengapa kita membutuhkan pattern ini?

Ketika sebuah aplikasi menangani permintaan service melalui titik masuk yang berbeda-beda, akan sangan sulit tentunya untuk menghindari duplikasi yang terjadi dalam programmnya. Sebagai contoh, ketika kita membutuhkan autentikasi terhadap user, maka proses autentikasi tersebut harus kita pastikan terjadi di berbagai titik masuk dari aplikasi kita. Jika ada titik masuk yang terlupa, tidak dilakukan autentikasi, aplikasi kita dapat diakses tanpa ada autentikasi. Masalahnya akan lebih besar lagi ketika kita harus melakukan perubahan terhadap proses autentikasi tersebut. Perubahan yang dibutuhkan, mau tidak mau, harus dilakukan di setiap titik yang membutuhkan autentikasi itu sendiri. Dengan cara ini, akan terdapat kemungkinan dimana beberapa bagian dari program kita terlupakan untuk diupdate. Tentunya kita dapat membuat library atau fungsi yang digunakan bersama-sama untuk menangani proses autentikasi tersebut, tetapi kita tetap harus memanggil fungsi tersebut dari beberapa titik masuk aplikasi kita.

Permasalahan besar juga terjadi ketika kita harus menangani aplikasi yang memiliki alur penampilan (View) yang berbeda-beda. Untuk sistem yang kompleks, tampilan yang dikirimkan ke pengguna mungkin dibentuk oleh beberapa bagian yang berbeda, tergantung pada hasil berbagai proses di dalam aplikasi. Belum lagi jika bagian-bagian dari tampilan tersebut dapat digunakan dengan cara yang berbeda-beda. Ketika kita memiliki titik masuk yang banyak ke dalam aplikasi, mememecahkan proses penampilan tersebut menjadi pekerjaan yang tidak mudah untuk dilakukan.

Untuk mengatasi permasalahan-permasalahan di atas, kita dapat menggunakan pattern yang disebut sebagai Front Controller Pattern. Pattern ini menyediakan satu titik masuk bagi keseluruhan aplikasi kita. Kemudian, Front Controller akan melakukan pemrosesan untuk menentukan siapa yang harus bertanggung jawab terhadap permintaan yang terjadi. Dengan cara ini, kita dapat menambahkan fungsi-fungsi seperti autentikasi, inisialisasi, penentuan bahasa atau theme di satu tempat dan mendapatkan hasilnya di seluruh bagian dari aplikasi kita.

Implementasi

Di sini kita akan membahas mengenai Front Controller Pattern dengan PHP. Yang kita butuhkan adalah sebuah class yang akan menerima request dari client dan kemudian berdasarkan request tersebut menentukan hal apa atau siapa yang bertanggung jawab untuk melakukan proses selanjutnya. Contoh dari controller tersebut dapat dilihat di potongan class di bawah.


class FrontController {
private $applicationHelper;

private function __construct() {}

static function run() {
$instance = new self();
$instance->init();
$instance->handleRequest();
}

function init() {
$applicationHelper = ApplicationHelper::getInstance();
$applicationHelper->init();
}

function handleRequest() {
$request = new Request();
$router = new Router();
$cmd = $router->resolve($request);

$cmd->execute( $request );
}
}


Ternyata tidak terlalu sulit menerapkan Front Controller Pattern di PHP. Tentunya akan lebih terasa manfaatnya jika kita menambahkan beberapa helper class yang akan membantu dalam tugas-tugas seperti autentikasi dll. Untuk menggunakan class di atas, di awal aplikasi (misal: index.php) kita dapat melakukan pemanggilan:

require_once 'FrontController.php';
FrontController::run();


Mulai sekarang, semua request ke aplikasi kita akan ditangani oleh FrontController dan diteruskan ke pihak-pihak yang berwenang :) . Detail dari beberapa bagian di FrontController tersebut akan saya bahas di tulisan berikutnya.

Tidak ada komentar:

Posting Komentar