Büyük web siteleri neden arka uç ve ön uç için farklı diller kullanıyor?


26

Küçük MVC uygulamalarından anladığım kadarıyla HTML, JS, jQuery, vb. İle ilgilenen ön uca sahip olmanız ve denetleyicilerinizden ve modellerinden oluşan arka uca sahip olmanız.

Bununla birlikte, büyük şirketlerden gelen geliştiricilerle konuştuğumda, genellikle bir ön seviye ve arka uç seviyesine sahip olduklarından bahsederler. Bu yüzden bazen, C # ile ön uç ve Java ile arka uç olduklarını duyabilirim. Neden herhangi bir firma farklı dillerde bir arka uç ve ön uç istemiş olsun? Bu, büyük web sitesinin daha iyi ölçeklenmesine yardımcı oluyor mu?

İnsanlar ön uçlarının C # ile oluşturulduğunu söylediklerinde, bu ön uç için bir çerçeve (.NET gibi) ve arka uçta (Bahar gibi) ek bir çerçeve kullandıkları anlamına mı geliyor? Yoksa tamamen farklı bir şey mi demek?


6
Neden bir şeyleri aynı dilde yapmak istiyorsun? Diller farklı, hepsi farklı amaçlar için ayarlanmış. "Genel amaçlı dil" diye bir şey yoktur.
SK-mantık

33
@ SK-mantık: Tek bir dilde tek bir dilde yazmanın hiçbir avantajını ciddi olarak düşünemezsiniz?
back2dos

10
@ back2dos, hayır, tek bir avantaj göremiyorum. Çok aptalca, tasarlanmadığı bir şey için dil kullanmaya çalışmak. Bir dili başka bir tane olan bir alanda kullanmak aptalcadır, çok daha uygun.
SK-mantık

25
@ SK-mantık: Bu argümanla başlamak için herhangi bir popüler dili kullanmak aptalcadır, çünkü herhangi bir alan için, sadece o alan için tasarlanmış mevcut bir DSL vardır. Ama bunu bildiğinize inanıyorum, bu yüzden bugün sadece çok sinir bozucu bir ruh hali içindeyseniz şüpheleniyorum, yoksa başka bir genelleme seviyesinden ve duygusal patlamadan uzak durursunuz.
back2dos

3
Ekipler / Yöneticiler ve platformlar, belirli bir görevden önce dil seçimini yönlendirecektir. C # ASP.NET, bir Java eski arka uç uygulamasına web ön ucu olarak seçildi, çünkü bu web uygulaması hakkında Windows yığınına koymanın mükemmel bir uyum sağlayamadığından "benzersiz" bir şey vardı.
JeffO

Yanıtlar:


67

"Ön uç" ve "Arka uç", özellikle kurumsal uygulamalarda tehlikeli terimler olabilir. "Ön uç", kullanıcı arayüzü anlamına gelebilir veya tüm uygulama olabilir. "Arka uç", dahili olanları ifade etmek için kullanılabilir veya tüketilen veri tabanı veya harici hizmetler olabilir. Terimlerin sık sık ne anlama geldiği, tamamen kiminle konuştuğunuza bağlıdır. Peki belki "hey, bununla ne demek istiyorsun?" Diye sordun.

Büyük kurumsal gelişim içine almak zaman, yaşayacaksın takımların çok ama çok yazma sürü ve çok fazla kod. Bu ekipler, farklı konumlardan farklı dillerde, farklı paradigmalar kullanarak gelişecekler. Bu kodun bazılarının birlikte çalışması gerekecek ve çoğu da çalışmayacak.

Büyük bir banka için çalışıyorum. Ekibimiz C # 'daki uygulamamızı geliştiriyor. Hepsini. Ancak, çoğunlukla Java dilinde yazılmış web servislerini kullanıyoruz ve bu servisler, hesap verilerini uygun veri depolarından alıp alan ve hangi dillerin kullanıldığını bilen diğer servislerle konuşan diğer servislerle konuşuyor .

Kısa versiyon: İnsanlar işi yapan araçları kullanır.


1
Şimdi Malbolge'da çok basit / ortak bir şey yapan bir kamu web hizmeti yapmak istiyorum, böylece birisinin en arka uçlarını kullandığını söyleyebilirim.
Izkata

Bu dil kombinasyonunun etkisini nasıl elde edebilirim?
iptal

17

Soruyu biraz genişletmeniz gerektiğini düşünüyorum: Neden büyük yazılım projeleri birden fazla programlama dili kullanıyor?

En dikkate değer cevapları olan birçok olası cevap vardır:

  • Büyük uygulamalar, birçok bağımsız bölümden oluşur; sık sık, her bölüm farklı bir ekip veya hatta farklı bir dış yüklenici tarafından kurulur. En iyi teklifle devam etmenin yararı, genellikle her şeyi aynı dilde olmanın yararından daha büyüktür.
  • Diller gelir ve gider ve bazen büyük bir sistemin bir bileşeni ekosistemi geride bırakır. Microsoft dünyasından bir örnek, şimdiye kadar kaç şirketin tüm yeni projeler için C # kullandığı, ancak yine de çevresinde kayda değer bir VB kod tabanı var. Bir projeyi sadece en son programlama dilinde yapmak adına yeniden yazmanın maliyeti pratikte hiçbir zaman haklı değildir.
  • Üçüncü taraf bileşenlerle arayüz oluşturma. C # ekosisteminizin yalnızca Java çözümlerinin bulunduğu belirli bir görevi yerine getirmesi gerekiyorsa, iki seçeneğiniz vardır: çözümü kendiniz uygulayın veya Java çözümünü kullanın ve sisteminize entegre etmek için bir miktar yapıştırıcı geliştirin. İkincisi, önemsiz olmayan işler için neredeyse her zaman daha ucuzdur.

Performansla ilgili kaygılar pratik olarak hiçbir zaman sebep olmamakla birlikte, yüksek frekanslı alım satım gibi son derece kritik performans gerektiren uygulamalar dışında - bu alanlarda, kritik çekirdek motorunu daha iyi çalışma zamanı performansı olan bir dilde yazmak yararlı olabilir (C ++), fakat Java veya C # gibi daha yüksek seviyedeki destek sistemleri (kullanıcı arayüzü, raporlama vb.).


6

Büyük bir işletmede görecelidir.
Şirketimde yığın kabaca

(html/javascript)--> (JSP on Tomcat and Java based WebCMS) -> (.Net SOA)  

Böylece web geliştirme ekibi için ön kısım HTML / JS ve arka uç Java'dır. Kurum için ön uç Java ve arka uç Net.

Aslında .Net katmanının Fatura ve Hak Talepleri için bir COBOL / UNIX uygulamasıyla çalışması gerekir ve bu nedenle bu açıdan. Net ön uçtur ve COBOL arka uçtur.

Ve evet, diğerleri belirttiğimiz gibi, yığının her bir bölümünde çalışan UX tasarımcıları, HTML / JS devs, Java devs, Web Middleware, .Net devs, SQL devs, COBOL devs ekipleri var.

Aslına bakarsanız, yeterince büyük bir işletmede, tamamen kaplumbağadır.


Kaplumbağalar için +1. Ben sadece ön kısmı Assembly dili olan kaplumbağa olmadığım için mutluyum.
kmote

5

Kafa karıştırıcı anlambilim

Bu bir anlambilim meselesi. Birisi bir .NET ön ucu ya da Java ön uç geliştiricisi söylediğinde, genellikle cazip dilleri ve belki de bir daha asla kullanmayacak çerçeveleri kullanmaya çalışan çerçeveler hakkında çok şey bilen kişilerden bahsediyorlar. Şeyleri bir http duvarı (yani "web geliştirme") üzerinden gizlemek istemeyen veya en azından bu saçmalıkları öğrenmek istemediği varsayılmıştır. Karışık .NET ve Java söz konusu olduğunda emin değilim ama yalnızca MVC’nin Java’yı tüm iş modeli işleri için harekete geçirdiklerini ve .NET’in daha iyi tanımlanabilecek her şeyi ele almasını sağladığını tahmin edebiliyorum. "orta kademe" olarak ama yine de hepsi sunucu tarafında.

Asıl ayrım sunucuda ne olduğu ve müşteri veya tarayıcıda ne olduğu. Göndereceğiniz HTML'yi binaya ön uç ile "ön uç geliştirme" ile kolayca sınırlandırabilir ve bu nedenle tipik olarak ne yaptığımı tartışırken ön ve arka uç yerine istemci ve sunucu tarafı terimlerini kullanarak karışıklığı önlemeyi tercih ederim. (genellikle müşteri tarafında çalışma).

Müşteri Tarafı Dilleri

Tarayıcıda aynı dil grubunu kullanmamızın nedeni, tarayıcının alıcı tarafında olması ve çoğunlukla (şu anda Microsoft ve Adobe’nin şu anda çoğunlukla ölü olan bir direnci var) kimsenin üç tane göndermesini istememesidir. Her potansiyel müşteriyi karşılamak veya web'in çalışması için özel bir eklenti gerektirmek üzere aynı müşteri tarafının farklı sürümleri. Ayrıca, üç dil aslında müşteri tarafı endişelerini güzel bir şekilde kapsıyor; belge yapısı, her şeyin nasıl göründüğü ve nasıl davrandığı arasında gevşek bir bağlantı sağlayarak web uygulaması ön uçlarını hızla oluşturmamızı ve değiştirmemizi sağlıyor. Birini diğer ikisini kolayca değiştirmeden değiştirebilirsiniz.

Sunucu Tarafı Dilleri

Tabii ki sunucu tarafında web üzerinde bazilyon seçenek bulunmasının nedeni elbette olabilir. Bu senin sunucun. Tek yapması gereken, http / ssl aracılığıyla iletişim kurmak ve gerisi size kalmış. JavaScript artık bu arada bir seçenek, ancak bu ilginç bir soru getiriyor. Bir web uygulamasına hala HTTP duvarının her iki tarafında iki uygulama gibi davranıyorsanız. Acı dolu bilgilendirilmiş bir fikrim var, evet, yapmalı ve Node.js.


2

Kısacası, büyük projelerinizin olduğu yerlerde, proje üzerinde çalışan birden fazla geliştirici ekibiniz vardır ve bu ekipler uygulamanın farklı katmanlarında uzmanlaşma eğilimindedir.

Web kullanıcı arayüzüne odaklanıyorsanız ve uygulama seçiminizde esnekliğe sahipseniz, C # yerine JScript veya Flex gibi bir web kullanıcı arayüzü hedefli dili kullanmanız çok daha olasıdır.

Aynı şekilde, uygulamanın işlemsel veri deposundaysanız, aynı anda birçok eylemle ilgileniyorsanız, erlang gibi özel dilleri kullanma eğilimindedir. (Veya kısmen bu dillerde uygulanan üçüncü taraf ürünleri)


2

Bunun nedeni iş riskini dengelemek.

Diyelim ki bir şehirde dev bir işverensiniz. Çok sayıda farklı hizmet oluşturmak için birçok geliştirici kiralamak zorundasınız. Diyelim ki ilk değerlendirmeniz, Lanuage A'nın çıkarlarınıza en uygun olduğunu ve bununla başlamak istediğinizi varsayalım.

Bir teknolojiye karar verirseniz, yetenek havuzunu kurutabilirsiniz. Hemen köşesinde bir Dil B yıldızı varken iyi bir Langauge A çocuğu kiralamak istediğinize emin misiniz? Ya yarın Langauge A'nın çerçeveleri ana geliştirici tarafından desteklenmeyi kabul ederse? Ya yarın harika bir Dil C varsa, bunu beş yıl önce bir dil için yaptığınız için yok saymalısınız.

İdeal olarak istediğiniz, mevcut yetenek havuzunu ve teknoloji trendlerini yansıtan, farklı dillere sahip petrojen bir sistemdir. Yetenek havuzu ve trendler değiştikçe bu dengenin yavaşça değişmesini istersiniz, böylece tüm sistemlerinizin uygulanabilir olması ve insanları bakımlarını sağlamak için işe alabilirsiniz.

... ve bu şirketler böyle yapıyor.


1

Ön ucunuzu ve arka ucunuzu aynı veri kaynağını kullanan ayrı uygulamalar olarak düşünmeniz yararlı olacaktır.

Daha küçük siteler için bile, ön ucu müşterinin ara yüzleştiğini ve arka ucunu CMS gibi bir şey olarak düşünebilirsiniz. Bunlar kolayca ayrı MVC uygulamaları olabilir. Ön uç hala çalışacak modellere ve denetleyicilere ihtiyaç duyuyor - sonuçta denetleyici, site ziyaretçileriniz için giriş noktasıdır ve modeller veritabanınızdan kullanıcıya veri alma biçiminiz olacaktır.

Django / Python'u arka uçta CMS olarak kullanmaktan ve ön uçta Rails, CodeIgniter veya Spring MVC kullanmaktan hoşlanıyorum. Genellikle başka seçenek yoktur; müşteri zaten ön uçta bir dilde kurulmuş eski bir siteye sahip ve sadece bir CMS çözümü istiyorlar. Çoğu müşteri, CMS'nin söylenmediği takdirde farklı bir dil veya çerçeve kullandığını bile bilmiyordu.

Gerçekten yapmak istediğiniz site için en iyi olanı bulmakla ilgili. Ön ve arka uçlar gerçekten sadece veritabanını paylaşmaya ihtiyaç duyar, bu nedenle ikisi de bununla çalışabildikleri sürece, eldeki görev için en iyi seçenekleri seçmekten çekinmeyin.


0

Bir arka uç diline örnek, bir komut dosyası dili olan PHP'dir. Bir PHP sayfası istendiğinde, sunucu PHP kodunu okur ve işaretlemeyi oluşturur. Sonuç size gönderilen HTML'dir. Sen, web sayfası görüntüleyici, asla bir satır PHP kodu görmüyorsun. Web sunucusu yöneticisinin işini doğru bir şekilde yaptığını varsayarsak, sunucu gerçek PHP kodunu size gösteremez ve asla gösteremez. Sayfa sunulduğunda ve bu kod çevirisinin sonucu HTML olduğunda ayrıştırılır.


Ön taraf ile müşterilerin tarafını karıştırıyorsun. Kurumsal uygulamalarda, arka uç, daha büyük iş mantığı dahil olmak üzere verilerin depolandığı ve siparişlerin işlendiği yerdir. Ön uç, bu arka uç sistemlerini web tarafı (hangi teknoloji ile olursa olsun), bir masaüstü uygulamasından veya bir mobil uygulamadan geçirmek için çağıran şeylerdir. Bunların hepsi ön uç kodlaması olarak kabul edilir. Sıradaki sunucu tarafında karşı istemci tarafında, ama burada oda bitiyor.
Rob van der Veer

Cevabınızın neden farklı dillerin ön ve arka uçlar için kullanıldığına ilişkin birincil soruyu nasıl ele aldığını anlamadım.
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.