Framework vs Library | Perbedaan dalam Pengembangan Web

Saat kita melakukan sesuatu pengembangan, Pasti Anda sering tersandung pada kata-kata seperti “Framework” dan “Library”. Tapi tahukah apa maksudnya dan apa yang seharusnya Anda ketahui tentang kedua hal itu? Pada catatan ini akan menunjukkan pro dan kontra dari masing-masing asas tersebut dan sebuah deskripsi di mana kasus yang harus Anda pilih. Catatan ini juga akan menunjukkan perbedaan cara penggunaan di antara keduanya. Sebagai contohnya akan menggunakan Symfony, yang sebagian merupakan framework dan sebagian library.

Library

Library digambarkan sebagai “sekumpulan implementasi dari tingkah laku, yang ditulis dalam bahasa pemrograman, memiliki antarmuka yang jelas saat perilaku itu dipanggil.”

Prinsip

Untuk memahami library kita perlu mengulas ke awal mula dari library. Salah satu masalah terbesar saat itu adalah betapa rumitnya kode itu. Karena aplikasi harus ditulis secara keseluruhan, Saat terjadi peningkatan sistem pengkodean, jumlah bug mengalami peningkatan drastis. Pada tahun 1959 JOVIAL memperkenalkan sebuah cara untuk membagi aplikasi menjadi beberapa bagian yang lebih kecil. Solusi baru menjadi dasar untuk apa yang sekarang kita ketahui sebagai Library.

Sebagai Contoh

Misalkan kita ingin menggunakan database. Di PHP cukup sederhana. Yang perlu kita lakukan hanyalah terhubung ke database, siapkan pertanyaan yang ingin kita tanyakan dan dapatkan jawabannya.

Contoh pseudocode ini menunjukkan bagaimana melakukannya:

$config = ... //load config
$query = ... //some query
$data = ... //data for this query

$conn = mysql_connect($config['server'], $config['user'], $config['password']);
if($conn === false)
    throw new Exception('cannot connect to database');

$success = mysql_select_db($config['databse']);
if($success === false)
    throw new Exception('cannot select database');
   
$queryString = $query;
foreach($data as $key => $value)
{
    $queryString = str_replace(':'.$key, mysql_escape_string($value), $queryString);
}

$queryHandle = mysql_query($queryString, $conn);
if($queryHandle === false)
    throw new Exception('query failed');

$result = mysql_fetch_assoc($queryHandle);
if($result === false)
    throw new Exception('query failed');

Cukup sedikit kerja, bukan? Dan sekarang bayangkan bahwa Anda harus melakukan 5 versi kode ini untuk berbagai database. Maka akan menjadi sangat berantakan. Dan metode ini sudah menggunakan library (ya, fungsi mysql_ * adalah fungsi yang disediakan oleh sebuah library bernama php-mysql)!

Mari kita coba menggunakan sebuah perpustakaan bernama PDO:

$config = ... //load config
$query = ... //some query
$data = ... //data for this query

$pdo = new PDO($config['uri'], $config['user'], $config['password']);
$statement = $pdo->prepare($query);
if($statement === false)
    throw new Exception('query failed');

if($statement->execute($data) === false)
    throw new Exception('query failed');
   
$result = $statement->fetchAll(PDO::FETCH_ASSOC);
if($result === false)
    throw new Exception('query failed');

Kita tidak hanya mengurangi ukuran kode dari 20 baris menjadi hanya 12, namun pada saat yang sama mengizinkan database lain untuk digunakan. Mengapa hal ini begitu kuat? Karena library PDO secara internal menggunakan library yang berbeda, yaitu…  berarti bahwa ketika Anda menulis blog Anda tidak perlu khawatir tentang penyelesaian alamat database ke IP atau mencegah SQL injection. Sehingga Anda dapat membuat blog yang sedang Anda kerjakan – hanya “melakukan satu hal dan melakukannya dengan baik”. Itulah kekuatan library.

Kekurangan

Library juga memiliki kekurangan. Ada dua isu utama yang bisa Anda ikuti. Pertama disebut propagasi bug, kedua yakni keterbatasan library.

Propagasi Bug

Mari kita asumsikan kita sedang mengerjakan sebuah library yang akan digunakan untuk menghitung jarak peta – saya akan menyebutnya B. Hal ini membutuhkan library perhitungan seperti penambahan, pengurangan, perkalian dan pembagian – bisa disebut A. Seseorang juga menggunakan library saya di situs mereka, yang ditandai sebagai C. Dalam skenario ini website C bergantung pada library B yang bergantung pada library A.

Nah, apa jadinya kalau library A punya bug? Bisa kita asumsikan bahwa dalam hal penambahan, yakni 1 + 3 = 5,  4 + 4 = 9, dan seterusnya. Ini berakibat di library B akan menunjukkan jarak yang salah, Otomatis situs C juga salah. Apa yang dijelaskan di sini adalah propagasi bug – bug yang bergantung akan menyebabkan bug ketergantungan.

Sekarang kita asumsikan untuk memperbaiki masalah itu dengan memodifikasi library B agar selalu mengurangi 1 setelah perhitungan. Tapi setelah beberapa waktu patch untuk library A keluar yang memperbaiki masalah tersebut. Sekarang library kita adalah sumber masalah karena kita tidak perlu mengurangkan 1. Hal ini disebut propagasi bug derivatif .

Semakin lama rantai ketergantungan, semakin besar masalahnya. Beberapa perpustakaan di jalan dapat memiliki workarounds untuk bug di dependensi mereka, yang akan menyebabkan bug baru dan menyebarkannya ke saluran.

Framework

Framework digambarkan sebagai ” abstraksi, di mana perangkat lunak yang menyediakan fungsionalitas generik dapat diubah secara selektif berdasarkan penggunaan kode penulisan.

Prinsip

Hal pertama yang harus kita lakukan adalah memikirkan arti “abstraksi”. Nah, dalam pemrograman itu menggambarkan sesuatu yang setengah jadi, maka masih perlu pengembangan lanjut untuk penggunanya. Selain itu yang perlu diperhatikan tentang “abstraksi” adalah bahwa hal tersebut sudah berisi informasi tentang celah apa yang harus mereka isi.

Hal kedua yang harus kita perhatikan tentang framework bahwa ia sering menggabungkan antara library dan “package”. Setiap framework memiliki nama sendiri untuk itu. Di Laravel mereka menyebutnya “packages”, kalau Symfony “bundles”, dalam kerangka lain mereka mungkin memiliki nama yang berbeda. Cara termudah untuk memahami package adalah membayangkannya sebagai reversed library, di mana API disediakan bukan oleh library, namun dengan framework. Hal ini memiliki beberapa konsekuensi:

  • setiap package harus langsung bekerja dalam framework tertentu,
  • Package yang dibuat untuk satu framework tidak bisa digunakan dalam framework lain,
  • Package sering terikat pada versi framework tertentu, karena package API sama persis dengan framework API

Keuntungan

Salah satu manfaat terbesar framework adalah kemudahan membuat kode. Mari kita gunakan contoh database sebelumnya untuk memeriksa Laravel:

$users = DB::table('users')->whereName('Hubert')->get();

Ya, saya baru saja mengubah semua baris kode sebelumnya ke satu baris, sehingga dapat dengan mudah untuk menggunakan database. Segala sesuatu yang terkait dengan penanganan kesalahan dan pemuatan Eloquent (library yang digunakan untuk mengelola database) dilakukan untuk Anda oleh framework.

Keuntungan lain dari penggunaan framework adalah dukungan besar mereka terhadap pola MVC .

Kekurangan

Framework juga memiliki kekurangan. Yang terbesar adalah, faktanya dari prinsip itu sendiri. Karena kerangka kerja adalah “abstraksi”, ia memiliki jumlah fitur relatif terbatas yang dapat Anda buat dengan “cara yang benar” . Tapi bukan berarti itu tidak bisa dilakukan dengan cara “Hacky”.

 

Share this article to

Leave a Reply

Your email address will not be published. Required fields are marked *