Apa perbedaan antara kerangka kerja dan perpustakaan ?
Saya selalu menganggap perpustakaan sebagai satu set objek dan fungsi yang berfokus pada penyelesaian masalah tertentu atau area spesifik pengembangan aplikasi (yaitu akses basis data); dan kerangka kerja di sisi lain sebagai kumpulan perpustakaan yang berpusat pada metodologi tertentu (yaitu MVC) dan yang mencakup semua bidang pengembangan aplikasi.
Jawaban:
Sebenarnya istilah-istilah ini dapat berarti banyak hal yang berbeda tergantung konteks yang digunakan.
Sebagai contoh, pada Mac OS X frameworks hanya library, yang dikemas dalam sebuah bundel. Dalam bundel Anda akan menemukan perpustakaan dinamis yang sebenarnya (libWh whatever.dylib). Perbedaan antara perpustakaan telanjang dan kerangka kerja di Mac adalah bahwa kerangka kerja dapat berisi beberapa versi berbeda dari perpustakaan. Ini dapat berisi sumber daya tambahan (gambar, string terlokalisasi, file data XML, objek UI, dll.) Dan kecuali kerangka kerja dirilis ke publik, biasanya berisi file .h yang diperlukan Anda perlu menggunakan perpustakaan.
Dengan demikian Anda memiliki semua yang ada dalam satu paket yang Anda perlukan untuk menggunakan pustaka dalam aplikasi Anda (pustaka C / C ++ / Objective-C tanpa. banyak file untuk dipindahkan (bundel Mac hanya direktori pada tingkat Unix, tetapi UI memperlakukannya seperti file tunggal, cukup banyak seperti Anda memiliki file JAR di Jawa dan ketika Anda mengkliknya, Anda biasanya tidak melihat apa yang ada di dalamnya, kecuali jika Anda secara eksplisit memilih untuk menampilkan konten).
Wikipedia menyebut kerangka kerja "kata kunci". Ini mendefinisikan kerangka kerja perangkat lunak sebagai
Jadi saya akan mengatakan perpustakaan hanya itu, "perpustakaan". Ini adalah kumpulan objek / fungsi / metode (tergantung pada bahasa Anda) dan "tautan" aplikasi Anda terhadapnya dan dengan demikian dapat menggunakan objek / fungsi / metode tersebut. Ini pada dasarnya adalah file yang berisi kode yang dapat digunakan kembali yang biasanya dapat dibagikan di antara banyak aplikasi (Anda tidak perlu menulis kode yang sama berulang-ulang).
Kerangka kerja dapat menjadi semua yang Anda gunakan dalam pengembangan aplikasi. Ini bisa berupa perpustakaan, kumpulan banyak perpustakaan, kumpulan skrip, atau perangkat lunak apa pun yang Anda perlukan untuk membuat aplikasi. Kerangka hanyalah istilah yang sangat kabur.
Berikut ini artikel tentang beberapa pria mengenai topik " Perpustakaan vs. Kerangka Kerja ". Saya pribadi berpendapat artikel ini sangat bisa diperdebatkan. Tidak salah apa yang dia katakan di sana, bagaimanapun, dia hanya memilih salah satu dari banyak definisi kerangka kerja dan membandingkannya dengan definisi klasik perpustakaan. Misalnya dia bilang kamu perlu kerangka kerja untuk sub-kelas. Betulkah? Saya dapat memiliki objek yang didefinisikan di perpustakaan, saya dapat menautkannya, dan mengelompokkannya dalam kode saya. Saya tidak melihat bagaimana saya membutuhkan "kerangka kerja" untuk itu. Dalam beberapa hal dia lebih suka menjelaskan bagaimana istilah kerangka digunakan saat ini. Itu hanya kata hyped, seperti yang saya katakan sebelumnya. Beberapa perusahaan hanya merilis perpustakaan normal (dalam arti perpustakaan klasik) dan menyebutnya "kerangka kerja" karena kedengarannya lebih mewah.
sumber
Sebuah perpustakaan Melakukan tertentu, operasi didefinisikan dengan baik.
Sebuah kerangka adalah kerangka di mana aplikasi mendefinisikan "daging" dari operasi dengan mengisi kerangka. Kerangka masih memiliki kode untuk menghubungkan bagian-bagian tetapi pekerjaan paling penting dilakukan oleh aplikasi.
Contoh perpustakaan: Protokol jaringan, kompresi, manipulasi gambar, utilitas string, evaluasi ekspresi reguler, matematika. Operasi mandiri.
Contoh kerangka kerja: Sistem aplikasi web, Plug-in manager, sistem GUI. Kerangka kerja mendefinisikan konsep tetapi aplikasi mendefinisikan fungsi dasar yang peduli pengguna akhir.
sumber
Saya pikir perbedaan utama adalah bahwa kerangka kerja mengikuti " prinsip Hollywood ", yaitu "jangan panggil kami, kami akan memanggil Anda."
Menurut Martin Fowler :
sumber
Anda memanggil Perpustakaan.
Kerangka memanggil Anda.
sumber
Perpustakaan:
Ini hanya kumpulan dari rutinitas (pemrograman fungsional) atau definisi kelas (object oriented programming). Alasan di baliknya hanyalah penggunaan kembali kode , yaitu mendapatkan kode yang sudah ditulis oleh pengembang lain. Kelas-kelas atau rutinitas biasanya mendefinisikan operasi spesifik di area spesifik domain . Sebagai contoh, ada beberapa perpustakaan matematika yang dapat membiarkan pengembang hanya memanggil fungsi tanpa mengulangi implementasi bagaimana suatu algoritma bekerja.
Kerangka:
Dalam kerangka, semua aliran kontrol sudah ada di sana, dan ada banyak bintik putih yang telah ditentukan yang harus kita isi dengan kode kita . Kerangka kerja biasanya lebih kompleks. Ini mendefinisikan kerangka di mana aplikasi mendefinisikan fitur-fiturnya sendiri untuk mengisi kerangka. Dengan cara ini, kode Anda akan dipanggil oleh framework saat tepat. Manfaatnya adalah bahwa pengembang tidak perlu khawatir tentang apakah suatu desain bagus atau tidak, tetapi hanya tentang mengimplementasikan fungsi-fungsi spesifik domain.
Pustaka, Kerangka Kerja dan representasi gambar Kode Anda:
Perbedaan Kunci:
Perbedaan utama antara perpustakaan dan kerangka kerja adalah "Inversion of Control" . Saat Anda memanggil metode dari perpustakaan, Anda memegang kendali. Tetapi dengan kerangka kerja, kontrolnya terbalik: kerangka kerja memanggil Anda . Sumber.
Hubungan:
Keduanya mendefinisikan API, yang digunakan oleh para programmer untuk digunakan. Untuk menyatukannya, kita dapat menganggap perpustakaan sebagai fungsi tertentu dari aplikasi, kerangka kerja sebagai kerangka aplikasi, dan API adalah konektor untuk menyatukannya. Proses pengembangan yang khas biasanya dimulai dengan kerangka kerja, dan mengisi fungsi yang didefinisikan dalam pustaka melalui API.
sumber
Seperti yang selalu saya jelaskan:
Perpustakaan adalah alat.
Kerangka kerja adalah cara hidup.
Perpustakaan Anda dapat menggunakan bagian kecil apa pun yang membantu Anda. Kerangka kerja yang harus Anda komit untuk seluruh proyek Anda.
sumber
Dari perspektif pengembang Web:
Perpustakaan dapat dengan mudah diganti oleh perpustakaan lain. Tetapi kerangka tidak bisa.
Jika Anda tidak suka pustaka pemilih tanggal jquery, Anda bisa menggantinya dengan pemilih tanggal lain seperti pemilih tanggal bootstrap atau pickadate.
Jika Anda tidak menyukai AngularJS di mana Anda membangun produk Anda, Anda tidak bisa hanya mengganti dengan kerangka kerja lainnya. Anda harus menulis ulang seluruh basis kode Anda.
Sebagian besar perpustakaan membutuhkan kurva belajar yang sangat sedikit dibandingkan dengan Kerangka. Misalnya: underscore.js adalah pustaka, Ember.js adalah framework.
sumber
Saya suka jawaban Kohen, tetapi definisi yang lebih teknis adalah: Kode Anda memanggil perpustakaan. Kerangka kerja memanggil kode Anda . Misalnya kerangka kerja GUI memanggil kode Anda melalui event-handler. Kerangka kerja web memanggil kode Anda melalui beberapa model permintaan-respons.
Ini juga disebut inversi kontrol - tiba-tiba kerangka kerja memutuskan kapan dan bagaimana mengeksekusi kode Anda daripada sebaliknya seperti dengan perpustakaan. Ini berarti bahwa suatu kerangka kerja juga memiliki dampak yang jauh lebih besar pada bagaimana Anda harus menyusun kode Anda.
sumber
Saya lupa di mana saya melihat definisi ini, tetapi saya pikir itu cukup bagus.
Perpustakaan adalah modul yang Anda panggil dari kode Anda, dan framework adalah modul yang memanggil kode Anda.
sumber
Kerangka kerja dapat dibuat dari berbagai perpustakaan. Mari kita ambil contoh.
Katakanlah Anda ingin memasak kari ikan. Maka Anda membutuhkan bahan-bahan seperti minyak , rempah - rempah dan utilitas lainnya . Anda juga membutuhkan ikan yang menjadi basis Anda untuk menyiapkan hidangan Anda (Ini adalah data aplikasi Anda). semua bahan bersama disebut kerangka kerja . Sekarang Anda akan menggunakannya satu per satu atau dalam kombinasi untuk membuat kari ikan Anda yang merupakan produk akhir Anda . Bandingkan dengan kerangka web yang terbuat dari underscore.js , bootstrap.css , bootstrap.js , fontawesome , AngularJS dll. Sebagai contoh Twitter Bootstrap v.35,.
Sekarang, jika Anda mempertimbangkan hanya satu bahan, seperti katakanlah minyak . Anda tidak dapat menggunakan minyak yang Anda inginkan karena itu akan merusak ikan Anda (data). Anda hanya bisa menggunakan Minyak Zaitun . Bandingkan dengan underscore.js . Sekarang merek minyak apa yang ingin Anda gunakan terserah Anda. Beberapa hidangan dibuat dengan Minyak Zaitun Amerika (underscore.js) atau Minyak Zaitun India (lodash.js). Ini hanya akan mengubah selera aplikasi Anda. Karena mereka memiliki tujuan yang hampir sama, penggunaannya tergantung pada preferensi pengembang dan mudah diganti.
PS AngularJS adalah kerangka kerja MVC tetapi perpustakaan JavaScript. Karena saya percaya Perpustakaan memperluas perilaku default teknologi asli (JavaScript dalam kasus ini).
sumber
Ini adalah bagaimana saya memikirkannya (dan telah dirasionalisasi oleh orang lain):
Perpustakaan adalah sesuatu yang terkandung dalam kode Anda. Dan kerangka kerja adalah wadah untuk aplikasi Anda.
sumber
di sini ditautkan artikel pahit oleh Joel Spolsky , tetapi berisi perbedaan yang baik antara kotak peralatan, perpustakaan, kerangka kerja dan semacamnya
sumber
Perpustakaan mengimplementasikan fungsionalitas untuk tujuan dengan cakupan yang sempit sedangkan kerangka kerja cenderung menjadi kumpulan perpustakaan yang menyediakan dukungan untuk berbagai fitur yang lebih luas. Misalnya, pustaka System.Drawing.dll menangani fungsionalitas menggambar, tetapi hanya satu bagian dari keseluruhan kerangka .NET.
sumber
Library - Setiap set kelas atau komponen yang dapat digunakan sesuai kebutuhan klien untuk menyelesaikan tugas tertentu.
Kerangka kerja - mandat pedoman tertentu bagi Anda untuk "plug-in" menjadi sesuatu yang lebih besar dari Anda. Anda hanya memberikan bagian-bagian khusus untuk aplikasi / persyaratan Anda dengan cara yang dipublikasikan, sehingga 'kerangka kerja dapat membuat hidup Anda mudah'
sumber
Perpustakaan adalah untuk kemudahan penggunaan dan efisiensi. Anda dapat mengatakan misalnya bahwa perpustakaan Zend membantu kita menyelesaikan tugas yang berbeda dengan kelas dan fungsi yang didefinisikan dengan baik. Sementara kerangka kerja adalah sesuatu yang biasanya memaksa cara tertentu menerapkan solusi, seperti MVC (Model -view-controller) (referensi) . Ini adalah sistem yang terdefinisi dengan baik untuk distribusi tugas seperti di MVC.Model berisi sisi basis data, Tampilan untuk Antarmuka UI, dan pengontrol untuk logika Bisnis.
sumber
Penafsiran Anda kedengarannya bagus bagi saya ... Perpustakaan bisa berupa apa saja yang dikompilasi dan mandiri untuk digunakan kembali dalam kode lain, secara harfiah tidak ada batasan pada isinya.
Sebuah kerangka di sisi lain diharapkan memiliki berbagai fasilitas untuk digunakan di beberapa arena tertentu pengembangan aplikasi, seperti contoh Anda, MVC.
sumber
Saya pikir Anda telah menemukan perbedaannya dengan cukup baik: kerangka kerja menyediakan bingkai di mana kami melakukan pekerjaan kami ... Entah bagaimana, itu lebih "membatasi" daripada perpustakaan sederhana.
Kerangka kerja ini juga seharusnya menambah konsistensi pada satu set perpustakaan.
sumber
Saya pikir perpustakaan adalah seperangkat utilitas untuk mencapai tujuan (misalnya, soket, kriptografi, dll). Kerangka kerja adalah perpustakaan + PENGHITUNGAN RUNTIM. Sebagai contoh, ASP.NET adalah suatu kerangka kerja: ia menerima permintaan HTTP, membuat objek halaman, menjalankan peristiwa likel, dll. Kerangka melakukan semua ini, Anda menulis sedikit kode yang akan dijalankan pada waktu tertentu dari siklus hidup permintaan saat ini!
Pokoknya, pertanyaan yang sangat menarik!
sumber
Saya tidak ingat sumber jawaban ini (saya kira saya menemukannya di .ppt di internet), tetapi jawabannya cukup sederhana.
Perpustakaan dan Kerangka Kerja adalah seperangkat kelas, modul, dan / atau kode (tergantung dari bahasa pemrograman) yang dapat digunakan dalam aplikasi Anda dan membantu Anda untuk memecahkan "masalah" khusus.
Masalah itu bisa berupa info log atau debug dalam aplikasi, menggambar grafik, membuat format file tertentu (html, pdf, xls), menyambungkan ke basis data, membuat bagian dari aplikasi atau aplikasi lengkap atau kode yang diterapkan pada suatu Pola Desain .
Anda dapat memiliki Kerangka atau Perpustakaan untuk menyelesaikan semua masalah ini dan banyak lagi, biasanya kerangka membantu Anda untuk memecahkan masalah yang lebih kompleks atau lebih besar, tetapi itu merupakan konsekuensi dari perbedaan utama mereka, bukan definisi utama untuk keduanya.
Ini berarti bahwa jika suatu Kerangka Kerja, misalnya memiliki 50 kelas untuk menggunakan kerangka kerja dalam aplikasi yang perlu Anda gunakan, katakanlah, 10-15 kelas atau lebih dalam kode Anda, karena itulah cara merancang Kerangka, beberapa kelas (objek dari kelas itu) adalah input / parameter untuk metode di kelas lain dalam kerangka kerja. Lihat .NET framework, Spring, atau framework MVC apa pun.
Tapi misalnya perpustakaan log, Anda bisa menggunakan kelas Log dalam kode Anda, dan membantu Anda untuk memecahkan "masalah logging", itu tidak berarti bahwa perpustakaan log tidak memiliki lebih banyak kelas dalam kodenya, seperti kelas untuk menangani file, menangani output layar, atau bahkan basis data, tetapi Anda tidak pernah menyentuh / menggunakan kelas-kelas dalam kode Anda, dan itulah alasan mengapa perpustakaan dan bukan kerangka kerja.
Dan juga ada lebih banyak kategori daripada Kerangka Kerja dan Perpustakaan, tapi itu di luar topik.
sumber