Disclaimer: Ben hiçbir şekilde bir Ruby Rails veya uzman tarafından duyuyorum.
15 yıldır üzerinde yakın sektöründe olmuştur birisi olarak ben özellikle Ruby on Rails hakkında beni sinir yapmak çeşitli uyarı işaretleri görüyoruz. Bir dil bir dildir, çünkü ben burada dilini görmezden gidiyorum. Ruby vb kapanışları, istisnalar, OO, bazı performans açısından eleştirmek ile modern bir dildir. Bu konular (bir Web sayfasını indirmek ve görüntülemek için 300ms alırsa, kim serverside kodları çalıştırmak için 10, 20 hatta 30ms alır umurunda?) Onlar gerçek dünya performansını etkilemez ve bu onlar içinde geçici olduğu, büyük ölçüde ilgisiz (Ruby 1.9 ile durum gibi görünüyor) sonraki sürümlerinde giderilmiştir.
Ruby on Rails is a closed, heavyweight stack. Ben bir gözlem değil, bir suçlama olarak bu demek. Bu sıkı çok (evet ben son sürümleri biliyorum ve makaleler Glassfish ve başka JPA sağlayıcı, diyelim ki, bunu kullanarak meseleyi çözüme sahip JBoss / Hibernate ile sıkıca entegre ve varlık) Java dünyasında JBoss Seam gibi (Prototip dahil) ile entegre
Bu iyi bir şey ve kötü bir şey de olabilir. J2EE, örneğin, oldukça açık bir yığın olarak bunu hemen hemen her parça (özellikle EJB) birlikte oluklu olabilir farklı projelerde yerini son on yıl içinde yazılım sektöründe çok yenilik neden oldu. Bahar için doğum yeri, kesinlikle inkübatör değildi eğer Ve tabii ki, oldu.
Diğer yandan onların kapalı yapısı, hızlı yenilik sağlar. Net, Microsoft (genellikle) de çok başarılı bir model gibi daha kapalı yığınları var. Birkaç kısa yıl içinde DirectX herhangi bir kapalı sistem açık standartlar sistemine göre çok daha hızlı gelişmeye çünkü tamamen bir oyun geliştirme platformu olarak OpenGL trouncing bir şaka olmaktan çıktı. Bu işler sadece nasıl.
Ben değineceğiz ilgili diğer nokta, son yıllarda orada ORMs doğru bir hareket Java ("nesne-ilişkisel haritalama"). Başka Net ve olmuştur ve bu Rails arkasında ivme parçası olmasıdır. Ben örnek "Using an ORM or plain SQL?" için, daha önce bu yorumladı ettik ve ben kendi bütünlüğü içinde bu noktaları yinelemek olmaz.
Size en nesne ve Orms köprü çalışmışlardır ilişkisel dünyalar arasında bir uyumsuzluk olduğunu biliyorum gibi. Son iki yıl içinde ben esas Java (JPA özellikle) ile bu ele ettik.
Şimdi bunu sonuna kadar eşleşmiyor iki şey arasında köprü ne zaman "leaky abstractions" (Joel dediği gibi):
All non-trivial abstractions, to some
degree, are leaky.
Şimdi ne ekleyelim şudur: soyutlama karmaşıklığı ve nasıl sızdıran soyutlama arasındaki ters bir ilişki vardır. Tipik bir örnek: ibatis. Ibatis son derece hafif ama güçlü sebat Java için çerçeve ve ben büyük bir hayranıyım değilim biridir. Bu dosyaları harici ve bunun üstüne SQL gibi birçok modern ORM davranışı, koyar sarar:
- Ilişkilerin yükleme tembel;
- Sonuç haritalama;
- Birden seviyelere sonuçları gruplama (bir şey JPA can't do); ve
- Ayrımcılık türleri (yani tip verileri belirlenir).
Ben ibatis tek karmaşıklığı havai CGLIB yoluyla tembel yükleme zamanı baytkodu geliştirme olmak Hazırda işlevselliği% 90-95 vardır tahmin ediyorum kendi sorguları yazmak zorunda sadece olumsuz (JPA o aynı şekilde yapar) (ve ben ciddi bir dezavantajı ama opnions değişecektir düşünmüyoruz).
Compare that to a JPA provider that relies on instrumentation, load-time weaving and non-standard class loaders to implemennt that extra 5-10% fu