Làm thế nào để Ruby, Python, PHP quản lý mà không có Spring?


13

Tôi viết các ứng dụng Java doanh nghiệp và dịch vụ web tại nơi làm việc ( Spring , Hibernate, Maven, REST EAS) và PHP (CakePHP) và Python (Django) cho các dự án phụ của tôi.

Mặc dù tôi thấy giá trị mà Inversion of Control, Lập trình hướng theo khía cạnh, v.v. mà Spring mang lại, tôi không chắc các ứng dụng web khổng lồ không có trong ngăn xếp Java quản lý mà không có khung như Spring.

Vì vậy, các nhà phát triển chỉ cần "đưa ra" các thành phần được liên kết chặt chẽ và những bất bình khác mà Spring loại bỏ hoặc tôi đang thiếu thứ gì đó?

Đối với những người không quen thuộc với Spring, các tính năng chúng tôi sử dụng nhiều nhất là:

  • Inversion of Control container: cấu hình các thành phần ứng dụng và quản lý vòng đời của các đối tượng Java,

  • Lập trình hướng theo khía cạnh: cho phép thực hiện các thói quen xuyên suốt,

  • Quản lý giao dịch: thống nhất một số API quản lý giao dịch và điều phối các giao dịch cho các đối tượng Java.


3
Có lẽ bạn sẽ nhận được câu trả lời tốt hơn nếu bạn ít nhất giải thích ngắn gọn những gì Spring làm.
Per Johansson

4
Chỉ vì Pythonistas không sử dụng buzzwords của Java, không có nghĩa là các mẫu thiết kế khác nhau đáng kể. Vâng, có lẽ ngoại trừ mất ít sưng lên.
vartec

6
Ngay cả với định nghĩa của bạn, tôi vẫn hoàn toàn không biết Spring làm gì.
Sevenseacat

Và đó là một trong những bất bình lớn nhất mà tôi có với Spring. Trước khi tôi bắt đầu thực hiện phát triển doanh nghiệp Java, tôi không có nhu cầu về nó.
ndasxy

Tôi là một nhà phát triển Java, nhưng tôi thực sự, thực sự không thích mùa xuân vì sự phức tạp của nó.
Mahmoud Hossam

Câu trả lời:


15

Các nền tảng khác không cần Spring vì những ngôn ngữ đó không ở đâu hạn chế như Java.

Tôi sẽ đưa ra một ví dụ với node.js

  • Inversion of Control container: cấu hình các thành phần ứng dụng và quản lý vòng đời của các đối tượng Java

cấu hình máy chủ được thực hiện bằng mã hoặc tệp cấu hình json đơn giản. Đối với các hệ thống IoC chung, chúng tôi đơn giản là không cần chúng, Javascript là một ngôn ngữ biểu cảm và năng động. Có bạn cần IoC nhưng điều đó đơn giản, truyền phụ thuộc vào các đối tượng của bạn dưới dạng tham số hàm.

  • Lập trình hướng theo khía cạnh: cho phép thực hiện các thói quen xuyên suốt

Tôi chỉ đơn giản là không nghĩ rằng chúng ta cần một cái gì đó như thế này, chúng ta viết mã mô-đun và nó chỉ hoạt động.

  • Quản lý giao dịch: thống nhất một số API quản lý giao dịch và điều phối các giao dịch cho các đối tượng Java

noQuery là cực kỳ phổ biến. Không có khái niệm về giao dịch.

Cá nhân tôi sẽ nói rằng các hệ thống như vậy là cồng kềnh và được thiết kế quá mức và bạn không cần chúng. Các ngôn ngữ và nền tảng khác chỉ đơn giản là nạc và nhanh nhẹn.


8
Bạn cũng đã bỏ lỡ việc sử dụng gõ vịt và vá khỉ đơn giản như thế nào để tiêm thứ vào Python và Ruby.
Daniel Staple

3
Đúng vậy, lý do các ngôn ngữ khác không có Spring là vì ... chúng không cần Spring thực sự hữu ích ;-)
Dean Harding

7
Nói rằng bạn không cần IoC, AOP hoặc quản lý giao dịch là thiển cận và sai lầm. Nhiều ngôn ngữ cấp cao cho phép bạn dễ dàng viết mã bằng các nguyên tắc thiết kế AOP và / hoặc IoC. Chỉ là hầu hết các ngôn ngữ cấp cao không cần một lớp hoặc thùng chứa rõ ràng để cung cấp các khả năng đó.
dietbuddha

2
@Raynos Đối với các hệ thống IoC chung, chúng tôi đơn giản là không cần chúng, javascript là một ngôn ngữ biểu cảm và năng động. Đây là thông tin sai lệch ở một mức độ nào đó. Bạn không nghĩ rằng bạn cần chúng. coffeescripter.com/2010/08/ Kẻ
Aaron McIver

4
@AaronMcIver bạn đã đúng, chúng tôi cần IoC.
Raynos

15

Trong hầu hết các ngôn ngữ cấp cao, việc viết bằng các nguyên tắc thiết kế AOP và / hoặc IoC là chuyện nhỏ.

Tất cả những gì bạn cần để thực hiện AOP là dành cho ngôn ngữ để hỗ trợ các chức năng bậc cao hơn. Ví dụ:

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)

Bạn cũng có thể tuân theo các nguyên tắc chung về IoC hoặc Dependency Injection khi lập trình. Bạn không cần một container cụ thể để cung cấp khả năng đó. Bạn chỉ có thể viết mã theo cách đó.

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

9

Vâng Python cũng thích Spring Spring Spring .

Khung công tác mùa xuân được tạo ra để dễ dàng phát triển Java và điều gì đúng với phát triển Java là không cần thiết cho sự phát triển của Ruby hoặc Python.

Ruby chẳng hạn có khả năng Metaprogramming, có nghĩa là bạn có thể tạo AOP của riêng mình.

Trớ trêu thay, các khung web Java mới đang cố gắng bắt các khung Django và Rails (ví dụ, xem các khung Grails và Play!).


4
Grails không phải là khung Java. Nó là một khung Groovy. Groovy biên dịch thành mã byte Java, nhưng nó không phải là Java.
kevin cline

@kevincline Vâng tôi biết nhưng vào cuối ngày, nó là một khung web JVM (được xây dựng trên Spring và Hibernate).
Chiron

1
Vâng, điều tuyệt vời về Grails là bạn không cần phải biết đến Spring.
kevin cline

1
@kevincline Không nhất thiết phải đúng. Đôi khi bạn phải quay trở lại Spring và điều chỉnh mọi thứ ở đây và đó
Chiron

3

Đối với Python, BlueBream (còn gọi là Zope 3) cung cấp những gì Spring làm và hơn thế nữa.

Sự phức tạp và sức mạnh phải trả giá, có những lúc bạn không muốn trả nó.

Nhiều lập trình viên thấy BlueBream nản chí và quá nhiều cho những gì họ cần làm, họ thích những bộ công cụ nhỏ hơn, nhỏ hơn. Hầu hết các giải pháp khác (Django, v.v.) đều dựa trên mô hình MVC.

Bạn cũng có thể thấy một lực tương tự đang hoạt động trong không gian Java, với những thứ như Playframework tuyệt đẹp .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.