นี่คือข้อกำหนดที่ง่ายขึ้น:
ผู้ใช้สร้าง
Question
ที่มีหลายAnswer
sQuestion
ต้องมีอย่างน้อยหนึ่งAnswer
รายการการชี้แจง: คิด
Question
และAnswer
ในการทดสอบ : มีคำถามหนึ่งข้อ แต่มีหลายคำตอบซึ่งมีเพียงไม่กี่ข้อที่ถูกต้อง ผู้ใช้คือนักแสดงที่กำลังเตรียมการทดสอบนี้ดังนั้นเขาจึงสร้างคำถามและคำตอบ
ฉันพยายามจำลองตัวอย่างง่ายๆนี้เพื่อ 1) จับคู่โมเดลชีวิตจริง 2) แสดงรหัสด้วยดังนั้นเพื่อลดการใช้ผิดและข้อผิดพลาดที่อาจเป็นไปได้และให้คำแนะนำแก่นักพัฒนาเกี่ยวกับวิธีใช้โมเดล
คำถามที่เป็นนิติบุคคลในขณะที่คำตอบคือวัตถุที่คุ้มค่า คำถามถือคำตอบ จนถึงตอนนี้ฉันมีวิธีแก้ปัญหาที่เป็นไปได้เหล่านี้
[A]ภายในโรงงานQuestion
แทนที่จะสร้างAnswer
ด้วยตนเองเราสามารถโทร:
Answer answer = question.createAnswer()
answer.setText("");
...
ที่จะสร้างคำตอบและเพิ่มลงในคำถาม จากนั้นเราสามารถจัดการคำตอบได้โดยตั้งค่าคุณสมบัติ ด้วยวิธีนี้เฉพาะคำถามเท่านั้นที่สามารถสร้างคำตอบได้ นอกจากนี้เราป้องกันไม่ให้มีคำตอบโดยไม่มีคำถาม แต่เราไม่ได้มีการควบคุมมากกว่าการสร้างคำตอบเป็นที่ hardcoded Question
ใน
นอกจากนี้ยังมีปัญหาหนึ่งกับ 'ภาษา' ของรหัสด้านบน ผู้ใช้คือคนที่สร้างคำตอบไม่ใช่คำถาม โดยส่วนตัวแล้วฉันไม่ชอบที่เราจะสร้างวัตถุที่มีคุณค่าและขึ้นอยู่กับนักพัฒนาเพื่อเติมให้เต็มด้วยค่า - เขาจะแน่ใจได้อย่างไรว่าจะต้องเพิ่มอะไรบ้าง
[B]คำถามจากโรงงานใช้ # 2
บางคนบอกว่าเราควรมีวิธีนี้ในQuestion
:
question.addAnswer(String answer, boolean correct, int level....);
เช่นเดียวกับวิธีแก้ไขปัญหาข้างต้นวิธีนี้ใช้ข้อมูลที่จำเป็นสำหรับคำตอบและสร้างรายการที่จะถูกเพิ่มลงในคำถามด้วย
ปัญหาที่นี่คือเราทำซ้ำตัวสร้างของAnswer
ไม่มีเหตุผลที่ดี คำถามจะสร้างคำตอบจริงๆหรือไม่?
[C] ตัวสร้างอ้างอิง
เรามีอิสระที่จะสร้างวัตถุทั้งสองด้วยตัวเราเอง เรายังแสดงถึงความถูกต้องในตัวสร้าง:
Question q = new Question(...);
Answer a = new Answer(q, ...); // answer can't exist without a question
สิ่งนี้ให้คำแนะนำแก่นักพัฒนาเนื่องจากไม่สามารถสร้างคำตอบได้หากไม่มีคำถาม อย่างไรก็ตามเราไม่เห็น 'ภาษา' ที่ระบุว่าคำตอบนั้น 'เพิ่ม' ไว้ในคำถาม ในทางกลับกันเราจำเป็นต้องเห็นมันจริงๆเหรอ?
[D] การพึ่งพา Constructor ใช้เวลา # 2
เราสามารถทำสิ่งที่ตรงกันข้าม:
Answer a1 = new Answer("",...);
Answer a2 = new Answer("",...);
Question q = new Question("", a1, a2);
นี่เป็นสถานการณ์ที่ตรงกันข้ามกับข้างต้น คำตอบสามารถอยู่ได้โดยไม่มีคำถาม (ซึ่งไม่เข้าท่า) แต่คำถามไม่สามารถอยู่ได้โดยไม่มีคำตอบ (ซึ่งทำให้เข้าใจ) นอกจากนี้ 'ภาษา' ที่นี่มีความชัดเจนมากขึ้นในคำถามนั้นจะมีคำตอบ
[E]วิธีทั่วไป
นี่คือสิ่งที่ฉันเรียกว่าวิธีทั่วไปสิ่งแรกที่ ppl มักจะทำคือ:
Question q = new Question("",...);
Answer a = new Answer("",...);
q.addAnswer(a);
ซึ่งเป็นเวอร์ชัน 'หลวม' ของสองคำตอบข้างต้นเนื่องจากทั้งคำตอบและคำถามอาจมีอยู่โดยไม่มีกันและกัน ไม่มีคำใบ้พิเศษที่คุณต้องผูกเข้าด้วยกัน
[F]รวม
หรือฉันควรรวม C, D, E - เพื่อครอบคลุมทุกวิธีที่ความสัมพันธ์สามารถสร้างขึ้นได้ดังนั้นเพื่อช่วยให้นักพัฒนาซอฟต์แวร์ใช้สิ่งที่ดีที่สุดสำหรับพวกเขา
คำถาม
ฉันรู้ว่าผู้คนอาจเลือกหนึ่งในคำตอบข้างต้นตาม 'ลางสังหรณ์' แต่ฉันสงสัยว่าตัวแปรใด ๆ ข้างต้นดีกว่าตัวอื่นด้วยเหตุผลที่ดี นอกจากนี้โปรดอย่าคิดว่าภายในคำถามข้างต้นฉันต้องการที่จะบีบการปฏิบัติที่ดีที่สุดที่สามารถนำไปใช้ในกรณีส่วนใหญ่ - และถ้าคุณเห็นด้วยกรณีการใช้งานส่วนใหญ่ของการสร้างบางหน่วยงานมีความคล้ายคลึงกัน นอกจากนี้ให้เป็นผู้ไม่เชื่อเรื่องพระเจ้าเทคโนโลยีที่นี่เช่น ฉันไม่ต้องการที่จะคิดว่าออมจะถูกใช้หรือไม่ แค่ต้องการโหมดการแสดงออกที่ดี
ภูมิปัญญาเกี่ยวกับเรื่องนี้?
แก้ไข
โปรดละเว้นคุณสมบัติอื่น ๆ ของQuestion
และสิ่งAnswer
เหล่านี้ไม่เกี่ยวข้องกับคำถาม ฉันแก้ไขข้อความข้างต้นและเปลี่ยนแปลงตัวสร้างส่วนใหญ่ (เมื่อจำเป็น): ตอนนี้พวกเขายอมรับค่าคุณสมบัติที่จำเป็นใด ๆ ที่จำเป็น นั่นอาจเป็นเพียงสตริงคำถามหรือแผนที่ของสตริงในภาษาที่แตกต่างกันสถานะ ฯลฯ - คุณสมบัติใดก็ตามที่ถูกส่งผ่านพวกเขาไม่ได้มุ่งเน้นเรื่องนี้;) ดังนั้นให้สมมติว่าเราอยู่เหนือการผ่านพารามิเตอร์ที่จำเป็น Thanx!