2012-08-24 41 views
8

Đã có một vài bài đăng trên SO thảo luận xem kiến ​​trúc này có phải là ý tưởng hay hay không. Vì nhiều lý do trong công ty của chúng tôi bao gồm tài năng lập trình hiện có, chúng tôi đã quyết định sử dụng Java cho chương trình phụ trợ và PHP cho giao diện người dùng. Mục tiêu của chúng tôi là một cái gì đó giống như ...Sử dụng Java làm phụ trợ và PHP làm giao diện người dùng

Java - Mô hình/Bộ xử lý

PHP - Lượt xem

Chúng tôi đang làm việc để xây dựng một nguyên mẫu của sự tương tác giữa Glassfish và Apache. Một điều chúng tôi vẫn đang làm việc là khi người dùng truy cập http://domain.com/login.html và họ đăng nhập, thông tin đăng nhập đó sẽ được gửi tới bộ điều khiển Glassfish tồn tại ở đâu đó như /login.java. Chúng tôi có thể làm điều đó không có vấn đề, rắc rối là nhận được xem được trả lại tại URL đó.

Có ai làm điều này với PHP hay bất kỳ công nghệ nào khác không?

+0

Giống như bài hát cũ [Lovin 'Spoonful] (http://www.metrolyrics.com/did-you-ever-have-to-make-up-your-mind-lyrics-lovin-spoonful.html) : "bạn (nên) nhặt một cái và để người kia lại!" ;) – paulsm4

Trả lời

2

Tôi rất tiếc khi làm điều này nhưng có vẻ như mọi thứ trở nên đơn giản hơn rất nhiều chỉ với một trong những ngôn ngữ này. Nếu bạn đang sử dụng PHP để thêm nhiều logic hơn vào chế độ xem của mình, bạn có thể xem xét số Velocity. Nó cho phép bạn truy cập và tạo các biến, lặp qua danh sách, sử dụng điều kiện, xác định macro, thực hiện cuộc gọi phương thức, vv Điều này có vẻ như nó có thể làm cho mọi thứ sạch hơn. Tuy nhiên, nó thường là một ý tưởng tốt để cố gắng giữ càng nhiều logic trong các mẫu của bạn càng tốt.

Nếu bạn muốn sử dụng PHP vì đó là những gì được yêu cầu, tôi khuyên bạn nên xem xét sử dụng các dịch vụ web để giao tiếp. Hãy xem thư viện của Googles GSON. Nó thực sự là một công cụ tuyệt vời (ở phía java) để ánh xạ các đối tượng JSON cho mô hình của bạn (và ngược lại).

Trên giao diện người dùng, bạn cũng có thể xem giá trị Backbone. Đây là một công cụ giúp bạn dễ dàng tạo mô hình Đối tượng và ràng buộc các sự kiện với chúng, hoặc thêm chúng trực tiếp vào các trường, v.v.

+0

Không sử dụng Vận tốc. Sử dụng một cái gì đó như JSF, hoặc thậm chí JSP. Vận tốc là một ngôn ngữ khuôn mẫu rất cũ và nó cũng có rất nhiều nhược điểm. JSF có một chút hỗ trợ đằng sau nó và có thể làm được rất nhiều cho bạn. – seangates

+0

Thật sao? Những hạn chế nào có vận tốc so với JSTL thẳng? Vận tốc không thực sự yêu cầu bạn sửa đổi/viết mã của bạn theo bất kỳ cách cụ thể nào. Bạn chỉ cần vượt qua nó bất cứ điều gì đối tượng bạn muốn và thats nó. Bạn có thể gọi các phương thức, thiết lập các biến, khai báo các biến mới, vv từ mẫu teh. Không phải là bạn nên đặt tất cả các logic này trong một mẫu. Nhưng Velocity cho phép bạn. –

+0

Đánh giá là thiếu sự hỗ trợ của nhà phát triển, chủ yếu là. Tôi đã hỏi nhiều nhà phát triển Java mà họ đã sử dụng và chỉ có một (trong 3 năm qua) đã nghe về nó. – seangates

4

Bạn đã cân nhắc thiết lập máy chủ lưu trữ xà phòng/phần còn lại trong java và có PHP nói chuyện với điều đó chưa? Tôi tưởng tượng rằng sẽ đơn giản hơn nhiều so với những gì bạn đang cố gắng đạt được.

+0

Chúng tôi đã làm điều này ở công việc trước đây của tôi và nó hoạt động tốt. Xà phòng là một nỗi đau, nhưng cũng được hỗ trợ. Nếu bạn muốn mạo hiểm, bạn có thể thử thực hiện jsonrpc. – Jody

+0

- đó sẽ là một trong những IPC, hoặc thực hiện giao tiếp socket. –

+2

Chúng tôi đã sử dụng Java Rest API (JSON) làm phụ trợ và PHP làm giao diện người dùng. Đó là một trải nghiệm tuyệt vời và chúng tôi cũng có thể sử dụng cùng một chương trình phụ trợ cho nền tảng di động. – Gonzalo

1

Tôi đã có kinh nghiệm đầu tiên tại hai công ty sử dụng dịch vụ Java lớp và PHP Khách hàng ngăn xếp công nghệ lớp, mặc dù nó không được sử dụng độc quyền. Để phân tách rõ ràng các lớp, API REST REST được xác định rõ ràng đã được xây dựng để mỗi lớp có một hợp đồng mà nó có thể mã hóa.

lớp Java sử dụng SpringMVC ở giữa lớp kiên trì để tạo ra quan điểm JSON với xác định rõ tuyến (ví dụ: cấu trúc URL) để cho các lớp PHP để GET/PUT/POST/DELETE nguồn lực.

Về vấn đề đặc biệt, thực tế có hai dịch vụ Java, một dịch vụ cụ thể cho đăng nhập/đăng xuất và một cho chương trình phụ trợ thông thường.

Khi truy cập /login mà tôi giả định là tệp .php. Việc gửi thông tin đăng nhập <form> vào dịch vụ "Đăng nhập" dẫn đến cookie phiên được thêm nhưng cũng là cookie "ID người dùng" được mã hóa. Cookie được mã hóa sau đó có thể được sử dụng để bảo vệ quyền truy cập vào lớp Dịch vụ Java cho sản phẩm. Mỗi yêu cầu REST từ PHP đến Java sẽ có quyền truy cập vào cookie và lớp Java sau đó có thể giải mã "ID người dùng" và trả lời cuộc gọi REST của PHP nếu nó hợp lệ.Lớp Java sau đó sẽ có quyền truy cập vào ID người dùng thực để trả về dữ liệu người dùng cụ thể từ cửa hàng liên tục.

+0

Trong khi hầu hết các dịch vụ đã được yên tĩnh, có vẻ như đăng nhập không, và bổ sung, đăng nhập phụ thuộc vào lối vào PHP, vì vậy tôi nghĩ rằng bạn bị mất một số * tách mối quan tâm * có một chút. – WhyNotHugo

+0

Nếu bạn có hai lớp không đồng nhất, bạn nên sử dụng dịch vụ web. Nếu bạn đang sử dụng các dịch vụ web, bạn nên sử dụng REST/JSON (thay vì WS/SOAP). ... NHƯNG ... nó sẽ là * TỐT NHẤT * nếu bạn không cần thiết phải chồng lên nhiều lớp khác nhau trong địa điểm * FIRST *! IMHO ... – paulsm4

+0

Đăng nhập không phụ thuộc vào PHP. Nó là một dịch vụ Java bên ngoài chỉ quan tâm đến việc đăng nhập. Làm thế nào một sản phẩm được gọi là nó tùy thuộc vào họ, có thể là từ PHP hay Java. Sau khi đăng nhập thành công đã đạt được, sau đó nó đã được tối đa mỗi _product_ để bảo vệ tài nguyên của nó bằng cách sử dụng cookie. Lưu ý đây không phải là ** kiến ​​trúc ** của tôi, tôi chỉ chi tiết một số thông tin về chồng công nghệ mà tôi đã làm việc cùng! – andyb

Các vấn đề liên quan