Ruby, Python, PHP จัดการโดยไม่มีสปริงอย่างไร


13

ฉันเขียนแอปพลิเคชัน Java ขององค์กรและบริการเว็บในที่ทำงาน ( Spring , Hibernate, Maven, RESTEasy) และ PHP (CakePHP) และ Python (Django) สำหรับโปรเจคด้านข้างของฉัน

ในขณะที่ฉันเห็นคุณค่าของ Inversion of Control, Aspect Oriented Programming และอื่น ๆ ที่ Spring นำเข้ามาฉันไม่แน่ใจว่าเว็บแอปพลิเคชั่นขนาดใหญ่ที่ไม่ได้อยู่ในจาวาสแต็กจัดการโดยไม่มีกรอบเช่น Spring

ดังนั้นนักพัฒนาจะต้อง "ทนกับ" ส่วนประกอบที่แน่นหนาและความคับข้องใจอื่น ๆ ที่ Spring กำจัดหรือฉันขาดอะไรไปหรือเปล่า?

สำหรับผู้ที่ไม่คุ้นเคยกับ Spring คุณลักษณะที่เราใช้บ่อยที่สุดคือ:

  • Inversion of Control container: การกำหนดค่าของส่วนประกอบแอพพลิเคชั่นและการจัดการวงจรชีวิตของวัตถุ Java,

  • การเขียนโปรแกรมเชิงมุมมอง: ช่วยให้การใช้งานของกิจวัตรตัดข้าม

  • การจัดการธุรกรรม: รวบรวม API การจัดการธุรกรรมหลายรายการและประสานธุรกรรมสำหรับวัตถุ Java


3
คุณอาจได้คำตอบที่ดีกว่าถ้าอย่างน้อยคุณจะอธิบายสั้น ๆ ว่า Spring ทำอะไร
ต่อ Johansson

4
เพียงเพราะ Pythonistas ไม่ใช้ buzzwords ของ Java ไม่ได้หมายความว่ารูปแบบการออกแบบนั้นแตกต่างกันอย่างมาก อาจยกเว้นการสูญเสียน้อยกว่า bloat
vartec

6
แม้จะมีคำจำกัดความของคุณฉันก็ยังไม่รู้เลยว่าสปริงทำอะไร
sevenseacat

และนั่นเป็นหนึ่งในความคับข้องใจที่ยิ่งใหญ่ที่สุดที่ฉันมีกับสปริง ก่อนที่ฉันจะเริ่มทำการพัฒนาองค์กร Java ฉันไม่ต้องการมัน
rdasxy

ฉันเป็นผู้พัฒนา Java แต่จริงๆแล้วฉันไม่ชอบฤดูใบไม้ผลิสำหรับความซับซ้อนของมัน
Mahmoud Hossam

คำตอบ:


15

แพลตฟอร์มอื่น ๆ ไม่จำเป็นต้องใช้ Spring เพราะภาษาเหล่านั้นไม่ได้อยู่ใกล้กับที่ จำกัด เท่า Java

ฉันจะให้ตัวอย่างกับ node.js

  • Inversion of Control container: การกำหนดค่าของส่วนประกอบแอปพลิเคชันและการจัดการวงจรชีวิตของวัตถุ Java

การกำหนดค่าเซิร์ฟเวอร์จะทำในรหัสหรือไฟล์การกำหนดค่า json อย่างง่าย สำหรับระบบ IoC ทั่วไปเราไม่ต้องการใช้งานจาวาสคริปต์เป็นภาษาที่มีความหมายและมีชีวิตชีวา ใช่คุณต้องการ IoC แต่ก็ง่ายผ่านการพึ่งพาวัตถุของคุณเป็นพารามิเตอร์ฟังก์ชั่น

  • การเขียนโปรแกรมเชิงมุมมอง: ช่วยให้การใช้งานของกิจวัตรตัดข้าม

ฉันไม่คิดว่าเราต้องการอะไรแบบนี้เราเขียนโค้ดแบบแยกส่วนและใช้งานได้

  • การจัดการธุรกรรม: รวบรวม API การจัดการธุรกรรมหลายรายการและประสานธุรกรรมสำหรับวัตถุ Java

noSQL เป็นที่นิยมอย่างไม่น่าเชื่อ ไม่มีความคิดในการทำธุรกรรม

โดยส่วนตัวแล้วฉันจะบอกว่าระบบดังกล่าวมีความป่องและผ่านการออกแบบและคุณไม่ต้องการมัน ภาษาและแพลตฟอร์มอื่น ๆ นั้นมีความคล่องตัวและคล่องตัว


8
นอกจากนี้คุณยังพลาดวิธีง่าย ๆ ในการใช้การพิมพ์เป็ดและการปะของลิงเพื่อฉีดสิ่งต่าง ๆ ใน Python และ Ruby
Danny Staple

3
ใช่เหตุผลที่ภาษาอื่นไม่มีสปริงก็เพราะ ... พวกเขาไม่ต้องการให้สปริงมีประโยชน์ ;-)
Dean Harding

7
การพูดว่าคุณไม่จำเป็นต้องใช้ IoC การจัดการ AOP หรือการทำธุรกรรมนั้นเป็นสิ่งที่มองเห็นสั้นและผิด ภาษาระดับสูงหลายภาษาช่วยให้คุณสามารถเขียนรหัสโดยใช้หลักการออกแบบ AOP และ / หรือ IoC ได้อย่างง่ายดาย เป็นเพียงว่าภาษาระดับสูงส่วนใหญ่ไม่ต้องการคลาสหรือคอนเทนเนอร์ที่ชัดเจนเพื่อให้ความสามารถเหล่านั้น
dietbuddha

2
@Raynos สำหรับระบบ IoC ทั่วไปเราไม่ต้องการ javascript นั้นเป็นภาษาที่แสดงออกและมีพลัง นี่คือข้อมูลที่ผิดในระดับหนึ่ง คุณไม่คิดว่าคุณต้องการพวกเขา coffeescripter.com/2010/08/…
Aaron McIver

4
@AaronMc หากคุณพูดถูกเราจำเป็นต้องใช้ IoC
Raynos

15

ในภาษาระดับสูงส่วนใหญ่การเขียนโดยใช้หลักการออกแบบ AOP และ / หรือ IoC เล็ก ๆ น้อย ๆ

สิ่งที่คุณต้องใช้ AOP คือภาษาที่รองรับฟังก์ชั่นการสั่งซื้อที่สูงขึ้น ตัวอย่างเช่น:

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)

คุณยังสามารถปฏิบัติตามหลักการทั่วไปของ IoC หรือการพึ่งพาการฉีดเมื่อทำการเขียนโปรแกรม คุณไม่จำเป็นต้องใช้คอนเทนเนอร์เฉพาะเพื่อให้ความสามารถนั้น คุณสามารถเขียนโค้ดได้อย่างนั้น

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

9

Python ก็สนุกกับ Spring และSpring Pythonด้วย

Spring Framework ถูกสร้างขึ้นเพื่อให้ง่ายต่อการพัฒนา Java และสิ่งที่เป็นจริงสำหรับการพัฒนา Java นั้นไม่จำเป็นสำหรับ True สำหรับการพัฒนา Ruby หรือ Python

ตัวอย่างทับทิมมีความสามารถ Metaprogramming ซึ่งหมายความว่าคุณสามารถสร้าง AOP ของคุณเอง

อย่างไรก็ตามเป็นที่น่าสังเกตว่าเฟรมเวิร์ก Java เว็บใหม่กำลังพยายามจับกรอบ Django และ Rails (ดูตัวอย่าง Grails and Play!


4
Grails ไม่ใช่กรอบงาน Java มันเป็นกรอบ Groovy Groovy คอมไพล์รหัส Java byte แต่ไม่ใช่จาวา
วินไคลน์

@ kevincline ใช่ฉันรู้ แต่ในตอนท้ายของวันมันเป็นกรอบงานเว็บ JVM (สร้างขึ้นในฤดูใบไม้ผลิและไฮเบอร์เนต)
Chiron

1
ใช่สิ่งที่ยอดเยี่ยมเกี่ยวกับ Grails คือคุณไม่จำเป็นต้องรู้สปริง
วินไคลน์

1
@ kevincline ไม่จำเป็นต้องเป็นจริง บางครั้งคุณต้องถอยกลับไปยังฤดูใบไม้ผลิและปรับแต่งสิ่งต่าง ๆ ที่นี่และที่นั่น
Chiron

3

สำหรับ Python นั้นBlueBream (หรือ Zope 3) จะให้สิ่งที่ Spring ทำและอื่น ๆ

ความซับซ้อนและพลังงานมาในราคามีหลายครั้งที่คุณไม่ต้องการจ่าย

โปรแกรมเมอร์หลายคนพบว่า BlueBream น่ากลัวและมีวิธีมากเกินไปสำหรับสิ่งที่พวกเขาต้องทำพวกเขาชอบชุดเครื่องมือขนาดเล็กที่บางกว่า โซลูชันอื่น ๆ ส่วนใหญ่ (Django และอื่น ๆ ) ตั้งอยู่บนพื้นฐานของกระบวนทัศน์ MVC

คุณสามารถดูกองกำลังที่คล้ายกันในการดำเนินการในพื้นที่ Java เป็นอย่างดีกับสิ่งที่ต้องการความสวยงามPlayframework

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.