Membangun aplikasi web di sisi-server vs sisi-klien vs hibrid? [Tutup]

27

Saat ini ada beberapa pendekatan untuk membangun aplikasi web:

1. Sisi server saja

Ini adalah pendekatan klasik di mana Anda merender halaman di server dengan kerangka kerja web seperti Ruby on Rails, Django, Express, Play! Kerangka kerja dan lain-lain

Alur kerja umum : Bangun semua logika bisnis, model, dan tampilan templat di server dalam kerangka pilihan Anda.

2. API sisi-klien + REST

Relatif belum lama ini, komunitas web secara keseluruhan mulai membangun aplikasi sisi klien dalam Angular, Backbone, Ember, dan beberapa lusin kerangka kerja JavaScript MV * lainnya. Dan sekarang kami juga memiliki React.js bergabung dengan partai.

PEMBARUAN : Tidak ada kesalahpahaman. Yang saya maksudkan hanya dari sisi klien adalah pemisahan sepenuhnya dari kekhawatiran. Anda memiliki server REST API dan aplikasi sisi klien yang berbicara ke server itu. Tergantung pada kasus penggunaan Anda, kemungkinan besar, Anda tidak akan pernah memiliki aplikasi hanya sisi klien yang benar yang tidak terhubung ke back-end baik untuk otentikasi atau kegigihan data.

Alur kerja yang umum : Habiskan berjam-jam untuk memutuskan Angular vs Backbone vs Ember vs X. Kemudian Anda membangun rute, model, tampilan, pengontrol pada klien. Setelah selesai, sekarang buat model, pengontrol, rute di server. Dengan cara Anda melakukan jumlah pekerjaan ganda.

3. Hibrida

Saya tidak tahu banyak tentang menggunakan pendekatan ini, tetapi jika saya menebak, Anda membuat pandangan Anda (Lihat kerangka kerja MVC) di server. Hasilnya, Anda mendapatkan dukungan SEO plus pemuatan laman yang lebih cepat.

Di bagian depan Hybrid ada rendr airbnb yang konon menggabungkan backbone dan mengekspresikan bersama.

Eric Florenzo telah memposting di blognya hari ini: React: Akhirnya, tumpukan web server / klien yang hebat .

Jumlah cara untuk membangun aplikasi web sangat banyak. Dan bagi seseorang yang mempelajari pengembangan web, ini bisa menjadi masalah. Bagaimana seseorang memutuskan pendekatan mana yang digunakan untuk membangun aplikasi mereka selanjutnya?

Dinilai R
sumber
1
"Hanya Sisi Klien: ... Setelah Anda selesai, sekarang buat model, pengontrol, rute di server." Ini tidak menguraikan.
user16764
@ user16764 memperbarui pertanyaan saya.
Dinilai R

Jawaban:

13

Saya pikir Anda benar-benar salah memahami "Hanya Sisi Klien".

Pertama harus diberi label "Client Centric". Seluruh kerangka kerangka kerja seperti Angular ini adalah bahwa bagian "VC" dari MVC diimplementasikan sepenuhnya di peramban dalam Javascript. Logika tingkat "M" yang lebih tinggi dari bagian "M" - Model - diimplementasikan di browser dan logika "CRUD" tingkat rendah diimplementasikan pada server.

Logika bisnis dikembangkan sekali. Logika tampilan dikembangkan sekali. Logika kontrol dikembangkan sekali - semuanya dalam kerangka Javascript pilihan. Logika akses data juga dikembangkan hanya sekali tetapi kali ini pada kerangka RESTy atau SOAPy apa pun yang Anda pilih di sisi server.

Dalam kasus ekstrem, Anda dapat menerapkan Model sepenuhnya di klien, jika dapat mengakses data hanya dari satu browser di satu mesin, dan, minta data dibuang setiap kali opsi "Hapus Cookies" dipilih.

James Anderson
sumber
Sangat sulit untuk tidak mengembangkan setidaknya beberapa logika bisnis dua kali. Untuk pengalaman pengguna yang baik, Anda perlu memastikan pengguna memasukkan email mereka untuk melanjutkan. Tapi Anda tidak bisa mempercayai klien sehingga Anda juga perlu menerapkan aturan di server. Setidaknya saya sangat berharap Anda tidak mengatakan menerapkan logika bisnis di JS pada klien.
Andy
@Andy, itulah tepatnya poin saya. Ketika saya membangun aplikasi Ember, validasi formulir dasar harus dilakukan pada klien, tetapi juga harus dilakukan di server. Saya mendapat masalah serius satu kali karena tidak memvalidasi data saya di server dan sepenuhnya mempercayai klien.
Dinilai R
Andy et all - lihat google docs. Selain memuat dokumen, spreadsheet dll dari server, menyimpannya di akhir, dan mengambil cadangan sesekali di antara segala sesuatu yang terjadi di browser Anda. Situs Google Documents hanya bertindak sebagai penyimpanan data dan server otentikasi.
James Anderson
3
@JamesAnderson Google Documents sangat berbeda dengan mengatakan toko online. Anda sedang mengedit dokumen Anda sendiri, itu hanya sekumpulan data yang mereka simpan tanpa benar-benar peduli tentang apa artinya data. Tetapi apakah Anda benar-benar berpikir validasi pesanan harus dilakukan HANYA pada klien? Anda hanya meminta orang untuk memberi diri mereka produk gratis jika itu cara Anda membangun aplikasi semacam itu. Sepertinya Anda juga mengasumsikan bahwa Google sebenarnya tidak melakukan validasi data di server. Sebenarnya tidak ada cara bagi kita untuk mengetahui apa yang terjadi.
Andy
9

Jawaban untuk pertanyaan itu tergantung pada persyaratan. Pandangan sekilas sekilas pada sejarah semacam pengembangan web menunjukkan budaya koboi di mana berbicara dengan para pemangku kepentingan, pelanggan, pengumpulan persyaratan, sering diabaikan.

Saya cukup beruntung untuk menghadiri ceramah beberapa tahun yang lalu di mana saya mendengar sesuatu yang benar-benar macet dengan saya: "Anda memilih desain untuk memenuhi persyaratan, bukan persyaratan untuk memenuhi desain". Jadi ketika dihadapkan dengan pertanyaan seperti ini, Anda perlu mencari tahu apa yang sebenarnya dibutuhkan oleh orang-orang yang meminta Anda untuk membangun perangkat lunak ini.

Tugas Anda adalah menjelaskan pro dan kontra di balik setiap pendekatan.

RibaldEddie
sumber
1
Terima kasih. Apa yang Anda katakan masuk akal. Saya berharap ada "peluru perak", satu cara sejati untuk melakukan sesuatu. Saya mulai dengan kerangka kerja web Python yang disebut Django pada tahun 2011. Segera setelah ada dorongan besar ke kerangka MV * sisi klien seperti Backbone, Angular, Ember. Dan tiba-tiba cara Rails dan Django membangun aplikasi web menjadi usang. Tapi hari ini sepertinya kita mengambil langkah mundur dan mencampur sisi klien dengan sisi server sekali lagi untuk mencapai kinerja yang lebih baik.
Dinilai R
Sayangnya, tidak, tidak ada peluru perak. :) Namun triknya adalah memiliki pemahaman yang cukup tentang bagaimana potongan-potongan tersebut bersatu untuk menentukan hasil terbaik untuk tugas yang ada, dan juga untuk mendukung budaya refactoring yang kejam sehingga Anda selalu dapat mengubah hal-hal jika arah awal Anda tidak berhasil.
RibaldEddie
1
Ini bagus dan semua tetapi kadang-kadang kedua pendekatan itu layak dan dalam hal ini Anda membutuhkan sesuatu selain persyaratan untuk membuat keputusan.
Ced
5

Saya pikir salah satu poin kunci dari pendekatan dan kerangka kerja yang lebih baru adalah bahwa ada lebih sedikit kopling antara teknologi ujung depan dan teknologi ujung belakang.

Idenya adalah bahwa Anda dapat menggunakan kerangka apa pun pada klien dan menarik data dan / atau tampilan dari sejumlah sumber terlepas dari kerangka sisi server.

Ini memungkinkan kita memilih alat terbaik untuk menyelesaikan pekerjaan dan pilihan kita dapat berkembang secara mandiri.

Memang, saya belum menggunakan Angular atau Backbone jadi saya tidak bisa membuat rekomendasi yang berpengalaman. Tumpukan basis saya saat ini terdiri dari mvc sisi server tertipis atau layanan yang dapat saya temukan. Sebagian besar mengirimkan template dan data. Data yang diberikan dan / atau data berikutnya diambil sisi klien menggunakan javascript, jquery, dan css biasa saja.

Saya mulai di sini dan membangunnya jika saya perlu. Manfaat dari pendekatan ini terbukti ketika Anda berpikir tentang mendukung beberapa platform klien - browser, ponsel, dll. Jika Anda memerlukan rendering khusus klien, Anda tidak perlu membuat perubahan besar-besaran di sisi server.

crad
sumber