Framework atau Library
Saat berbicara tentang dependensi , kedua istilah tersebut dapat digunakan, terkadang dengan cara (berbahaya) yang dapat dipertukarkan. Apakah React itu framework atau library? Bagaimana dengan Bootstrap , atau Lodash ? Keduanya adalah “ paket ” kan?
Tentu saja, tetapi mereka pasti tidak memiliki dampak yang sama pada aplikasi Anda.
Perpustakaan
Perpustakaan ("bibliothèque" dalam bahasa Prancis, tetapi kebanyakan orang Prancis mengatakan "librairie" yang sebenarnya berarti "toko buku" dalam bahasa Prancis, tetapi cocok dengan pengucapan bahasa Inggris "perpustakaan") adalah sekumpulan fungsi untuk tujuan umum (seperti underscore.js ) atau yang khusus (seperti moment.js ).
Anda memanggil fungsi perpustakaan kapan pun Anda membutuhkannya, seperti Anda memilih alat di kotak alat. Mereka tidak memerlukan perubahan dalam desain perangkat lunak Anda .
Panggilan eksklusif
Namun, sebagai ketergantungan, mereka meminta Anda untuk memanggil API milik mereka, sehingga "mengunci" kode Anda dengan mereka (atau bahkan mungkin versinya ) , sehingga panggilan perpustakaan akan terlihat seperti ini:
Penguncian seperti itu akan meningkat dengan jumlah panggilan yang Anda keluarkan: semakin banyak Anda memanggil pustaka, semakin banyak kode Anda bergantung padanya (atau pada versinya):
Titik ketergantungan tunggal
Namun, untuk membatasi ketergantungan seperti itu, Anda dapat menyembunyikannya di balik pembungkus:
Pembungkus seperti itu sebenarnya bisa melayani lebih dari satu tujuan. Selain mengurangi penguncian ke satu titik di basis kode Anda, ini memungkinkan Anda untuk mengekspos api Anda sendiri ke penelepon. Adaptasi pustaka semacam itu hanya akan menampilkan API yang masuk akal untuk aplikasi Anda, serta jenis I/O yang khusus bukan aplikasi Anda, bukan untuk pustaka.
Namun, implementasi berbicara, selangkah demi selangkah, kode Anda masih bergantung pada perpustakaan.
API Bisnis
Mudah-mudahan, seperti yang biasa dikatakan mendiang David J. Wheeler:
Semua masalah dalam ilmu komputer dapat diselesaikan dengan tingkat tipuan lain .
Memang, Anda dapat menghindari ketergantungan tersebut dengan menambahkan interface :
- penelepon akan bergantung pada deklarasi API tersebut ;
- adaptor harus mengimplementasikannya (perhatikan bahwa ini juga akan memudahkan perpustakaan yang mengejek saat pengujian).
Kerangka kerja
Frameworks ("quadriciels" dalam bahasa Prancis resmi, tetapi semua orang mengatakan "framework") berbeda, karena mereka menyediakan jenis layanan yang berbeda: mereka menawarkan untuk mengelola berbagai hal untuk Anda, alih-alih membiarkan Anda merancang apa yang harus dilakukan.
Menyerahkan kendali
Untuk melakukannya, mereka menerapkan tulang punggung ("bingkai") aplikasi, dan membiarkan Anda mengisi bagian yang kosong. Tapi kekosongan itu dibiarkan di tempat yang ditentukan dan memiliki bentuk yang ditentukan.
Artinya:
- aplikasi dimulai dengan kerangka kerja : Anda harus menyerahkan setir.
- karena kerangka kerja menggerakkan aplikasi, bukan Anda yang melakukan panggilan lagi: sebagai gantinya, Anda akan dipanggil kembali oleh kerangka kerja bila perlu.
Kontrak
Tentu saja tidak ada yang menghalangi Anda untuk secara manual memanggil beberapa kode Anda sendiri, pustaka pihak ketiga, atau bahkan beberapa API kerangka kerja, tetapi dengan risiko Anda sendiri . Ini mungkin atau mungkin tidak berfungsi seperti yang Anda harapkan. Framework memiliki aturan yang harus Anda ikuti dan, jika Anda melanggarnya, framework tidak dapat dianggap bertanggung jawab atas kegagalan apa pun.
Biasanya kerangka kerja akan memungkinkan Anda menulis komponen yang sesuai dengan wadahnya melalui penerapan kontrak :
Kontainer kemudian akan dapat menangani kode Anda sebagai perangkat lunak yang kompatibel dengan kerangka kerja yang siklus hidupnya dapat dikelola, dan akan memanggil Anda kembali pada waktu yang relevan untuk melakukan beberapa jenis operasi atau lainnya.
Seperti yang Anda lihat, ini adalah pilihan yang jauh lebih struktural daripada pustaka untuk desain aplikasi Anda: semua komponen Anda menjadi khusus untuk kerangka kerja itu. Itu tidak akan portabel (yaitu tidak dipahami oleh kerangka kerja lain) atau dapat dioperasikan (yaitu komponen Angular hampir tidak akan berinteraksi dengan komponen Bereaksi).
Namun, orang mungkin berpendapat bahwa pola adaptor dapat digunakan untuk membatasi ketergantungan kerangka kerja, seperti yang kami lakukan untuk membatasi ketergantungan pada perpustakaan:
Ini mungkin terlihat berguna… jika arah ketergantungannya sama. Tapi ternyata tidak: adaptor pustaka digunakan untuk mengambil bentuk yang diperlukan oleh aplikasi, sedangkan di sini adaptor komponen hanya dapat mengambil bentuk yang diharapkan kerangka kerja. Akibatnya, komponen aplikasi yang dianggap "gratis" hanya dapat meniru kontrak awal (siklus hidup, semantik, perincian).
Di dalam kerangka kerja, adaptor komponen akan menjadi lapisan yang tidak perlu.
Pustaka kerangka kerja
Perpustakaan juga dapat mematuhi kerangka kerja. Alih-alih menyediakan API, mereka menyediakan implementasi komponen untuk kerangka tertentu.
Karena kerangka kerja menjadi populer, sejumlah pustaka kerangka kerja tersedia. Kebanyakan dari mereka adalah tentang widget, meskipun: misalnya komponen Material Design telah dipindahkan dari kerangka kerja Android ke Web Components , Angular , React , Vue dan bahkan iOS .
Kerangka standar
Siapa pun dapat membayangkan biaya yang luar biasa untuk mem-porting pustaka yang sama (dan versi berikutnya) pada masing-masing kerangka kerja tersebut.
IBM telah menemukan solusi tentang ini : alih-alih mem-porting Sistem Desain Karbon mereka pada setiap kerangka kerja hyped masa lalu, saat ini, dan masa depan, mereka berinvestasi di port pada kerangka kerja Komponen Web standar , yang dapat digunakan dalam konteks apa pun.
Jadi, tidak hanya ini memungkinkan untuk menggunakan komponen mereka dari framework:
Tetapi komponen yang sama juga dapat digunakan dari aplikasi biasa:
Kesimpulan
Framework dan library adalah opsi pihak ketiga yang sangat berbeda:
- kerangka kerja memberi Anda cetak biru aplikasi dengan layanan bawaan tetapi memberlakukan kontrak yang telah ditentukan sebelumnya untuk memanggil kode Anda. Dengan demikian, mereka menyiratkan ketergantungan yang kuat .
- pustaka tidak akan membantu Anda mendesain aplikasi, tetapi hanya dapat dipanggil saat Anda membutuhkannya. Anda dapat menyusun desain yang membatasi ketergantungan pada mereka.

![Apa itu Linked List? [Bagian 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































