Bagaimana Ruby, Python, PHP dikelola tanpa Spring?


13

Saya menulis aplikasi Java perusahaan dan layanan web di tempat kerja ( Spring , Hibernate, Maven, RESTEasy) dan PHP (CakePHP) dan Python (Django) untuk proyek sampingan saya.

Sementara saya memang melihat nilai yang Inversion of Control, Aspect Oriented Programming, dll yang membawa Spring, saya tidak yakin bagaimana aplikasi web besar yang tidak ada di stack Java mengelola tanpa kerangka kerja seperti Spring.

Jadi, apakah para pengembang hanya harus "tahan dengan" komponen-komponen yang digabungkan secara ketat dan keluhan-keluhan lain yang dihilangkan Spring atau apakah saya kehilangan sesuatu?

Bagi mereka yang tidak terbiasa dengan Spring, fitur yang paling sering kami gunakan adalah:

  • Inversi wadah Kontrol: konfigurasi komponen aplikasi dan manajemen siklus hidup objek Java,

  • Pemrograman berorientasi aspek: memungkinkan implementasi rutinitas lintas sektoral,

  • Manajemen transaksi: menyatukan beberapa API manajemen transaksi dan mengoordinasikan transaksi untuk objek Java.


3
Anda mungkin akan mendapatkan jawaban yang lebih baik jika Anda setidaknya menjelaskan secara singkat apa yang dilakukan Spring.
Per Johansson

4
Hanya karena Pythonista tidak menggunakan kata kunci Java, tidak berarti, bahwa pola desain sangat berbeda. Yah, mungkin kecuali kerugian lebih sedikit mengasapi.
vartec

6
Bahkan dengan definisi Anda, saya masih sama sekali tidak tahu apa yang dilakukan Spring.
sevenseacat

Dan itu adalah salah satu keluhan terbesar yang saya miliki dengan Spring. Sebelum saya mulai melakukan pengembangan perusahaan Java, saya tidak perlu melakukannya.
rdasxy

Saya seorang pengembang Java, tetapi saya benar-benar tidak suka pegas karena kerumitannya.
Mahmoud Hossam

Jawaban:


15

Platform lain tidak perlu Spring karena bahasa-bahasa itu tidak seketat Java.

Saya akan memberikan contoh dengan node.js

  • Inversi dari wadah Kontrol: konfigurasi komponen aplikasi dan manajemen siklus hidup objek Java

konfigurasi server dilakukan baik dalam kode atau file konfigurasi json sederhana. Adapun sistem IoC generik, kita tidak membutuhkannya, Javascript adalah bahasa yang ekspresif dan dinamis. Ya Anda membutuhkan IoC tapi itu sederhana, meneruskan dependensi ke objek Anda sebagai parameter fungsi.

  • Pemrograman berorientasi aspek: memungkinkan implementasi rutinitas lintas sektoral

Saya benar-benar tidak berpikir kita perlu sesuatu seperti ini, kita menulis kode modular dan hanya berfungsi.

  • Manajemen transaksi: menyatukan beberapa API manajemen transaksi dan mengoordinasikan transaksi untuk objek Java

noSQL sangat populer. Tidak ada pengertian transaksi.

Secara pribadi saya akan mengatakan sistem seperti itu bengkak dan over engineered dan Anda hanya tidak membutuhkannya. Bahasa dan platform lainnya tetap ramping dan gesit.


8
Anda juga telah melewatkan betapa sederhananya menggunakan mengetik bebek dan menambal monyet untuk menyuntikkan barang-barang di Python dan Ruby.
Danny Staple

3
Benar, alasan bahasa lain tidak memiliki Spring adalah karena ... mereka tidak perlu Spring untuk benar-benar berguna ;-)
Dean Harding

7
Mengatakan Anda tidak membutuhkan IoC, AOP atau manajemen transaksional adalah pandangan pendek dan salah. Banyak bahasa tingkat tinggi memungkinkan Anda untuk dengan mudah menulis kode menggunakan AOP dan / atau prinsip-prinsip desain IoC. Hanya saja sebagian besar bahasa tingkat tinggi tidak membutuhkan kelas atau wadah eksplisit untuk menyediakan kemampuan itu.
dietbuddha

2
@ Raynos Adapun sistem IoC generik, kita tidak membutuhkannya, javascript adalah bahasa yang ekspresif dan dinamis. Ini adalah informasi yang salah sampai batas tertentu. Anda tidak berpikir Anda membutuhkannya. coffeescripter.com/2010/08/...
Aaron McIver

4
@AaronMcIver Anda benar, kami membutuhkan IOC.
Raynos

15

Dalam sebagian besar bahasa tingkat tinggi, menulis dengan menggunakan AOP dan / atau prinsip desain IoC sepele.

Yang Anda butuhkan untuk menerapkan AOP adalah bahasa yang mendukung fungsi tingkat tinggi. Sebagai contoh:

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)

Anda juga dapat mengikuti prinsip umum IoC atau Injeksi Ketergantungan saat pemrograman. Anda tidak perlu wadah khusus untuk menyediakan kemampuan itu. Anda bisa menulis kode seperti itu.

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

9

Nah Python menikmati Spring juga Spring Python .

Kerangka pegas dibuat untuk memudahkan pengembangan Java dan apa yang benar untuk pengembangan Java tidak perlu benar untuk pengembangan Ruby atau Python.

Ruby misalnya memiliki kemampuan Metaprogramming yang berarti Anda dapat membuat AOP Anda sendiri.

Ironisnya, kerangka kerja web Java baru mencoba menangkap kerangka Django dan Rails (lihat kerangka kerja Grails and Play! Misalnya).


4
Grails bukan kerangka Java. Ini adalah kerangka kerja Groovy. Groovy mengkompilasi ke kode byte Java, tetapi itu bukan Java.
kevin cline

@ kevincline Ya saya tahu tetapi pada akhirnya itu adalah kerangka kerja JVM (dibangun di atas Spring dan Hibernate).
Chiron

1
Ya, hal hebat tentang Grails adalah Anda tidak harus mengenal Spring.
kevin cline

1
@kevincline Belum tentu benar. Kadang-kadang Anda harus kembali ke Spring dan men-tweak hal-hal di sana
Chiron

3

Untuk Python, BlueBream (alias Zope 3) memberikan apa yang dilakukan oleh Spring dan banyak lagi.

Kompleksitas dan kekuasaan harus dibayar, ada saatnya Anda tidak mau membayarnya.

Banyak programmer menganggap BlueBream menakutkan dan terlalu banyak untuk apa yang harus mereka lakukan, mereka lebih suka toolkit yang lebih ramping dan lebih kecil. Sebagian besar solusi lain (Django, dll.) Didasarkan pada paradigma MVC.

Anda dapat melihat kekuatan serupa beraksi di ruang Jawa juga, dengan hal-hal seperti Playframework yang indah .

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.