Terinspirasi oleh pertanyaan ini Menggunakan perpustakaan pihak ketiga - selalu menggunakan pembungkus? Saya ingin tahu apa yang orang anggap sebagai perpustakaan pihak ketiga.
Contoh dari PHP:
Jika saya membuat aplikasi menggunakan kerangka Zend, haruskah saya memperlakukan pustaka kerangka kerja Zend sebagai kode pihak ketiga?
Contoh dari C #:
Jika saya membuat aplikasi desktop, haruskah saya memperlakukan semua kelas .Net sebagai kode pihak ketiga?
Contoh dari Jawa:
Haruskah saya memperlakukan semua perpustakaan di JDK sebagai perpustakaan pihak ketiga?
Beberapa orang mengatakan bahwa jika perpustakaan stabil dan tidak akan sering berubah maka orang tidak perlu membungkusnya. Namun saya gagal melihat bagaimana seseorang akan menguji kelas yang tergantung pada kode pihak ketiga tanpa membungkusnya.
Jawaban:
Semua contoh Anda adalah kode pihak ketiga, tetapi Anda tidak boleh menulis pembungkus untuk mereka. Mereka adalah proyek besar, matang dengan API stabil dan terencana dengan baik.
Kebutuhan pembungkus adalah untuk memberikan lapisan abstraksi antara kode Anda dan perpustakaan. Anda hanya perlu abstraksi ini ketika Anda menemukan bahwa perpustakaan tidak menyediakan API yang baik untuk hal tertentu yang Anda lakukan. Kemudian Anda dapat membuat pembungkus untuk menyederhanakan kode Anda sendiri, dan menyembunyikan fakta bahwa panggilan API canggung.
Kode Anda akan dapat diuji jika Anda menggunakan injeksi ketergantungan. Dalam pengujian unit Anda, Anda dapat menukar ketergantungan perpustakaan dengan objek tiruan, memungkinkan Anda untuk mengisolasi kode Anda yang sedang diuji.
sumber
Zend_Mail
tiruan yang Anda berikan keLogger
objek yang sedang diuji. Apakah PHP tidak mendukung mengetik bebek? Jika demikian, bukankah sepele membuat objek tiruan ...? Saya tidak benar-benar tahu PHP, tetapi Anda bisa melihat contoh-contoh dari perpustakaan PHP mengejek untuk melihat bagaimana biasanya dilakukan. Dalam bahasa yang tidak mendukung pengetikan bebek, maka saya pikir Anda perlu mengubahZend_Mail
ke antarmuka, dan kemudian membuat pembungkus tipis yang mengimplementasikan antarmuka dan mewarisi dariZend_Mail
atau hanya mendelegasikan semua panggilannya.Zend_Mail
adalah pikiran pertama saya, tetapi seperti yang dapat Anda lihat di posting asli saya sebelum mengeditnya saya memang menggunakan antarmuka dan pembungkus yang mengimplementasikannya. Namun, satu-satunya tujuan pembungkus yang ada adalah agar saya dapat mengejek antarmuka. Apakah itu umum dalam bahasa yang tidak mendukung mengetik bebek? Maksudku, membangun pembungkus tak terbatas tanpa batas?Tujuan membungkus perpustakaan adalah untuk memecah ketergantungan kode Anda pada perpustakaan itu untuk memungkinkan:
Mengisolasi perpustakaan dan kerangka kerja pihak ketiga hanyalah sebagian dari mengisolasi perubahan.
sumber
Saya tidak akan memperlakukan anggota perpustakaan standar sebagai kode pihak ke-3 - mereka adalah standar setelah semua dan cukup dapat dianggap tersedia dan fungsional pada platform yang Anda gunakan.
Adapun sesuatu seperti Zend, saya pikir orang tidak akan membungkusnya - Anda mungkin perlu menulis ulang program jika Anda menggunakan kerangka kerja yang berbeda. Sejujurnya, saya tidak akan membungkus banyak yang bukan ketergantungan konfigurasi eksternal yang serius atau jika saya tidak benar-benar berencana untuk membuat potongan itu swappable.
sumber
Saya akan mempertimbangkan perpustakaan yang disediakan oleh bahasa pemrograman tertentu hanya sebagai bagian dari bahasa.
Daripada, saya akan mempertimbangkan pihak ketiga, semua perpustakaan yang disediakan oleh entitas lain sebagai ekstensi atau alat yang terpisah dari bahasa pemrograman itu sendiri.
Mengambil contoh Anda, saya akan mempertimbangkan Zend pihak ketiga. Saya juga akan membangun aplikasi saya sedemikian rupa sehingga logika bisnis inti saya tidak akan bergantung pada Zend.
Wikipedia mendefinisikan komponen pihak ketiga sebagai:
sumber
Dalam arti yang paling ketat, setiap contoh yang Anda berikan adalah kode pihak ketiga. Namun, tidak semua kode pihak ketiga harus dibungkus. Semua perpustakaan pihak ketiga harus dibungkus. Kerangka kerja, menurut definisi, tidak dapat dibungkus karena mereka menjadi bagian tak terpisahkan dari kode Anda. Itu sebabnya Anda akan membungkus pustaka logging Anda, tetapi bukan kerangka .NET atau kerangka Zend. Anda tidak dapat benar-benar memisahkan kode Anda dari .NET - mereka saling terkait. Tentu saja, kerangka kerja yang baik akan memiliki antarmuka untuk diprogram melawan, memungkinkan Anda untuk melewati masalah sampai batas tertentu.
Lihat juga: /programming/148747/what-is-the-difference-between-a-framework-and-a-library
sumber