Sunucu tarafı vs istemci tarafı vs melez web uygulamaları oluşturmak? [kapalı]


27

Web uygulamaları oluşturmak için şu anda birden fazla yaklaşım var:

1. Yalnızca sunucu tarafı

Bu, sunucudaki sayfaları Ruby on Rails, Django, Express, Play gibi bir web çerçevesiyle oluşturduğunuz klasik bir yaklaşımdır! Çerçeve vb.

Tipik iş akışı : Tüm iş mantığınızı, modellerinizi oluşturun ve sunucudaki şablonları istediğiniz çerçevede görüntüleyin.

2. Müşteri tarafı + REST API

Nispeten çok uzun zaman önce, web topluluğu bir bütün olarak Angular, Backbone, Ember ve birkaç düzine diğer JavaScript MV * çerçevesinde müşteri tarafı uygulamalar oluşturmaya başladı. Şimdi de React.js partiye katıldı.

GÜNCELLEME : Yanlış anlama yok. Müşteri tarafında kastettiğim sadece endişelerin tamamen ayrılmasıdır. REST API sunucunuz ve o sunucuyla konuşan bir istemci tarafı uygulamanız var. Kullanım durumunuza bağlı olarak, olasılıklar, kimlik doğrulama veya veri kalıcılığı için hiçbir zaman bir arka uca bağlanmayan gerçek bir müşteri tarafı uygulamasına asla sahip olmayacaksınızdır.

Tipik iş akışı : Angular vs Backbone vs Ember vs X’e karar vermek için saatlerinizi harcayın. İşiniz bittiğinde, şimdi sunucu üzerinde modeller, denetleyiciler, yollar oluşturun. Bir şekilde iki kat iş yapıyorsun.

3. Hibrit

Bu yaklaşımı kullanma hakkında fazla bir şey bilmiyorum, ancak bir tahminde bulunacak olsam, görüşlerinizi (MVC çerçevesinin görünümü) sunucuda görürsünüz. Sonuç olarak SEO desteği ve daha hızlı sayfa yükleri elde edersiniz.

Açık Hibrid ön airbnb en bulunmuyor rendr sözde omurgasını birleştirir ve birlikte ifade.

Eric Florenzo bugün blogunda yayınladı: React: Sonunda harika bir sunucu / müşteri web yığını .

Web uygulamaları oluşturmanın yollarının miktarı çok zor. Ve web geliştirmeyi öğrenen biri için bu bir problem haline gelebilir. Bir sonraki başvurusunu oluşturmak için hangi yaklaşımın kullanılacağına nasıl karar verilir?


1
"Yalnızca İstemci Tarafı: ... Tamamladığınızda, şimdi sunucu üzerinde modeller, denetleyiciler ve yollar oluşturun." Bu ayrıştırmaz.
user16764

@ user16764 sorumu güncelledi.
R

Yanıtlar:


13

Sanırım "Yalnızca Müşteri Tarafı" nı tamamen yanlış anladınız.

İlk önce "Müşteri Odaklı" olarak etiketlenmelidir. Angular gibi çerçevelerin bütün bu noktası, MVC'nin "VC" bölümlerinin tamamen Javascript'teki tarayıcıda uygulanmış olmasıdır. "M" bölümünün "M" yüksek seviye mantığı - Model - tarayıcıda uygulanmıştır ve alt seviye "CRUD" mantığı sunucuda uygulanmaktadır.

İş mantığı bir kez geliştirildi. Görünüm mantığı bir kez geliştirildi. Kontrol mantığı bir kez geliştirilir - tümü tercih edilen Javascript çerçevesinde. Veri erişim mantığı da yalnızca bir kez geliştirildi, ancak bu sefer sunucu tarafında hangi RESTy veya SOAPy çerçevesini seçerseniz seçin.

Aşırı durumlarda, Modeli tek bir tarayıcıdan verilere erişebilmek kabul edilebilirse ve istemcide tamamen uygulayabilirsiniz ve "Çerezleri Temizle" seçeneği her seçildiğinde verilerin silinmesini sağlayabilirsiniz.


İş mantığının en azından bir kısmını iki kez geliştirmemek gerçekten zor. İyi bir kullanıcı deneyimi için, devam etmek için kullanıcının e-posta adresini girdiğinden emin olmanız gerekir. Ancak müşteriye güvenemezsiniz, bu nedenle kuralı sunucuya da uygulamanız gerekir. En azından gerçekten istemcide JS'deki iş mantığını uyguladığını söylemiyorsun.
Andy

@Andy bu tam olarak benim açımdan. Bir Ember uygulaması kurduğumda, temel form doğrulama istemcide yapılmalıydı, ancak sunucuda da yapılması gerekiyordu. Sunucudaki verilerimin doğrulanmaması ve müşteriye tamamen güvendiğim için bir keresinde ciddi bir sorun yaşadım.
R

Andy ve diğerleri - google docs'a bir göz atın. Dokümanı, e-tabloyu sunucudan yüklemek, sonunda kaydetmek ve ara sıra yedeklemeyi tarayıcınızda diğer her şey arasında yapmaktan başka. Google Dokümanlar sitesi yalnızca bir veri deposu ve kimlik doğrulama sunucusu olarak işlev görür.
James Anderson

3
@JamesAnderson Google Dokümanlar, bir çevrimiçi mağaza söylemekten oldukça farklıdır. Kendi belgenizi düzenliyorsunuz, bu yalnızca verilerin ne anlama geldiğine dikkat etmeden kaydettiği bir veri bloğu. Ancak sipariş doğrulamasının SADECE müşteride yapılması gerektiğini düşünüyor musunuz? Siz böyle bir uygulamayı nasıl inşa ederseniz, insanlardan kendilerine ücretsiz ürünler vermelerini istiyorsunuz. Ayrıca, Google’ın aslında sunucu tarafında herhangi bir veri doğrulama işlemi yapmadığını varsayıyorsunuz. Neler olduğunu bilmemiz için gerçekten bir yol yok.
Andy

9

Sorunun cevabı, şartlara bağlı olmasıdır. "Web" geliştirme türünün tarihine en azından bir elverişli bakış, paydaşlarla, müşterilerin, ihtiyaçların toplanmasının sık sık gözden kaçırıldığı bir kovboy kültürünü gösterir.

Birkaç yıl önce bir konuşmaya katılacak kadar şanslı oldum, burada gerçekten bana bağlı olan bir şey duydum: "tasarımı karşılamak için gerekenleri değil, gereksinimleri karşılayacak tasarımı seçersiniz". Öyleyse, böyle bir soruyla karşı karşıya kaldığınızda, sizden bu yazılımı oluşturmanızı isteyen kişilerin gerçekte neye ihtiyaç duyduğunu bulmanız gerekir.

İşiniz her yaklaşımın arkasındaki artıları ve eksileri açıklamak.


1
Teşekkürler. Söylediklerin çok mantıklı. Bir şeyler yapmanın gerçek bir yolu olan bir "gümüş kurşun" olduğunu umuyordum. 2011 yılında Django adlı bir Python web çerçevesiyle başladım. Kısa bir süre sonra, Backbone, Angular, Ember gibi müşteri tarafı MV * çerçevelerine doğru büyük bir itki geldi. Birdenbire Rails ve Django web uygulamaları geliştirmenin yolu modası geçmiş oldu. Ancak bugün daha iyi performans elde etmek için geriye doğru bir adım atıyoruz ve müşteri tarafını sunucu tarafında bir kez daha karıştırıyoruz.
R

Ne yazık ki, hayır, gümüş mermi yok. :). Ancak, işin püf noktası, eldeki iş için en iyi sonuçları belirlemek için parçaların nasıl bir araya geldiğinin yeterince anlaşılması ve aynı zamanda ilk yönünüzü verimli değilse, her zaman değişiklik yapabilmeniz için acımasız bir yeniden yapılanma kültürünü desteklemektir.
RibaldEddie

1
Bu gayet iyi ve hepsi ama bazen her iki yaklaşım da uygulanabilir ve bu durumda bir karar vermek için gerekenden başka bir şeye ihtiyacınız var.
Ced

5

Yeni yaklaşımların ve çerçevelerin kilit noktalarından birinin, ön uç teknolojiler ile arka uç teknolojiler arasında daha az eşleşme olduğu olduğunu düşünüyorum.

Buradaki fikir, istemcide hangi çerçeveyi kullanabileceğinizi ve sunucu tarafı çerçevesinden bağımsız olarak herhangi bir sayıda kaynaktan veri ve / veya görünümleri çekebilmenizdir.

Bu, işi halletmek için en iyi araçları seçmemizi sağlar ve seçimlerimiz bağımsız olarak gelişebilir.

Kuşkusuz, Açısal veya Omurga kullanmadım, bu yüzden tecrübeli önerilerde bulunamam. Şu anki temel yığım, bulabildiğim en ince sunucu tarafı mvc ya da huzurlu hizmetlerden oluşuyor. Çoğunlukla şablonlar ve veriler sunar. Veriler çoğunlukla düz ol'lu javascript, jquery ve css kullanılarak istemci tarafına getirilir ve / veya ardından veri alınır.

Buradan başlıyorum ve buna dayanmak zorundaydım. Birden fazla müşteri platformunu (tarayıcı, mobil vb.) Desteklemeyi düşündüğünüzde, bu yaklaşımın yararları açıktır. Müşteriye özel işleme ihtiyaç duyuyorsanız, sunucu tarafında büyük değişiklikler yapmanız gerekmez.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.