2011-01-15 38 views
12

Tôi là một nhà phát triển Java SE nhưng tôi có nền web phong phú (PHP, Perl/CGI và vv) và bây giờ tôi đang bắt đầu dự án mới. Nó sẽ có giao diện web, logic kinh doanh spaghetti, cơ sở dữ liệu quan hệ như lưu trữ và kết nối với các dịch vụ khác. Tôi làm điều đó từ đầu.Java EE 6 và các lựa chọn thay thế

Đồng nghiệp của tôi đã bảo tôi sử dụng bảo mật mùa xuân, mùa xuân và thanh chống. Tôi xem xét ngắn gọn về đặc tả Java EE 6 và thấy rằng nó bao gồm hầu như tất cả các khía cạnh của ứng dụng doanh nghiệp. Tôi hỏi các đồng nghiệp của tôi tại sao họ cần mùa xuân và thanh chống, nhưng có vẻ như họ sử dụng công nghệ đơn giản chỉ vì họ quen thuộc với họ và không quen thuộc với ngăn xếp Java EE 6 cổ điển.

Vì vậy, câu hỏi của tôi là: điều gì xấu về Java EE 6? Tại sao tôi cần mùa xuân nếu có tra cứu JNDI? Sẽ mất một hoặc hai ngày để tạo InitialContext giả cho các bài kiểm tra đơn vị. Và đó là tất cả: Tôi đứng ngoài các công cụ bên ngoài như mùa xuân. Tại sao tôi cần bảo mật mùa xuân nếu có bảo mật được xây dựng trong Đặc tả Servlets? Tôi có thể ánh xạ bất kỳ yêu cầu nào tới bất kỳ servlet nào bằng cách sử dụng web.xml, không cần struts.xml. Tôi có thể sử dụng bộ lọc servlet thay vì các thanh chống chặn. Có RMI, vì vậy tôi không cần mùa xuân từ xa. Và như vậy ..

Tại sao tôi phải bận tâm về bản thân với tất cả những thứ lạ mắt nếu có Java EE 6?

Tôi thực sự muốn tìm tình huống khi Java EE 6 không đủ. Bạn có gì không?

Cảm ơn!

+3

Có sự khác biệt rất lớn giữa J2EE cổ điển từ đó và Java EE 6 hiện đại kể từ bây giờ. Bạn đang nói về cái gì? Sau đó, Spring và Struts là những add-on tuyệt vời trên đầu trang của J2EE. Nhưng bây giờ, Java EE 6 cung cấp gần như giống nhau đã ra khỏi hộp. Đồng nghiệp của bạn có thể vẫn còn treo cổ trong thời cổ đại. – BalusC

+0

Xin lỗi) Java EE 6. Tôi sẽ không sử dụng Java 1.2))) –

+0

Vui lòng sửa lại/đặt lại câu hỏi của bạn. Bạn cũng có thể xem xét lại nó :) Tương tự như câu hỏi [ở đây] (http://stackoverflow.com/questions/2084169/choosing-a-java-web-framework-now) và [ở đây] (http://stackoverflow.com/questions/1960280/what-to-learn-for-making-java-web-ứng dụng-trong-java-ee-6). – BalusC

Trả lời

1

Mùa xuân không cần thiết đối với Java EE. Spring chỉ làm cho các thành phần Java EE phức tạp trở nên dễ sử dụng.

+0

Tôi biết điều đó) Nhưng tôi có thể sử dụng JNDI thay vì DI mùa xuân. Vì vậy, tại sao tôi cần mùa xuân? –

+2

JNDI không thể so sánh với Spring DI. CDI là. – BalusC

0

Spring một bộ điều khiển kiểu xem làm cho Java EE sạch hơn và được tổ chức hơn. Đó là cấu trúc chính xác hơn để tách các mô hình, khung nhìn và bộ điều khiển của bạn.

Tôi đồng ý với bạn. Nếu nó là một trang web đơn giản thì tôi nghĩ bạn có thể làm mọi thứ chỉ với Java EE. Tuy nhiên, hãy tưởng tượng có nhiều mã xử lý đầu vào biểu mẫu và nhiều mô hình. Mỗi bộ điều khiển có thể có một cái nhìn. Bạn có thể tạo một servlet và sau đó chuyển tiếp đến trang jsp chính xác, hoặc bạn có thể sử dụng spring bởi vì nó đã làm tất cả điều này.

Quyết định là số tiền bạn cần sử dụng vào mùa xuân. Một khung tốt là một khung cho phép bạn chọn và chọn phần nào để sử dụng. Tôi nghĩ rằng mùa xuân này cũng tốt bởi vì bạn chỉ có thể sử dụng mô hình mvc hoặc đi xa hơn và làm nhiều hơn với nó.

Điều cuối cùng, mùa xuân có tiêm phụ thuộc giúp cấu hình dễ dàng hơn nhiều.

+0

Cảm ơn. Tôi có thể thực hiện mẫu MVC của tôi: Mỗi servlet là một bộ điều khiển và trang JSP chỉ là một khung nhìn. Tôi sẽ không sử dụng bất kỳ logic bên trong JSP (vì nó là không thể kiểm tra). Tôi có thể sử dụng JNDI (dịch vụ tra cứu) với ra cho mùa xuân. Nó là tốt như tiêm phụ thuộc, phải không? –

+0

Tôi nghĩ bạn đang cố gắng phát minh lại bánh xe. Điều này thật thú vị nhưng tại sao bạn lại làm điều đó khi Spring đã được hàng triệu người dùng thử nghiệm. Nếu bạn nói một kinh nghiệm học tập thì tôi hoàn toàn với bạn. Nếu không, bạn đang tắt chỉ sử dụng lại nó libs đã được tạo ra và thử nghiệm. –

+0

Trong một thiết kế MVC tốt, bạn sẽ chỉ có một servlet. – BalusC

13

Tại sao mọi người sử dụng Spring và tại sao mọi người lại rất phổ biến đòi hỏi một chút lịch sử.

Trước đây, Spring đơn giản hơn các ứng dụng Java EE. Tôi tham khảo thông số EJB2.x. Tôi hiểu rằng có một cuộc nổi loạn chống lại bản chất phức tạp của thông số đó. Các nhà phát triển muốn có kiến ​​trúc đơn giản hơn và Spring cung cấp cho họ bằng cách cho phép họ viết POJO (Plain Old Java Objects) thay vì các lớp phải triển khai các giao diện cụ thể để có được chức năng mong muốn.

Mùa xuân cũng làm cho 2 nguyên tắc trở nên phổ biến hơn: Inversion of Control (IoC) và Dependency Injection. Kết hợp, hai nguyên tắc này cung cấp một cách khác nhau để kết nối các thành phần khác nhau của một ứng dụng và đưa các thành phần đó vào ứng dụng khi nó chạy.Điều đó, kết hợp với ý tưởng chỉ viết POJO rất hấp dẫn đối với nhiều người, bởi vì mã đơn giản hơn và dễ dàng hơn để kết nối tất cả các thành phần của bạn.

Thông số EJB3 mới hơn vô hiệu hóa một số thứ mà Spring cung cấp, nhưng Spring không chỉ là một container IoC. Nó cung cấp các mẫu tuyệt vời để truy cập JDBC vào cơ sở dữ liệu, nhiều cách đơn giản để xử lý các giao dịch, các tiện ích thử nghiệm, một ngăn xếp MVC, v.v. Nó đã được phổ biến và vẫn còn phổ biến. Một trò đùa Tôi đã nghe nói là

"EJB3, câu trả lời cho những câu hỏi không ai hỏi ..."

EJB3 là một sự lựa chọn tốt. Mùa xuân là một lựa chọn tốt. Grails cũng là một lựa chọn tốt (sử dụng Spring, Hibernate dưới bìa).

+1

Tôi là một fan hâm mộ lớn của Grails! Tuyệt vời như thế nào nhanh chóng, bạn có thể nhận được và chạy. –

+0

@amir, tôi đồng ý hoàn toàn. – hvgotcodes

+1

và tôi thì không. Grails là tốt đẹp, nhưng như của phiên bản chúng tôi đang sử dụng - 1.3.3 - vẫn khá không ổn định. Chúng tôi đã phải sửa một vài lỗi chính mình (sau khi báo cáo cho họ, tất nhiên). Và chúng không phải là một số lỗi ở góc. – Bozho

1

"Vì vậy, tại sao tôi cần mùa xuân?"

Ilya! Cuối cùng bạn đã thuyết phục tôi (và hy vọng bản thân) rằng bạn không cần mùa xuân. Trên thực tế không có gì đặc biệt tốt trong tất cả các đống này ... trừ khi bạn đã quen với nó. Họ viết một cuốn sách về công nghệ web, sau đó thêm phần còn lại của khoa học máy tính vào nó và gọi đó là RESTfull.

"Tuy nhiên, hãy tưởng tượng có nhiều mã xử lý đầu vào biểu mẫu và nhiều mô hình. Mỗi bộ điều khiển có thể có chế độ xem".

Amir! - xem xét rất tốt. Sự khác biệt thực sự giữa các khung công tác web mà tôi biết là trong định nghĩa của thành phần là gì. Struts có ba kiểu thành phần - các thành phần View, Controler và Model. Thoạt nhìn có vẻ tốt (tốt hơn một số người khác). Nhưng bạn có thể xây dựng những thành phần nào? - Một lần xem trang, một Trình điều khiển trang và một Mô hình trang. Đức Chúa Trời biết chi phí của những thứ ràng buộc từ ba hàng thành phần này - có lẽ là một cấu hình khổng lồ nếu có thể.

Giải pháp thực tế là (như bạn đã nêu trong phần được đề cập ở trên) là một khái niệm về các thành phần mà mỗi thành phần có quan điểm, bộ điều khiển và mô hình của nó. Chỉ có một khuôn khổ cho đến nay - HybridJava. Một khối xây dựng trang web trong mùa xuân là gì?

1

Có vẻ như bạn cần POC khả năng cụ thể với Spring và sau đó với Java EE 6 để bạn có thể so sánh cả hai giống như với một nguyên mẫu thực tế làm việc thực tế.

Những lý do tôi sử dụng mùa xuân tuy nhiên, là:

  • khả năng trừu tượng ứng dụng của tôi ra khỏi máy chủ ứng dụng. Do đó, tôi có thể chạy trên bất kỳ máy chủ ứng dụng nào hoặc bên ngoài AS để kiểm tra đơn vị
  • nhiều mã tấm nồi hơi mà tôi sẽ phải viết, để cải thiện thiết kế của mình đã có sẵn
  • IOC/DI - đối tượng nhu cầu phụ thuộc không biết về cách để có được chúng - tất cả những gì nó biết là giao diện nào nó yêu cầu. Một số bên thứ ba cung cấp cho họ. Có, bạn có thể cuộn phiên bản của riêng bạn của bên thứ ba này trong Java EE 6 nhưng nó đã có sẵn trong Spring.
  • Giao dịch được quản lý bằng Bean - Spring cung cấp tất cả các công cụ bạn cần để có toàn quyền kiểm soát mức độ thấp trên các giao dịch của bạn. Tôi sẽ luôn đề nghị sử dụng BMT vì nó mang lại cho bạn sự linh hoạt mà bạn có thể cần.
Các vấn đề liên quan