Apakah masuk akal untuk menghindari kerangka kerja saat membuat webapp besar dengan PHP?

9

Menjadi pengembang aplikasi web PHP selama beberapa tahun sekarang, saya sudah memiliki bagian MVC dan kerangka kerja. Awalnya saya pikir itu yang terbaik sejak memotong roti; semuanya tampak sangat mudah diimplementasikan.

Namun sekarang, tampaknya semakin kompleks aplikasi yang didapat, semakin rumit kerangka kerja yang diperkenalkan, jadi saya harus mengembangkan solusi untuk mengatasinya. Penanganan seperti itu biasanya cukup menakutkan dan kompleks karena saya harus mempelajari kode inti kerangka kerja dan membuat perubahan sehingga berperilaku seperti yang saya inginkan.

Misalnya, di salah satu proyek saya di mana saya menggunakan Slim (C) + Idiorm (M) + Twig (V) (yang saya percaya sangat fleksibel), saya harus membuat fungsi kustom hanya untuk menampilkan data dinamis di templat induk; tanpa kerangka kerja saya bisa menjalankan mysql_query () di file yang disertakan.

Oke, kerangka kerjanya keren jika saya membuat situs web profil perusahaan yang sederhana; Saya hanya dapat menyiapkan beberapa kode dalam satu malam dan biasanya sudah siap di pagi hari, dan jumlah praktik pengkodean yang baik dan pola desain yang saya pelajari dari mereka sangat berharga.

Tapi sungguh, untuk aplikasi web yang kompleks seperti sistem manajemen sekolah berbasis web berbasis web, kerangka kerja biasanya menghalangi proses bisnis saya seperti dalam contoh di atas.

Jadi pertanyaan saya adalah: apakah boleh kembali ke dasar, dan menggunakan kode PHP standar dan perpustakaan untuk melakukan proyek saya berikutnya di mana mungkin ada trilyun kerangka kerja dan perpustakaan, asalkan saya dapat menggunakan praktik pengkodean yang baik dan mengikuti pola desain yang masuk akal suka MVC? Tim pengembangan saya cukup kecil: hanya 2 programmer dan 1 desainer. Pemrogram lain setuju dengan pemikiran saya di atas.

Furunomoe
sumber
1
"Namun, semakin kompleks aplikasi yang didapat, semakin banyak kerumitan yang saya dapatkan dengan kerangka kerja". Ini hanya argumentatif dan subyektif. Bisakah Anda menghapus keluhan seperti ini dan sampai ke pertanyaan sebenarnya? Bisakah Anda memberikan contoh konkret dan spesifik dari masalah yang ingin Anda selesaikan? Jika ini hanya "Saya tidak suka kerangka kerja", itu sebenarnya bukan pertanyaan yang sangat bagus. Mungkin Anda bisa fokus pada sesuatu di mana ada jawaban nyata, bukan berbagi pendapat.
S.Lott
@ S.Lott: Ya, saya memberikan contoh dalam pertanyaan saya. Dan sebenarnya, saya tidak membenci kerangka kerja. Saya hanya ingin tahu pikiran orang tentang tidak menggunakan kerangka kerja PHP di zaman modern.
Furunomoe
"Saya sering harus membuat fungsi khusus hanya untuk menampilkan data dinamis"? Bukan contoh yang sangat rinci. Tidak jelas mengapa atau bagaimana kerangka kerja itu mengecewakan Anda. Ada kemungkinan sangat jauh bahwa Anda menggunakan kerangka kerja secara tidak benar.
S.Lott

Jawaban:

17

Pengalaman saya sangat bertolak belakang dengan pengalaman Anda. Ketika melakukan hal-hal kecil dan cepat, suatu kerangka kerja dapat "menghalangi" sedikit karena Anda perlu meletakkan kode Anda dengan cara tertentu dan memikirkan hal-hal dengan cermat sebelum melanjutkan. Dengan hanya melompat langsung ke sana, mysql_queryprototipe Anda dapat berjalan lebih cepat.

Tetapi untuk situs yang besar dan kompleks, meletakkan kode dengan hati-hati dan benar - benar memikirkan bagaimana Anda menulis kode Anda sangat penting jika Anda menginginkan situs yang dapat dikelola di masa mendatang.

Secara khusus, menambahkan mysql_querypanggilan ke bagian acak dari siklus halaman umumnya merupakan ide yang sangat buruk. Anda mungkin memiliki satu di sini dan satu di sana untuk memulai dan itu bukan masalah besar, tapi tak lama kemudian Anda punya selusin tersebar di semua tempat dan Anda bertanya-tanya mengapa halaman Anda membutuhkan waktu 3 detik hanya untuk merender. Atau Anda mengubah skema Anda dan bagian situs yang tampaknya tidak terkait untuk alasan yang tidak diketahui.

Dean Harding
sumber
1
Tentu saja saya tidak hanya melempar sembarangan mysql_query()ke sana - sini. Maksud saya, dalam PHP klasik saya cukup menambahkan panggilan ke sesuatu seperti Categories::read_all()dan mengulangi hasil dalam beberapa file header.php, sedangkan di Twig saya harus membuat fungsi Twig kustom untuk itu. Dan untuk prototyping, saya suka fitur perancah :)
Furunomoe
1
Anda tidak perlu kerangka kerja untuk menyusun dan memikirkan kode Anda dengan cermat. lebih mudah untuk melakukannya tanpa kerangka. kerangka kerja memaksakan pola organisasi kode yang biasa-biasa saja ke Anda.
Raynos
3
Kerangka kerja benar-benar bersinar ketika Anda melakukan proyek yang rumit karena mereka menetapkan seperangkat aturan dan pedoman yang harus Anda ikuti. Saya memberi +1 jawaban Dean karena ini juga merupakan pengalaman saya.
Burhan Khalid
7

Menurut pendapat saya suatu kerangka kerja seharusnya hanya digunakan jika itu membuat proses pengembangan lebih mudah bagi Anda, dan tidak rumit. Tidak ada yang salah dengan tidak menggunakan kerangka kerja atau membangun kerangka Anda sendiri, terutama untuk proyek-proyek kecil.

Tentunya Anda masih perlu memperhatikan aspek struktur dan keamanan, tetapi mengingat Anda telah menggunakan kerangka kerja selama bertahun-tahun, Anda mungkin sudah mengetahui aspek-aspek itu secara mendalam.

Untuk proyek yang lebih besar, saya setuju dengan yang lain, artinya menggunakan kerangka kerja mungkin akan menjadi pilihan terbaik dalam jangka panjang.

Daniel Scocco
sumber
Apa yang lebih mudah untuk situs kecil mungkin tidak lebih mudah untuk yang besar. Dan sebaliknya.
Goran Jovic
1
@ Goran Jovic, setuju.
Daniel Scocco
1
+1 untuk building your own. Apakah Anda menyadarinya atau tidak, Anda akan berakhir dengan berbagai fungsi dan / atau kelas pembantu, yang dapat dianggap sebagai kerangka kerja Anda sendiri.
Izkata
5

Pengalaman saya dengan "kerangka" sisi server sangat tidak menyenangkan, misalnya:

A) Jar file hell di mana kerangka kerja saling bertentangan atau server aplikasi untuk versi hal-hal yang saling tidak kompatibel yang tidak Anda inginkan dan tidak tahu apa-apa tentang dan tidak berada dalam posisi untuk menentukan karena hal itu akan mencegah Anda untuk menggunakan beberapa server.

B) Ledakan bencana dari penciptaan objek paling sederhana menjadi ribuan eksekusi SQL yang tidak perlu.

C) Gagasan aneh bahwa pengkodean 100 baris XML entah bagaimana lebih mudah atau lebih dapat diandalkan daripada pengkodean 2 baris Java.

D) Kebutuhan untuk menulis 100-baris baris POJOS sisi server yang sama sekali tidak perlu untuk memetakan ke objek sisi klien di yang lain, atau kadang-kadang beberapa bahasa lain (C # JS dll)

E) Tidak memiliki petunjuk apa yang sebenarnya terjadi ketika Anda mendapatkan jejak stack sedalam 30 level yang bahkan tidak termasuk baris kode yang Anda gunakan untuk memanggil framework.

Jadilah pengkhianat, tulis kerangka kerja Anda sendiri ... Anda tidak akan menyesal selama Anda berencana terlebih dahulu untuk menghilangkan semua hal yang tidak perlu yang dibodohi orang lain agar Anda pikir Anda butuhkan. Maka Anda akan mengerti semua itu, ia akan dikirim dalam Kb bukan Mb dan mungkin akan "berjalan di mana saja" yang merupakan salah satu prinsip dasar Jawa bukan?

Coba pikirkan seperti ini "mengapa saya membutuhkan ini ... apakah ini hanya untuk membuat kerangka kerja bahagia?" .. Jika saya tidak membutuhkan itu, lalu apa lagi yang tidak saya butuhkan?

Chris Harlow
sumber
4

Ada cara presentasi di belakang oleh pengembang Django, yang saya kesulitan menemukan sekarang, tetapi mereka berbicara tentang "lembah efisiensi" di mana kerangka kerja membuat Anda lebih produktif.

Dengan asumsi Anda tidak memiliki pengetahuan tentang kerangka kerja ketika Anda memulai sebuah proyek, produktivitas Anda pada awalnya akan sangat rendah - Anda akan belajar konvensi kerangka kerja daripada idiom bahasa (yang mudah-mudahan Anda sudah tahu).

Setelah waktu yang singkat, Anda akan mengikuti konvensi dan di sinilah kerangka kerja benar-benar bersinar - tiba-tiba produktivitas Anda menembus atap dan Anda mengalami kemajuan dan kecepatan luar biasa melalui pengembangan.

Namun, pada akhirnya, proyek tersebut akan menjadi sedemikian besar sehingga kerangka kerja itu lebih merupakan kendala daripada anugerah, dan Anda akan melihat diri Anda mencerca kerangka tersebut untuk mencoba dan mengimplementasikan beberapa fitur.

Dalam presentasi, mereka menyebutkan bahwa tentu saja jika Anda sudah memiliki pengetahuan tentang konvensi kerangka kerja maka proyek-proyek berukuran kecil tidak memiliki hambatan awal untuk efisiensi.

Jadi, untuk proyek-proyek kecil (dalam pengalaman saya, apa pun di bawah ~ 500 jam) efisiensi Anda dengan kerangka kerja akan lebih besar, kemungkinan, daripada efisiensi Anda tanpa. Setelah Anda mencapai ambang tertentu (antara 500 dan 800 jam, IME) maka Anda mulai menyadari bahwa ada batasan apa yang dapat ditawarkan kerangka kerja tersebut.

Dengan demikian, kerangka kerja menawarkan manfaat yang jauh lebih besar daripada sekadar efisiensi - kerangka kerja seperti Symfony atau Django atau (saya berasumsi) Rails menyediakan konvensi yang memungkinkan tim untuk melenturkan secara dinamis dan juga memungkinkan klien atau pemilik produk untuk mengubah staf mereka tanpa memerlukan sumber daya baru untuk mempelajari kembali sepenuhnya sistem baru - jika mereka terbiasa dengan konvensi suatu kerangka kerja, dan konvensi itu telah diikuti, mereka pada awalnya akan jauh lebih produktif daripada sebelumnya.

Jonathan Rich
sumber
4

Kerangka kerja yang dirancang dengan baik harus menjadi bantuan bagi programmer, bukan halangan. Jika kerangka yang Anda gunakan terlalu banyak menghalangi Anda, saya sarankan melihat kerangka yang berbeda. Masing-masing memiliki gaya pengkodean sendiri, dan pro dan kontra sendiri.

Karena itu, kerangka kerja Zend tampaknya sangat populer akhir-akhir ini, dan jujur? Saya berjuang untuk melihat mengapa kadang-kadang. Saya harus bekerja dengannya di masa lalu dan saya belum menyukai arsitekturnya sedikit pun. Kelas Zend_Form sangat direkayasa ulang, sistem dekoratornya benar-benar mengerikan digunakan, dan dekorator mengikat formulir untuk dilihat, melanggar konsep dasar OOP yang menyatakan bahwa objek harus digabungkan secara longgar. Ini juga memiliki banyak kode diimplementasikan sebagai Singletones (yang buruk karena alasan yang didokumentasikan dengan baik jadi saya tidak akan mengulangi) dan objek Registry juga berkontribusi untuk mendorong gaya pengkodean ceroboh.

Saya pernah mendengar bahwa Zend Framework 2 (saat ini dalam versi beta) adalah produk yang jauh lebih baik, tetapi rasa buruk yang ditinggalkan Zend 1 di mulut saya berarti saya tidak terburu-buru untuk mencobanya.

Namun, pada titik ini saya hanya mengoceh. :) Ada banyak kerangka kerja di luar sana, masing-masing dengan pro dan kontra mereka, saya sarankan mengevaluasi beberapa dari mereka.

GordonM
sumber
3

Apa yang Anda gambarkan telah disebut "abstraksi induced kompleksitas" di masa lalu. Satu-satunya makalah tentang pengelolaannya adalah: Mengelola Kompleksitas yang Diinduksi Abstraksi oleh David Keppel. Keppel akan menyarankan bahwa kerangka kerja memiliki desain yang menyebabkan kompleksitas yang disebabkan oleh abstraksi.

Bruce Ediger
sumber
2

Bekerja dengan suatu kerangka kerja membantu Anda mempercepat pengembangan Anda dengan tidak menciptakan kembali roda . Kerangka kerja juga memberi Anda alat untuk membantu Anda mendesain aplikasi dengan benar (tetapi itu tidak menghentikan Anda untuk melakukan keputusan desain yang buruk, misalnya mengakses database langsung dari tampilan).

Terkadang ketika Anda membutuhkan fungsionalitas khusus, mungkin diperlukan waktu lebih lama untuk menulisnya dengan benar. Tetapi jika Anda terus-menerus meretas dan menemukan solusi maka Anda bekerja melawan kerangka kerja atau kerangka kerja tidak sesuai dengan kebutuhan Anda.

Intinya adalah ini, menggunakan kerangka kerja besar untuk proyek-proyek sederhana (misalnya menampilkan beberapa bidang dari database) kadang-kadang bisa berlebihan. Untuk proyek besar atau kompleks, gunakan kerangka kerja.

Christian P
sumber
1

Ada beberapa sisi untuk menulis kode Anda sendiri vs menggunakan Framework:

Ukuran, pengetahuan dasar, dan pengalaman tim yang bekerja sama dengan Anda : Jika mereka tidak pernah menggunakan kerangka kerja atau memiliki gagasan tentang cara membuat aplikasi Anda lebih baik dengan kerangka kerja yang terdokumentasi dengan baik dengan banyak contoh dan melihat bahwa Anda mempercepatnya naik.

Ukuran aplikasi : Anda tidak pernah tahu sebelumnya bagaimana aplikasi itu akan digunakan. Jadi, Anda lebih baik bersiap untuk tumbuh dan berubah. Bisakah kerangka kerja Anda, yang ingin Anda kode dalam satu malam, tumbuh dengan kebutuhan manajemen? Ubah tipe bidang dalam DB dan perlu satu menit atau satu hari untuk menerapkan, itulah poin saya di sini.

Persiapan : Jika Anda menggunakan kerangka kerja Anda dapat mulai mendesain aplikasi alih-alih mengkode inti aplikasi Anda, gunakan yang mana keamanan dan penyebaran adalah bagian penting, itulah yang membutuhkan banyak waktu. Setiap saat.

Saya selalu berdebat dengan "manajemen" untuk menggunakan Symfony2 karena ini merupakan kerangka kerja untuk pengembangan web. Manajemen berpikir itu terlalu besar, akan membutuhkan biaya dan menghindar programmer karena kurva belajarnya curam.

menyilaukan
sumber
0

Kerangka kerja masih akan digunakan untuk bahasa apa pun di modern, terutama untuk proyek-proyek besar. Semakin besar proyek semakin penting suatu kerangka kerja, sehingga Anda tahu di mana logika untuk semuanya, dan setiap fitur memiliki tata letak yang sama. Itu membuat memodifikasi proyek lebih mudah dan belajar lebih mudah ketika Anda tahu di mana mencari semua akses data, atau semua presentasi, atau di mana aturan bisnis dikelola.

Perlu untuk memilih kerangka kerja yang sesuai dengan proyek, solusi perusahaan membutuhkan kerangka kerja yang mampu perusahaan. Ini adalah masalah yang akan Anda hadapi ketika menggunakan PHP. Banyak (sebagian besar) kerangka kerja tidak dimaksudkan untuk digunakan dalam skala besar, namun berfungsi dengan baik untuk situs pribadi yang lebih kecil. Untuk sesuatu seperti sistem manajemen sekolah yang Anda sebutkan, ini akan membutuhkan kerangka kerja yang lebih kuat, dan mungkin perlu waktu untuk menemukan kerangka kerja yang tepat dalam PHP.

Ryathal
sumber