Ruby, Python, PHP Spring olmadan nasıl yönetilir?


13

Kurumsal Java uygulamaları ve web servislerini yan projelerim için ( Spring , Hibernate, Maven, RESTEasy) ve PHP (CakePHP) ve Python (Django) yazıyorum.

Spring'in getirdiği Denetimin İnversiyonu, En Boy Odaklı Programlama vb. Değerlerini görsem de, Java yığınında olmayan büyük web uygulamalarının Spring gibi bir çerçeve olmadan nasıl yönetildiğinden emin değilim.

Peki, geliştiricilerin Spring'in elimine ettiği veya bir şeyi kaçırdığım sıkı sıkıya bağlı bileşenleri ve diğer şikayetleri "katlamak" mı gerekiyor?

Spring'e aşina olmayanlar için en çok kullandığımız özellikler:

  • Kontrol konteynerinin ters çevrilmesi: uygulama bileşenlerinin yapılandırılması ve Java nesnelerinin yaşam döngüsü yönetimi,

  • En boy odaklı programlama: kesişen rutinlerin uygulanmasını sağlar,

  • İşlem yönetimi: çeşitli işlem yönetimi API'lerini birleştirir ve Java nesneleri için işlemleri koordine eder.


3
Spring'in ne yaptığını en azından kısaca açıklarsanız, muhtemelen daha iyi cevaplar alacaksınız.
Per Johansson

4
Pythonistaların Java'nın moda sözcüklerini kullanmaması, tasarım desenlerinin önemli ölçüde farklı olduğu anlamına gelmez. Eh, belki daha az şişkinlik hariç.
vartec

6
Senin tanımınla bile Spring'in ne yaptığını bilmiyorum.
sevenseacat

Ve bu Bahar'la ilgili en büyük sıkıntılardan biri. Java kurumsal geliştirme yapmaya başlamadan önce buna gerek duymadım.
rdasxy

Ben bir Java geliştiricisiyim, ancak karmaşıklığı nedeniyle baharı gerçekten sevmiyorum.
Mahmoud Hossam

Yanıtlar:


15

Diğer platformların Spring'e ihtiyacı yoktur çünkü bu diller Java kadar kısıtlayıcı bir yere yakın değildir.

Node.js ile bir örnek vereceğim

  • Kontrol kapsayıcısının ters çevrilmesi: uygulama bileşenlerinin yapılandırılması ve Java nesnelerinin yaşam döngüsü yönetimi

sunucu yapılandırması ya kodda ya da basit bir json yapılandırma dosyasında yapılır. Genel IoC sistemlerine gelince, onlara ihtiyacımız yok, Javascript etkileyici ve dinamik bir dildir. Evet, IoC'ye ihtiyacınız var, ancak bu basit, işlev parametreleri olarak nesnelerinize bağımlılıkları geçirin.

  • En boy odaklı programlama: kesişen rutinlerin uygulanmasını sağlar

Sadece böyle bir şeye ihtiyacımız olduğunu düşünmüyorum, modüler kod yazıyoruz ve çalışıyor.

  • İşlem yönetimi: çeşitli işlem yönetimi API'lerini birleştirir ve Java nesneleri için işlemleri koordine eder

noSQL inanılmaz derecede popüler. İşlem kavramı yoktur.

Şahsen bu tür sistemlerin şişirildiğini ve aşırı üretildiğini ve sadece onlara ihtiyacınız olmadığını söyleyebilirim. Diğer diller ve platformlar yalın ve çevik kalır.


8
Ayrıca, Python ve Ruby'ye bir şeyler enjekte etmek için ördek yazmayı ve maymun yamalamayı kullanmanın ne kadar basit olduğunu kaçırdınız.
Danny Staple

3
Doğru, diğer dillerin Bahar olmamasının nedeni, ... aslında yararlı olması
Dean Harding

7
IoC, AOP veya işlem yönetimine ihtiyacınız olmadığını söylemek kısa görüşlü ve yanlıştır. Birçok üst düzey dil, AOP ve / veya IoC tasarım ilkelerini kullanarak kolayca kod yazmanıza olanak tanır. Üst düzey dillerin çoğunun bu yetenekleri sağlamak için açık bir sınıfa veya konteynere ihtiyacı yoktur.
dietbuddha

2
@Raynos Jenerik IoC sistemlerine gelince, sadece onlara ihtiyacımız yok, javascript etkileyici ve dinamik bir dildir. Bu bir dereceye kadar yanlış bilgi. Sen değil düşünmek onlara ihtiyaç. coffeescripter.com/2010/08/…
Aaron McIver

4
Haklıysan IoC'ye ihtiyacımız var.
Raynos

15

Çoğu üst düzey dilde AOP ve / veya IoC tasarım ilkelerini kullanarak yazmak önemsizdir.

AOP'yi uygulamak için ihtiyacınız olan tek şey, dilin daha üst düzey işlevleri desteklemesi içindir. Örneğin:

def log(fn):
  def wrapped_fn(*a, **kw):
    logger.log(fn_formatter(fn, a, kw))
    return fn(*a, **kw)
  return wrapped_fn

@log
def do_something(my_friend):
  return have_fun_with(my_friend)

Programlama sırasında genel IoC veya Bağımlılık Enjeksiyonu ilkelerini de takip edebilirsiniz. Bu özelliği sağlamak için belirli bir konteynere ihtiyacınız yoktur. Kodu bu şekilde yazabilirsiniz.

def etl(iextract, transformations, iload):
  return iload(itertools.imap(compose(*transformations), iextract()))

9

Python, Bahar'ın da Bahar Python'undan hoşlanır .

Java geliştirmeyi kolaylaştırmak için bahar çerçevesi oluşturuldu ve Java geliştirme için doğru olan şey Ruby veya Python geliştirme için doğru değil.

Örneğin Ruby, kendi AOP'nizi oluşturabileceğiniz Metaprogramlama yeteneklerine sahiptir.

İronik olarak, yeni Java web çerçeveleri Django ve Rails çerçevelerini yakalamaya çalışıyor (örneğin bkz. Grails ve Play! Çerçeveleri).


4
Grails bir Java çerçevesi değildir. Harika bir çerçevedir. Groovy, Java bayt kodunu derler, ancak Java değildir.
kevin cline

@kevincline Evet biliyorum ama günün sonunda bir JVM web çerçevesi (Spring ve Hibernate üzerine kurulu).
Chiron

1
Evet, Grails ile ilgili en güzel şey Spring'i bilmek zorunda olmamanız.
kevin cline

1
@kevincline Mutlaka doğru değil. Bazen ilkbahara geri dönüp orada her şeyi değiştirmelisin
Chiron

3

Python için BlueBream (diğer adıyla Zope 3) Spring'in yaptıklarını ve daha fazlasını sağlar.

Karmaşıklık ve güç bir bedeli vardır, ödemek istemediğiniz zamanlar vardır.

Birçok programcı BlueBream'i yıldırıcı buluyor ve yapmaları gerekenler için çok fazla yol alıyor, daha yalın, daha küçük araç setlerini tercih ediyorlar. Diğer çözümlerin çoğu (Django vb.) MVC paradigmasına dayanmaktadır.

Güzel Playframework gibi şeylerle, Java alanında da benzer bir güçleri görebilirsiniz .

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.