ดูเหมือนว่าคุณจะได้พบกับข้อผิดพลาดทั่วไป แต่ไม่ต้องกังวลพวกเขาสามารถแก้ไขได้ :)
ก่อนอื่นคุณต้องมองใบสมัครของคุณแตกต่างกันเล็กน้อยแล้วเริ่มแบ่งเป็นชิ้น ๆ เราสามารถแยกชิ้นเป็นสองทิศทาง ก่อนอื่นเราสามารถแยกตรรกะการควบคุม (กฎเกณฑ์ทางธุรกิจ, รหัสการเข้าถึงข้อมูล, รหัสสิทธิ์ผู้ใช้, สิ่งต่าง ๆ ทั้งหมด) จากรหัส UI ประการที่สองเราสามารถแบ่งรหัส UI ลงเป็นส่วน ๆ
ดังนั้นเราจะทำส่วนหลังก่อนแบ่ง UI เป็นส่วน ๆ วิธีที่ง่ายที่สุดในการทำเช่นนี้คือการมีรูปแบบโฮสต์เดียวที่คุณเขียน UI ของคุณด้วย usercontrols การควบคุมผู้ใช้แต่ละคนจะอยู่ในความดูแลของภูมิภาคของแบบฟอร์ม ดังนั้นจินตนาการว่าแอปพลิเคชันของคุณมีรายชื่อผู้ใช้และเมื่อคุณคลิกที่ผู้ใช้กล่องข้อความด้านล่างจะเต็มไปด้วยรายละเอียด คุณสามารถให้ผู้ใช้หนึ่งคนควบคุมการจัดการการแสดงรายการผู้ใช้และอีกคนหนึ่งที่จัดการการแสดงผลรายละเอียดของผู้ใช้
เคล็ดลับที่แท้จริงที่นี่คือวิธีที่คุณจัดการการสื่อสารระหว่างตัวควบคุม คุณไม่ต้องการให้ผู้ใช้ควบคุม 30 คนในแบบฟอร์มทั้งหมดถือการอ้างอิงซึ่งกันและกันแบบสุ่มและวิธีการโทรกับพวกเขา
ดังนั้นคุณจึงสร้างส่วนต่อประสานสำหรับตัวควบคุมแต่ละตัว อินเทอร์เฟซประกอบด้วยการดำเนินการที่ตัวควบคุมจะยอมรับและเหตุการณ์ใด ๆ ที่จะเพิ่ม เมื่อคุณคิดถึงแอพนี้คุณไม่สนใจว่าการเปลี่ยนแปลงการเลือกรายการกล่องรายการจะเป็นอย่างไรคุณมีความสนใจในความจริงที่ว่าผู้ใช้รายใหม่เปลี่ยนไป
ดังนั้นการใช้แอปตัวอย่างของเราอินเทอร์เฟซแรกสำหรับการควบคุมการโฮสต์กล่องรายการของผู้ใช้จะรวมถึงเหตุการณ์ที่เรียกว่า UserChanged ซึ่งส่งผ่านวัตถุผู้ใช้ออก
นี่เป็นสิ่งที่ดีเพราะตอนนี้ถ้าคุณเบื่อกล่องรายการและต้องการการควบคุมตาวิเศษสามมิติ zoomy คุณเพียงแค่กำหนดมันให้เป็นอินเทอร์เฟซเดียวกันและเสียบมันเข้าไป :)
ตกลงดังนั้นตอนที่สองแยกตรรกะ UI จากตรรกะโดเมน นี่เป็นเส้นทางที่ล้าสมัยและฉันขอแนะนำให้คุณดูรูปแบบ MVP ที่นี่ มันง่ายมาก
ขณะนี้การควบคุมแต่ละรายการเรียกว่า View (V ใน MVP) และเราได้กล่าวถึงสิ่งที่จำเป็นข้างต้นแล้ว ในกรณีนี้การควบคุมและอินเตอร์เฟซสำหรับมัน
สิ่งที่เราเพิ่มคือโมเดลและผู้นำเสนอ
โมเดลประกอบด้วยตรรกะที่จัดการสถานะแอปพลิเคชันของคุณ คุณรู้สิ่งต่าง ๆ มันจะไปที่ฐานข้อมูลเพื่อรับผู้ใช้เขียนไปยังฐานข้อมูลเมื่อคุณเพิ่มผู้ใช้และอื่น ๆ ความคิดคือคุณสามารถทดสอบทั้งหมดนี้โดยแยกออกจากสิ่งอื่นอย่างสมบูรณ์
ผู้นำเสนอค่อนข้างยุ่งยากกว่าที่จะอธิบาย มันเป็นคลาสที่อยู่ระหว่างโมเดลและมุมมอง มันถูกสร้างขึ้นโดยมุมมองและมุมมองผ่านตัวเองไปยังผู้นำเสนอโดยใช้อินเตอร์เฟซที่เรากล่าวถึงก่อนหน้านี้
ผู้นำเสนอไม่จำเป็นต้องมีอินเทอร์เฟซของตัวเอง แต่ฉันชอบที่จะสร้างขึ้นมาใหม่ ทำให้สิ่งที่คุณต้องการให้ผู้นำเสนอทำอย่างชัดเจน
ดังนั้นผู้นำเสนอจะเปิดเผยวิธีการเช่น ListOfAllUsers ซึ่งมุมมองจะใช้เพื่อรับรายการผู้ใช้หรือคุณสามารถใส่วิธี AddUser เป็นมุมมองและเรียกสิ่งนั้นจากผู้นำเสนอ ฉันชอบอันหลัง ด้วยวิธีนี้ผู้นำเสนอสามารถเพิ่มผู้ใช้ไปยังกล่องรายการเมื่อต้องการ
ผู้นำเสนอจะมีคุณสมบัติเช่น CanEditUser ซึ่งจะส่งคืนจริงหากผู้ใช้ที่เลือกสามารถแก้ไขได้ มุมมองจะสอบถามว่าทุกครั้งที่ต้องการทราบ คุณอาจต้องการให้คนแก้ไขได้ในสีดำและอ่านคนเดียวในสีเทา ในทางเทคนิคนั่นเป็นการตัดสินใจของมุมมองเนื่องจากมันเน้น UI ไม่ว่าผู้ใช้จะสามารถแก้ไขได้ตั้งแต่แรกคือสำหรับผู้นำเสนอ ผู้นำเสนอรู้เพราะพูดถึงนางแบบ
ดังนั้นโดยสรุปให้ใช้ MVP Microsoft ให้สิ่งที่เรียกว่า SCSF (โรงงานซอฟต์แวร์ไคลเอนต์สมาร์ท) ซึ่งใช้ MVP ในแบบที่ฉันอธิบาย มันทำสิ่งอื่น ๆ มากมายเช่นกัน มันค่อนข้างซับซ้อนและฉันไม่ชอบวิธีที่พวกเขาทำทุกอย่าง แต่อาจช่วยได้