ฉันทำงานด้วยวิธีนี้ (Struts2 + Hibernate):
My Struts Actions รับผิดชอบเฉพาะการแสดงข้อมูลบนเว็บเบราว์เซอร์เท่านั้น ไม่คิดอะไร
ผู้ใช้ -> การกระทำ -> บริการ -> พื้นที่เก็บข้อมูล -> การเข้าถึงข้อมูล
หรือ:
ฉันต้องการดู -> วิธีดู -> สิ่งที่ต้องทำ -> วิธีรับ -> หาได้ที่ไหน
ดังนั้นในชั้นแรก (มุมมอง) ฉันมีสิ่งที่ชอบ:
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";
}
อย่างที่คุณเห็น "มุมมอง" ของฉันไม่คิด กำลังขอบริการ (สำหรับจัดการหลักสูตร) หลักสูตรเฉพาะ บริการดังกล่าวสามารถทำสิ่งต่างๆได้มากมายเช่นรายงาน seraches และอื่น ๆ ผลลัพธ์มักเป็นรายการหรือวัตถุเฉพาะ (เช่นตัวอย่าง) บริการเป็นเครื่องจริงใช้กฎและเข้าถึง Repository (เพื่อจัดการข้อมูล)
ดังนั้นถ้าฉันใส่ Services, Repositories และ DAOS ในไลบรารีที่แตกต่างกันฉันสามารถใช้มันได้แม้ในโปรแกรมแบบข้อความหรือระบบเดสก์ท็อปที่ใช้ Window โดยไม่ต้องเปลี่ยนอะไรเลย
บริการรู้ว่าต้องทำอะไร แต่ไม่รู้จะแสดงอย่างไร มุมมองรู้วิธีที่จะแสดง แต่ไม่รู้ว่าจะทำอย่างไร เช่นเดียวกับ Service / Repository: บริการส่งและร้องขอข้อมูล แต่ไม่ทราบว่าข้อมูลอยู่ที่ใดและใช้อย่างไร พื้นที่เก็บข้อมูล "สร้าง" ข้อมูลดิบเพื่อสร้างออบเจ็กต์เพื่อให้บริการสามารถทำงานได้
แต่พื้นที่เก็บข้อมูลไม่ทราบอะไรเกี่ยวกับฐานข้อมูล ชนิดฐานข้อมูล (MySQL, PostgreSQL, ... ) เกี่ยวข้องกับ DAO
คุณสามารถเปลี่ยน DAO ได้หากคุณต้องการเปลี่ยนฐานข้อมูลและจะต้องไม่ส่งผลต่อเลเยอร์ด้านบน คุณสามารถเปลี่ยน Repository ได้หากคุณต้องการอัพเดทการจัดการข้อมูล แต่สิ่งนี้จะต้องไม่ส่งผลกระทบต่อ DAO และเลเยอร์ด้านบน คุณสามารถเปลี่ยนบริการได้หากคุณต้องการเปลี่ยนตรรกะ แต่สิ่งนี้ต้องไม่ยุ่งกับเลเยอร์ด้านบนหรือด้านล่าง
และคุณสามารถเปลี่ยนแปลงอะไรก็ได้ในมุมมองแม้กระทั่งเทคโนโลยี (เว็บเดสก์ท็อปข้อความ) แต่สิ่งนี้ต้องไม่บอกเป็นนัยในการสัมผัสสิ่งใดด้านล่าง
ตรรกะทางธุรกิจคือบริการ แต่วิธีการโต้ตอบกับสิ่งนี้คือการดู ปุ่มใดที่จะแสดงในตอนนี้ ผู้ใช้สามารถเห็นลิงก์นี้ได้หรือไม่? คิดว่าระบบของคุณเป็นโปรแกรมที่ใช้คอนโซล: คุณต้องปฏิเสธหากผู้ใช้เลือกผิด#> myprogram -CourseService -option=getCourse -idCourse=234
หรือหยุดเขาให้กดปุ่มเพื่อเขียนคำสั่งนี้?
การพูดคุยในระบบบนเว็บ (Struts + JavaEE) ฉันมีแพ็คเกจคอนโทรลเลอร์ GUI แยกต่างหาก ในมุมมองการกระทำฉันให้ผู้ใช้ที่เข้าสู่ระบบและชั้นให้ปุ่มแก่ฉัน (หรือองค์ประกอบอินเทอร์เฟซที่ฉันต้องการ)
<div id="userDetailSubBox">
<c:forEach var="actionButton" items="${actionButtons}" varStatus="id">
${actionButton.buttonCode}
</c:forEach>
</div>
และ
private List<ActionButton> actionButtons;
อย่าลืมเก็บสิ่งนี้จากบริการ นี่คือสิ่งที่ดู เก็บไว้ใน Struts Actions การโต้ตอบของส่วนต่อประสานใด ๆ จะต้องแยกจากรหัสธุรกิจจริงอย่างสมบูรณ์ดังนั้นหากคุณพอร์ตระบบของคุณจะง่ายต่อการตัดสิ่งที่คุณไม่ต้องการอีกต่อไป