ฉันเริ่มโครงการกลุ่มโรงเรียนใน Java โดยใช้ Swing มันเป็น GUI ที่เรียบง่ายบนแอปเดสก์ท็อปฐานข้อมูล
อาจารย์ให้รหัสจากโครงการปีที่แล้วเพื่อให้เราเห็นว่าเขาทำสิ่งต่าง ๆ อย่างไร ความประทับใจครั้งแรกของฉันคือรหัสมีความซับซ้อนมากกว่าที่ควรจะเป็น แต่ฉันคิดว่าโปรแกรมเมอร์มักจะคิดอย่างนี้เมื่อดูรหัสพวกเขาไม่ได้แค่เขียน
ฉันหวังว่าจะหาเหตุผลว่าทำไมระบบของเขาถึงดีหรือไม่ดี (ฉันถามอาจารย์และเขาบอกว่าฉันจะเห็นทีหลังว่าทำไมมันถึงดีกว่าซึ่งไม่พอใจฉัน)
โดยทั่วไปเพื่อหลีกเลี่ยงการมีเพศสัมพันธ์ระหว่างวัตถุแบบจำลองที่มีอยู่ของเขา (ตรรกะทางธุรกิจ) และมุมมองทุกอย่างจะทำกับสตริง วัตถุที่ยังคงอยู่ที่เก็บไว้ในฐานข้อมูลนั้นคือแฮชของสตริงและโมเดลและมุมมอง "สมัครสมาชิก" ซึ่งกันและกันจัดเตรียมคีย์สตริงสำหรับ "เหตุการณ์" ที่พวกเขาสมัครสมาชิก
เมื่อมีการทริกเกอร์เหตุการณ์มุมมองหรือรูปแบบจะส่งสตริงไปยังสมาชิกทั้งหมดของผู้ตัดสินใจว่าจะทำอย่างไรกับเหตุการณ์นั้น ตัวอย่างเช่นในหนึ่งในวิธีการฟังการกระทำมุมมอง (ฉันเชื่อว่านี่เป็นเพียงการตั้งค่า bicycleMakeField บนวัตถุที่คงอยู่):
else if(evt.getSource() == bicycleMakeField)
{
myRegistry.updateSubscribers("BicycleMake", bicycleMakeField.getText());
}
ในที่สุดการโทรนั้นถึงวิธีนี้ในโมเดลรถ:
public void stateChangeRequest(String key, Object value) {
... bunch of else ifs ...
else
if (key.equals("BicycleMake") == true)
{
... do stuff ...
ศาสตราจารย์กล่าวว่าวิธีการทำสิ่งนี้สามารถขยายได้และบำรุงรักษาได้ดีกว่าการมีมุมมองเพียงเรียกวิธีการบนวัตถุทางตรรกะทางธุรกิจ เขาบอกว่าไม่มีการมีเพศสัมพันธ์ระหว่างมุมมองและแบบจำลองเพราะพวกเขาไม่รู้การมีอยู่ของกันและกัน
ฉันคิดว่านี่เป็นข้อต่อที่แย่กว่าเดิมเพราะมุมมองและโมเดลต้องใช้สายอักขระเดียวกันเพื่อใช้งานได้ หากคุณลบมุมมองหรือโมเดลหรือพิมพ์ข้อความในสตริงคุณจะไม่ได้รับข้อผิดพลาดในการรวบรวม นอกจากนี้ยังทำให้รหัสยาวกว่าที่ฉันคิด
ฉันต้องการปรึกษาเรื่องนี้กับเขา แต่เขาใช้ประสบการณ์ในอุตสาหกรรมของเขาเพื่อโต้แย้งการโต้เถียงใด ๆ ที่ฉันนักเรียนมือใหม่อาจทำ มีประโยชน์กับวิธีการของเขาที่ฉันหายไปบาง
เพื่อชี้แจงฉันต้องการเปรียบเทียบวิธีข้างต้นโดยมีมุมมองที่ชัดเจนควบคู่ไปกับโมเดล ตัวอย่างเช่นคุณสามารถส่งผ่านวัตถุรูปแบบยานพาหนะไปยังมุมมองแล้วเปลี่ยน "ทำ" ของยานพาหนะทำสิ่งนี้:
vehicle.make = bicycleMakeField.getText();
วิธีนี้จะลดรหัส 15 บรรทัดที่ปัจจุบันใช้เพื่อตั้งค่ารถยนต์ในที่เดียวเป็นรหัสบรรทัดเดียวที่อ่านได้ (และเนื่องจากการดำเนินการเช่นนี้ทำหลายร้อยครั้งตลอดทั้งแอปฉันคิดว่ามันจะเป็นชัยชนะครั้งใหญ่สำหรับความสามารถในการอ่านและความปลอดภัย)
ปรับปรุง
หัวหน้าทีมของฉันและฉันปรับโครงสร้างเฟรมเวิร์คในแบบที่เราต้องการโดยใช้การพิมพ์แบบสแตติกแจ้งอาจารย์และจบลงด้วยการให้เขาสาธิต เขาใจกว้างพอที่จะให้เราใช้กรอบการทำงานของเราตราบใดที่เราไม่ขอความช่วยเหลือจากเขาและถ้าเราสามารถทำให้ทีมอื่น ๆ ของเราเร่งความเร็ว - ซึ่งดูเหมือนว่าจะยุติธรรมสำหรับเรา