Tôi làm việc theo cách này (Struts2 + Hibernate):
My Struts Action chỉ chịu trách nhiệm hiển thị thông tin trên trình duyệt web. Không suy nghĩ.
Người dùng -> Hành động -> Dịch vụ -> Kho lưu trữ -> Truy cập dữ liệu
Hoặc là:
Tôi muốn xem -> Cách xem -> Phải làm gì -> Cách nhận -> Nơi nhận
Vì vậy, trong lớp đầu tiên (khung nhìn) tôi có một cái gì đó như:
public String execute () {
try {
CourseService cs = new CourseService();
Course course = cs.getCourse(idCourse);
} catch (NotFoundException e) {
setMessageText("Course not found.");
} catch (Exception e) {
}
return "ok";
}
Như bạn thấy, "quan điểm" của tôi không nghĩ gì. Đó là yêu cầu một dịch vụ (để quản lý các khóa học) một khóa học cụ thể. Dịch vụ đó có thể làm nhiều thứ hơn nữa, như báo cáo, seraches, v.v. Kết quả luôn là một danh sách hoặc một đối tượng cụ thể (như ví dụ). Các dịch vụ là máy thật, áp dụng các quy tắc và truy cập Kho lưu trữ (để quản lý dữ liệu).
Vì vậy, nếu tôi đặt Dịch vụ, Kho lưu trữ và DAOS của mình vào các thư viện khác nhau, tôi có thể sử dụng nó ngay cả trong chương trình dựa trên văn bản hoặc hệ thống máy tính để bàn dựa trên Window mà không thay đổi gì.
Dịch vụ biết phải làm gì, nhưng không biết cách hiển thị. Khung nhìn biết cách hiển thị, nhưng không biết phải làm gì. Tương tự với Dịch vụ / Kho lưu trữ: Dịch vụ gửi và yêu cầu dữ liệu, nhưng không biết dữ liệu ở đâu và làm thế nào để lấy nó. Kho lưu trữ "tạo thành" dữ liệu thô cho các đối tượng để dịch vụ có thể làm việc với.
Nhưng Kho lưu trữ không biết gì về cơ sở dữ liệu. Loại cơ sở dữ liệu (MySQL, PostgreSQL, ...) liên quan đến DAO.
Bạn có thể thay đổi DAO nếu bạn muốn thay đổi cơ sở dữ liệu và nó không được ảnh hưởng đến các lớp trên. Bạn có thể thay đổi Kho lưu trữ nếu bạn muốn cập nhật quản lý dữ liệu của mình, nhưng điều này không được ảnh hưởng đến DAO và các lớp trên. Bạn có thể thay đổi Dịch vụ nếu bạn muốn thay đổi logic của mình, nhưng điều này không được gây rối với các lớp bên trên cũng như bên dưới.
Và bạn có thể thay đổi bất cứ điều gì trong chế độ xem, ngay cả công nghệ (web, máy tính để bàn, văn bản) nhưng điều này không được ngụ ý trong bất cứ điều gì bên dưới.
Logic kinh doanh là Dịch vụ. Nhưng làm thế nào để tương tác với điều này là để xem. Nút nào để hiển thị bây giờ? Người dùng có thể thấy liên kết này? Hãy nghĩ rằng hệ thống của bạn là một chương trình dựa trên bảng điều khiển: bạn phải từ chối nếu người dùng sai chọn #> myprogram -CourseService -option=getCourse -idCourse=234
hoặc dừng anh ta để nhấn các phím để viết lệnh này?
Nói chuyện trong các hệ thống dựa trên web (Struts + JavaEE) Tôi có gói điều khiển GUI riêng. Trong chế độ xem Hành động tôi cung cấp cho người dùng đã đăng nhập và lớp cung cấp cho tôi các nút (hoặc bất kỳ yếu tố giao diện nào tôi muốn).
<div id="userDetailSubBox">
<c:forEach var="actionButton" items="${actionButtons}" varStatus="id">
${actionButton.buttonCode}
</c:forEach>
</div>
Và
private List<ActionButton> actionButtons;
Hãy nhớ để điều này ra khỏi các dịch vụ. Đây là thứ XEM. Giữ nó trong các hành động Struts. Bất kỳ tương tác giao diện nào cũng phải tách biệt hoàn toàn với mã doanh nghiệp thực, vì vậy nếu bạn chuyển hệ thống của mình, sẽ dễ dàng cắt giảm những gì bạn sẽ không cần nữa.