Pustaka / kerangka kerja mana yang Anda parit terlalu rumit untuk masalah yang sedang dipecahkan? [Tutup]

12

... dan mengkodekan fungsi "secara manual"?

Sebagai contoh metaforis, Anda tidak akan membutuhkan perpustakaan untuk menyelesaikan persamaan kuadrat, meskipun perpustakaan seperti itu memang ada dan seseorang menganggapnya serius.

Sebagai kasus yang lebih dipertanyakan, tergantung pada keadaan saya mungkin membuang jQuery (misalnya ketika saya tidak perlu mendukung beberapa browser zaman batu): itu memang menyederhanakan beberapa hal tetapi menambah lapisan kompleksitas dan tidak dapat diandalkan untuk DOM. Dan penggunaan jQuery secara berlebihan menyebabkan masalah yang tidak masuk akal, seperti yang baru-baru ini terlihat pada SO: bagaimana cara menetapkan href kosong ke atag dengan jQuery? Ternyata itu adalah pertanyaan HTML, bahkan bukan JavaScript.

Kasus absurd lain dan belum jelas bagi banyak orang adalah menggunakan beberapa mesin templating / bahasa yang dibangun di atas sistem templating lain: PHP. Tingkat ketiga siapa yang mengadili?

Dan satu lagi: kadang - kadang hanya meludahkan XML dengan (secara kiasan) printfjauh lebih mudah daripada melakukannya dengan beberapa mesin XML mengerikan.

Adakah kasus lain dari pengalaman Anda?

Mojuba
sumber
4
Seperti alat lainnya, Anda menggunakan jQuery di tempat yang sesuai. Anda tidak menggunakan palu dan pahat untuk membuka pintu depan Anda jika Anda punya kunci.
Robert Harvey
1
@Robert Harvey: tentu saja tetapi dalam rekayasa perangkat lunak kita sering mengalami kesulitan mengenali kunci dan palu. Tentang apa postingan itu.
mojuba
Ingatlah betapa rumitnya sebuah perpustakaan populer, itu adalah urutan besarnya yang lebih mudah dipahami orang lain daripada perpustakaan "sederhana" khusus Anda, karena mereka terbiasa dengannya.
Louis Kottmann
@RobertHarvey pintu Anda harus dalam kondisi yang jauh lebih baik daripada milikku.
Jimmy Hoffa

Jawaban:

14

Banyak perpustakaan perusahaan MS dan sebagian besar kontrol pihak ke-3 untuk .net telah membuat saya merasa seperti ini setelah sedikit digunakan.

Jarak tempuh Anda mungkin beragam

Tagihan
sumber
2
Setuju - sebagian besar perpustakaan Enterprise membingungkan atau tidak intuitif, dengan parade perpustakaan pihak ketiga yang melakukan pekerjaan lebih baik. Tapi tentu saja, jika Anda menampar Microsoft pada judul itu harus menjadi "praktik terbaik"
Watson
pada hari-hari awal entlib melakukan beberapa hal yang agak sulit dilakukan atau mencari tahu dengan kerangka awal ... hari ini tampaknya sebagian besar mundur kompatibilitas dengan hari-hari awal atau sebagian solusi yang dipanggang Anda lihat dalam rilis masa depan dalam banyak bentuk yang lebih baik.
Bill
13

Yayasan Komunikasi Windows

Fakta bahwa foto itu memiliki pisau Swiss Army di beranda meringkaskan semuanya bagi saya. Bayangkan konfigurasi XML sekitar empat kali lebih lama dari kode aktual yang Anda tulis, dan masih sangat sulit untuk menulis layanan SOAP yang dapat dioperasikan antara C #, Java, PHP, Python, dan semua bahasa lain yang seharusnya "seharusnya" dapat dioperasikan dengan ...

Dalam semua proyek masa depan, saya hanya akan bertahan dengan REST.

Dean Harding
sumber
2
WCF 4.0 tidak memerlukan file konfigurasi XML sama sekali. Saya tidak punya pengalaman dengan interoperabilitas dengan teknologi lain (selain menggunakan WCF sebagai klien, yang bekerja dengan baik), tetapi saya dapat mengatakan saya merasa mudah dan intuitif. Meskipun saya mulai menggunakannya tanpa membaca buku apa pun atau mengikuti pelatihan apa pun (dan dengan tenggat waktu yang harus dipenuhi), saya dapat berhasil.
Allon Guralnek
4
Saya telah mengganti nama "WCF" menjadi "WTF".
MetalMikester
1
@ Allon: Saya akui saya belum mencoba WCF 4.0, sangat mungkin mereka membuat perbaikan signifikan di area itu ...
Dean Harding
12

Salah satu masalah yang saya alami dengan orang-orang "menggulung sendiri" adalah bahwa - sementara pendekatan mereka sering lebih cepat dan sederhana - itu juga lebih cenderung rapuh, memiliki bug, tidak lengkap, dan / atau mengandung kelemahan keamanan .

Contoh sederhana: mungkin 10 kali lebih mudah untuk menggunakan printf untuk memancarkan XML daripada menggunakan perpustakaan:

printf("<xml>%s</xml>", str);

tetapi apakah Anda ingat untuk melarikan diri karakter khusus str? Misalnya ' <' dan ' &'? Beberapa orang mungkin mengatakan "tidak saya tidak" dan melanjutkan untuk menulis ini:

printf("<xml><![CDATA[%s]]></xml>", str);

Tapi itu masih akan memancarkan XML yang rusak jika str" ]]>" berisi substring di mana saja di dalamnya. Kasing tepi - tentu. Tetapi masih skenario yang valid yang dapat menyebabkan masalah tak terduga dengan konsekuensi serius.

Ada banyak waktu dan tempat di mana "menggulung sendiri" mungkin tepat, tetapi kadang-kadang membutuhkan banyak pengalaman dan pengetahuan untuk mengidentifikasi kapan itu tepat. Itulah sebabnya saya sering mendorong programmer untuk lebih suka menggunakan perpustakaan yang sudah ada (jika tersedia) daripada rutinitas yang diimplementasikan sendiri.

Mike Clark
sumber
11

Log4Net

Perpustakaannya bagus, tapi dokumentasinya menghebohkan. Itu berlebihan untuk apa yang ingin saya lakukan.

Saya menggunakan Trace sebagai gantinya.

Robert Harvey
sumber
1
Robert, kau juga mengalahkanku kalau kau bajingan! Saya hanya melihat log4net dan berpikir "wow, pendengar ini keren. Sekarang bagaimana saya menggunakannya ..?" dan kemudian saya pikir pada saat saya sudah tahu saya bisa menulis sendiri.
JohnL
5
Sungguh - saya harus dengan hormat tidak setuju - itu tidak bisa lebih sederhana daripada log.error ().
Watson
3
@Watson: Jika memang sesederhana itu, mengapa Anda membutuhkan kerangka kerja?
Robert Harvey 6-10
Saya menggunakan alternatif The Object Guy yang membutuhkan beberapa menit untuk mengonfigurasi, setelah ditunda oleh kompleksitas Log4Net yang tidak perlu.
cjmUK
7

SharePoint

Jangan salah paham, SharePoint luar biasa jika Anda membutuhkan sebagian besar hal yang datang dengannya (dan ia datang dengan banyak!), Tetapi jika Anda tidak tahu apa yang Anda lakukan atau hanya membutuhkannya untuk satu atau dua hal, itu sebagian besar tidak sepadan dengan usaha dan konfigurasi.

Ryan Hayes
sumber
6

ASP.NET WebForms - Meskipun sebagai pengembang web .NET sudah lama saya mencoba, sejak saya mulai menggunakan kerangka kerja MVC (dan berasal dari lingkungan PHP / Smarty Template) - Anda menyadari bahwa terkadang ada yang lebih baik cara untuk melakukan pengembangan web dan abstraksi yang digunakan berlebihan dan bocor .

Watson
sumber
Saya pikir maksud Anda ASP.NET WebForms, berbeda dari ASP.NET MVC. Benar?
Eric King
@ Eric - ya benar, saya harus memperbaikinya!
Watson
3

Dalam hampir setiap kasus saya telah melakukan ini, saya akhirnya menyesal:

  • Menggunakan fungsi oci_ * PHP alih-alih pustaka wrapper ternyata merupakan langkah buruk karena pemeliharaan kode. Porting semua kode ke Zend_Db membuat pengembangan mempertahankan kode database lebih mudah.
  • Menggulir komponen grid ajax saya sendiri, yang membutuhkan terlalu banyak waktu untuk berkembang lebih lanjut, mengingat seberapa cepat beberapa komponen grid lainnya berkembang. Saat ini saya porting semuanya ke jaringan Ext JS karena dengan itu ada banyak fungsi pihak ketiga yang tersedia.
  • Menghindari perpustakaan seperti prototipe dan jquery menyebabkan berulang kali terjadi masalah lintas-browser, seringkali sulit dilacak. Port Ext JS telah mengatasi masalah lintas-browser saya. Itu ajaib, bahkan jika itu adalah kerangka kerja yang luas yang membutuhkan waktu berminggu-minggu untuk saya mengerti.

Saya sampai pada kesimpulan bahwa jauh lebih baik untuk memilih beberapa kerangka kerja pihak ketiga yang dapat diandalkan, dan menggunakannya sebagai dasar untuk semua yang Anda lakukan. Kerangka kerja tersebut dikembangkan dan didebug oleh orang lain, yang merupakan penghemat waktu yang luar biasa setelah Anda membakukannya dan memahaminya dengan baik.

Joeri Sebrechts
sumber
+1. Dan itu membantu jika pustaka tersebut adalah open source. Silakan dan unduh kode sumber ke semua perpustakaan yang Anda gunakan, jika Anda belum melakukannya. Membaca kode sumber perpustakaan adalah cara yang bagus untuk mendiagnosis dan memperbaiki masalah, serta kesempatan untuk belajar dari kode programmer lain (mungkin kualitasnya cukup tinggi).
Mike Clark 6-10
2

System.Text.RegularExpressions

Regex sangat kompleks dan sangat lambat. Saya akan sangat jarang menggunakan Regex dan biasanya menulis parsing dan pencocokan teks saya sendiri.

Kadang-kadang saya akan menemukan Regex berguna untuk pencocokan yang sangat kompleks.

Chris Persichetti
sumber
Apakah Anda mengkompilasi regexp dengan benar [atau mungkin System.Text.RegularExpressions lebih lambat daripada Perl & co. penerapan]?
Maciej Piechotka
3
Regex mungkin relatif lambat dibandingkan dengan penguraian string manual, tetapi lebih cepat daripada yang dipikirkan banyak orang, dan biasanya lebih dari cukup cepat untuk sebagian besar aplikasi praktis.
Mike Clark 6-10
2
Saya tidak berpikir ini sebenarnya keluhan tentang implementasi. NET khususnya, karena tidak ada yang sangat kompleks atau lambat tentang hal itu (pada kenyataannya, saya telah menemukan itu menjadi salah satu implementasi lebih cepat yang tersedia). Setidaknya, itulah pengalaman saya. Tentu saja, ekspresi reguler pada umumnya mudah menjadi kompleks, dan tentu saja ada kecenderungan bagi orang untuk menggunakannya di tempat yang sama sekali tidak pantas.
Dean Harding
2

Bukan berarti Delphi4PHP membutuhkan pers yang buruk, tetapi saya mencobanya (versi 2.0) dan sangat sulit untuk menekuknya sesuai keinginan saya. Saya ingin menggunakannya untuk membuat aplikasi web gaya youtube bagi klien untuk melihat video pelatihan, tapi itu terlalu rumit dan ketika saya mencoba untuk menggabungkan kerangka kerja PHP (VCL4PHP, Zend, Smarty dan Recess) saya bertemu dengan yang tak terelakkan, harus mengganti nama semuanya karena tidak ada ruang nama dalam masalah PHP 5.

Meski begitu, pada akhirnya saya tidak menggulung sendiri. Saya menggunakan hanya belajar dari kesalahan saya dan memutuskan untuk membuatnya sangat sederhana dan menggunakan CodeIgniter dan FlowPlayer (dengan JQuery).

Saya mendambakan bahwa kerangka kerja apa pun yang membuatnya keluar dari PHP 5 hidup, PHP 6 akan memiliki beberapa kerangka kerja luar biasa yang mungkin benar-benar bermain bagus bersama.

Peter Turner
sumber
2

Weka

Saya melakukan banyak pekerjaan pembelajaran mesin, dan jika saya hanya perlu sesuatu yang sederhana seperti Naive Bayes atau regresi logistik, saya senang sekali meninggalkan Weka. Ini memiliki implementasi yang baik dari beberapa algoritma pembelajaran mesin yang cukup rumit, tetapi API adalah rekayasa berlebihan yang terlalu berorientasi objek old-school (pre-generics) Java API. Hal-hal yang mengganggu saya tentang hal itu:

  1. Ini menggulung susunan resizeable-nya sendiri yang tidak digunakan orang lain, menjamin pekerjaan yang sibuk mengonversi bolak-balik.

  2. Banyak kopling berurutan di mana metode harus dipanggil dalam urutan tertentu dan kecuali Anda benar-benar RTFM, Anda tidak akan menyadarinya.

  3. Setiap instance harus menjadi objek Instance, dan saya harus mendeklarasikan secara eksplisit dengan objek Atribut apakah itu nominal atau numerik. Ini menyebabkan banyak pekerjaan yang sibuk mengonversi data ke bentuk yang diinginkan Weka. Ini sangat menjengkelkan karena Weka API memberikan banyak sekali pengecualian sehingga kompilasi kode tidak berarti itu akan berhasil. Jika saya mendesain API, saya akan menjadi liberal dalam apa yang saya terima (mungkin hanya mengambil array Object) dan hanya mengintrospeksi data untuk mencari tahu apa yang saya dapatkan dan apa hal yang benar untuk dilakukan dengannya.

dsimcha
sumber
2

Pada proyek tertentu saya membuang EJB3. Itu memberi saya injeksi ketergantungan dan penanganan transaksi kontainer yang dikelola. Tapi itu memperkenalkan dependensi yang sangat besar (misalnya JBoss) dan membuat sistem sulit untuk menulis tes otomatis. Sekarang saya sudah menanggalkannya ke injeksi ketergantungan konstruktor JPA +.

Conor
sumber
1

Meludahkan HTML pada port debug pada aplikasi. Saya membutuhkan beberapa cara sederhana untuk mendapatkan beberapa data saat ini (dengan penyegaran otomatis). Menarik perpustakaan untuk memformatnya akan lebih baik, tetapi lebih mudah untuk mencetaknya saja.

Saya juga menolak pustaka untuk yang lain: Kami menggunakan pustaka XML yang besar dan kompleks di sebagian besar barang kami. Setelah menghabiskan 4 jam sehari mencoba membuatnya bekerja di aplikasi baru, saya hanya mengatakan 'tas itu', dan menarik TinyXML. Tidak ada yang sedekat ini, tetapi membutuhkan banyak BANYAK upaya untuk membuatnya melakukan hal-hal sederhana.

Michael Kohne
sumber
1

Baru-baru ini saya telah mengerjakan kompiler bahasa scripting yang dapat saya gunakan dalam aplikasi saya. Saya telah menggunakan yang lain, tetapi tidak ada yang melakukan persis apa yang saya butuhkan mereka lakukan. Jadi saya pikir mengapa tidak mencoba untuk menulis sendiri? Mungkin satu atau dua tahun sebelum benar-benar cocok untuk penggunaan umum, tapi itu ok. Plus, ini pengalaman belajar yang luar biasa.

Solusi 'roll my own' lainnya adalah karya yang digunakan untuk menerjemahkan aplikasi saya. Ada perpustakaan yang ada, tetapi saya tidak suka salah satu dari mereka. Jadi saya membuat sendiri.

Dan komponen basis data Delphi. Aku benci mereka. Selalu punya. Jadi saya membuat antarmuka basis data saya sendiri yang berfungsi seperti yang saya inginkan (dan persis seperti yang saya buat untuk PHP, membuat pengkodean lintas bahasa lebih mudah).

Pada dasarnya, ketika diberi pilihan, saya biasanya membuat perpustakaan sendiri.

GrandmasterB
sumber
Aku tahu apa yang kamu maksud. Saya dapat menunjukkan kepada Anda seluruh gudang STL, abstraksi DB buatan sendiri, seluruh bahasa dengan kompiler atau penerjemah mereka, dan apa yang tidak. Ini umumnya tidak disambut oleh kolega dan manajemen Anda, tetapi programmer apa yang tidak pernah menulis kompiler walaupun tidak ada yang peduli?
mojuba
0

Ohhh, banyak sekali. Saya telah bekerja pada beberapa proyek tangkas menggunakan open source apis. Hebat ketika mereka bekerja, tetapi seringkali kita menderita pengembang dengan jimat karena membawa semua jenis apis pihak ke-3, beberapa tidak jelas, beberapa tidak, hanya karena mereka ingin menggunakan satu atau dua kelas di dalamnya. Hasil akhirnya adalah mish-mash kode dan diretas bersama sistem. Mereka menyerahkannya dengan mengklaim bahwa itu adalah kode terbaik yang pernah ada, pergi dan orang-orang miskin yang mengambilnya menemukan kekacauan yang tidak dapat dipahami, tidak berdokumen yang penuh dengan masalah ketergantungan dan peretasan.

drekka
sumber