ปัญหาMVC
คือคนคิดมุมมองตัวควบคุมและรูปแบบจะต้องมีความเป็นอิสระมากที่สุดจากกัน พวกเขาไม่ได้ - มุมมองและควบคุมมักจะพัน - M(VC)
คิดว่ามันเป็น
คอนโทรลเลอร์เป็นกลไกการป้อนข้อมูลของส่วนต่อประสานผู้ใช้ซึ่งมักจะพันกันในมุมมองโดยเฉพาะกับ GUI อย่างไรก็ตามมุมมองคือเอาต์พุตและคอนโทรลเลอร์เป็นอินพุต มุมมองสามารถทำงานได้โดยไม่มีตัวควบคุมที่สอดคล้องกัน แต่โดยทั่วไปแล้วตัวควบคุมจะมีประโยชน์น้อยกว่ามากหากไม่มีมุมมอง คอนโทรลเลอร์ที่ใช้งานง่ายใช้มุมมองเพื่อตีความอินพุตของผู้ใช้ในแบบที่มีความหมายและใช้งานง่าย นี่คือสิ่งที่ทำให้แยกแนวคิดของตัวควบคุมออกจากมุมมองได้ยาก
คิดว่าหุ่นยนต์ควบคุมด้วยวิทยุในสนามการตรวจจับในกล่องปิดผนึกเป็นแบบจำลอง
แบบจำลองทั้งหมดเกี่ยวกับการเปลี่ยนสถานะและสถานะโดยไม่มีแนวคิดของเอาต์พุต (จอแสดงผล) หรือสิ่งที่กระตุ้นให้เกิดการเปลี่ยนสถานะ ฉันสามารถรับตำแหน่งหุ่นยนต์บนสนามและหุ่นยนต์รู้วิธีเปลี่ยนตำแหน่ง (ก้าวไปข้างหน้า / ถอยหลัง / ซ้าย / ขวา) ง่ายต่อการมองเห็นโดยไม่ต้องมีมุมมองหรือคอนโทรลเลอร์ แต่ไม่มีประโยชน์อะไร
นึกถึงมุมมองที่ไม่มีตัวควบคุมเช่นใครบางคนในห้องอื่นบนเครือข่ายในอีกห้องหนึ่งดูตำแหน่งหุ่นยนต์ในขณะที่ (x, y) ประสานงานการสตรีมลงในคอนโซลการเลื่อน มุมมองนี้แสดงสถานะของโมเดล แต่ผู้ชายคนนี้ไม่มีคอนโทรลเลอร์ ง่ายต่อการมองเห็นมุมมองนี้อีกครั้งโดยไม่ใช้คอนโทรลเลอร์
คิดว่าผู้ควบคุมไม่มีมุมมองเช่นมีคนถูกขังอยู่ในตู้เสื้อผ้าโดยมีตัวควบคุมวิทยุปรับให้เหมาะกับความถี่ของหุ่นยนต์ คอนโทรลเลอร์นี้กำลังส่งอินพุตและทำให้เกิดการเปลี่ยนสถานะโดยไม่รู้ว่ากำลังทำอะไรกับโมเดล (ถ้ามี) ง่ายต่อการมองเห็น แต่ไม่ได้มีประโยชน์จริงๆโดยไม่มีข้อเสนอแนะจากมุมมอง
UI ที่เป็นมิตรกับผู้ใช้ส่วนใหญ่จะประสานมุมมองกับคอนโทรลเลอร์เพื่อให้ส่วนติดต่อผู้ใช้ที่ใช้งานง่ายขึ้น ตัวอย่างเช่นลองนึกภาพมุมมอง / คอนโทรลเลอร์ด้วยหน้าจอสัมผัสที่แสดงตำแหน่งปัจจุบันของหุ่นยนต์ในแบบ 2 มิติและให้ผู้ใช้สัมผัสจุดบนหน้าจอที่เพิ่งเกิดขึ้นต่อหน้าหุ่นยนต์ คอนโทรลเลอร์ต้องการรายละเอียดเกี่ยวกับมุมมองเช่นตำแหน่งและสเกลของวิวพอร์ตและตำแหน่งพิกเซลของจุดสัมผัสที่สัมพันธ์กับตำแหน่งพิกเซลของหุ่นยนต์บนหน้าจอ) เพื่อตีความสิ่งนี้อย่างถูกต้อง (ไม่เหมือนกับคนที่ถูกล็อคในตู้เสื้อผ้าด้วย) ตัวควบคุมวิทยุ)
ฉันตอบคำถามของคุณแล้วหรือยัง :-)
คอนโทรลเลอร์คือทุกสิ่งที่รับอินพุตจากผู้ใช้ที่ใช้เพื่อทำให้โมเดลเปลี่ยนสถานะ พยายามแยกมุมมองและตัวควบคุมออกจากกัน แต่รู้ว่าพวกมันมักจะพึ่งพาซึ่งกันและกันดังนั้นมันก็โอเคถ้าขอบเขตระหว่างพวกมันนั้นคลุมเครือนั่นคือการมีมุมมองและตัวควบคุมเป็นแพคเกจที่แยกกันอาจไม่แยกกันอย่างหมดจด ชอบ แต่ก็ไม่เป็นไร คุณอาจต้องยอมรับว่าคอนโทรลเลอร์จะไม่ถูกแยกออกจากมุมมองอย่างชัดเจนเนื่องจากมุมมองมาจากโมเดล
... ควรทำการตรวจสอบความถูกต้องและอื่น ๆ ในคอนโทรลเลอร์หรือไม่ ถ้าเป็นเช่นนั้นฉันจะส่งข้อความแสดงข้อผิดพลาดกลับไปยังมุมมองได้อย่างไร - ควรผ่านโมเดลอีกครั้งหรือผู้ควบคุมควรส่งตรงไปที่มุมมอง
หากการตรวจสอบเสร็จสิ้นในมุมมองฉันจะใส่อะไรลงในคอนโทรลเลอร์
ฉันว่ามุมมองที่เชื่อมโยงและตัวควบคุมควรโต้ตอบอย่างอิสระโดยไม่ต้องผ่านแบบจำลอง คอนโทรลเลอร์ใช้อินพุตของผู้ใช้และควรทำการตรวจสอบความถูกต้อง (อาจใช้ข้อมูลจากรุ่นและ / หรือมุมมอง) แต่ถ้าการตรวจสอบล้มเหลวตัวควบคุมควรจะสามารถปรับปรุงมุมมองที่เกี่ยวข้องได้โดยตรง (เช่นข้อความแสดงข้อผิดพลาด)
การทดสอบกรดสำหรับสิ่งนี้คือถามตัวคุณเองว่ามุมมองอิสระ (เช่นคนที่อยู่ในห้องอื่นที่ดูตำแหน่งหุ่นยนต์ผ่านเครือข่าย) ควรเห็นอะไรหรือไม่เป็นผลมาจากข้อผิดพลาดในการตรวจสอบความถูกต้องของคนอื่น (เช่นผู้ชายในตู้ พยายามบอกหุ่นยนต์ให้ก้าวออกจากสนาม) โดยทั่วไปคำตอบคือไม่ - ข้อผิดพลาดในการตรวจสอบป้องกันการเปลี่ยนสถานะ หากไม่มีสถานะ tranistion (หุ่นยนต์ไม่เคลื่อนที่) ก็ไม่จำเป็นต้องบอกมุมมองอื่น คนที่แต่งตัวประหลาดในตู้เสื้อผ้าไม่ได้รับคำติชมใด ๆ ที่เขาพยายามทำให้เกิดการเปลี่ยนแปลงที่ผิดกฎหมาย (ไม่มีมุมมอง - ส่วนติดต่อผู้ใช้ที่ไม่ดี) และไม่มีใครต้องการที่จะรู้ว่า
หากคนที่มีหน้าจอสัมผัสพยายามส่งหุ่นยนต์ออกจากสนามเขาได้รับข้อความที่เป็นมิตรกับผู้ใช้ที่ดีโดยขอให้เขาไม่ฆ่าหุ่นยนต์โดยส่งมันออกจากช่องตรวจจับ แต่อีกครั้งไม่มีใครต้องการรู้เรื่องนี้อีก
ถ้ามุมมองอื่น ๆไม่จำเป็นต้องรู้เกี่ยวกับข้อผิดพลาดเหล่านี้แล้วคุณจะมีประสิทธิภาพการบอกว่าปัจจัยการผลิตจากผู้ใช้และข้อผิดพลาดใด ๆ ที่เกิดเป็นส่วนหนึ่งของรูปแบบและสิ่งที่ทั้งเป็นเพียงเล็กน้อยที่ซับซ้อนมากขึ้น ...