ฉันจะตั้งค่า MVP สำหรับโซลูชัน Winforms ได้อย่างไร


14

ฉันเคยใช้ MVP และ MVC ในอดีตและฉันชอบ MVP มากกว่าเพราะมันควบคุมการไหลของการดำเนินการที่ดีขึ้นมากในความคิดของฉัน

ฉันได้สร้างโครงสร้างพื้นฐานของฉัน (คลาสที่เก็บข้อมูล / พื้นที่เก็บข้อมูล) และใช้งานได้อย่างไม่มีปัญหาเมื่อทำการเข้ารหัสข้อมูลตัวอย่างอย่างหนักดังนั้นตอนนี้ฉันจึงย้ายไปยัง GUI และเตรียม MVP ของฉัน

หมวดก

  1. ฉันได้เห็น MVP โดยใช้มุมมองเป็นจุดเริ่มต้นซึ่งอยู่ในวิธีการสร้างมุมมองที่สร้างพรีเซนเตอร์ซึ่งจะสร้างแบบจำลองเชื่อมโยงเหตุการณ์ตามความจำเป็น

  2. ฉันยังเห็นผู้นำเสนอเป็นจุดเริ่มต้นที่มุมมองโมเดลและผู้นำเสนอถูกสร้างขึ้นผู้นำเสนอนี้จะได้รับวัตถุมุมมองและแบบจำลองในตัวสร้างเพื่อโยงเหตุการณ์

  3. เช่นเดียวกับใน 2 แต่รูปแบบไม่ผ่านไปยังผู้นำเสนอ แต่โมเดลเป็นคลาสสแตติกที่เรียกเมธอดและส่งคืนการตอบกลับโดยตรง

มาตรา B

ในแง่ของการรักษามุมมองและรูปแบบในการซิงค์ฉันได้เห็น

  1. เมื่อใดก็ตามที่ค่าในมุมมองเปลี่ยนไปเช่นTextChangedเหตุการณ์ใน. Net / C # นี่เป็นการยิงDataChangedEventที่ผ่านเข้าไปในแบบจำลองเพื่อให้ซิงค์อยู่ตลอดเวลา DataChangedEventและที่มีการเปลี่ยนแปลงรูปแบบคือเหตุการณ์พื้นหลังมันฟังแล้วมุมมองที่มีการปรับปรุงทางความคิดเดียวกันของการเพิ่ม เมื่อผู้ใช้ต้องการที่จะกระทำการเปลี่ยนแปลงSaveEventมันก็จะผ่านเข้าไปในแบบจำลองเพื่อทำการบันทึก ในกรณีนี้แบบจำลองเลียนแบบมุมมองข้อมูลและประมวลผลการกระทำ

  2. คล้ายกับ # b1 อย่างไรก็ตามมุมมองจะไม่ซิงค์กับโมเดลตลอดเวลา แต่เมื่อผู้ใช้ต้องการที่จะยอมรับการเปลี่ยนแปลงSaveEventถูกไล่ออกและผู้นำเสนอคว้ารายละเอียดล่าสุดและส่งพวกเขาไปยังรูปแบบ ในกรณีนี้โมเดลไม่ทราบเกี่ยวกับข้อมูลมุมมองจนกว่าจะต้องดำเนินการกับมันซึ่งในกรณีนี้โมเดลจะถูกส่งผ่านรายละเอียดที่จำเป็นทั้งหมด

หมวด C

การแสดงวัตถุธุรกิจในมุมมองเช่นวัตถุ (MyClass) ไม่ใช่ข้อมูลดั้งเดิม (int, double)

  1. มุมมองมีฟิลด์คุณสมบัติสำหรับข้อมูลทั้งหมดที่จะแสดงเป็นวัตถุโดเมน / ธุรกิจ เช่นview.Animalsexposes IEnumerable<IAnimal>คุณสมบัติแม้ว่ามุมมองจะประมวลผลสิ่งเหล่านี้เป็นโหนดใน TreeView จากนั้นสำหรับสัตว์ที่เลือกมันจะเปิดเผยSelectedAnimalเป็นIAnimalทรัพย์สิน

  2. มุมมองไม่มีความรู้เกี่ยวกับวัตถุโดเมนมันเปิดเผยคุณสมบัติสำหรับดั้งเดิม / กรอบ (.Net / Java) รวมประเภทวัตถุเท่านั้น ในอินสแตนซ์นี้ผู้นำเสนอจะผ่านวัตถุอะแดปเตอร์วัตถุโดเมนจากนั้นอะแดปเตอร์จะแปลวัตถุธุรกิจที่กำหนดเป็นตัวควบคุมที่ปรากฏบนมุมมอง ในกรณีนี้อะแดปเตอร์จะต้องมีการเข้าถึงการควบคุมที่เกิดขึ้นจริงในมุมมองไม่เพียง แต่มุมมองใด ๆ จึงกลายเป็นคู่ที่แน่นมากขึ้น

มาตรา D

หลายมุมมองใช้เพื่อสร้างการควบคุมเดียว เช่นคุณมีมุมมองที่ซับซ้อนพร้อมโมเดลที่เรียบง่ายเช่นการบันทึกออบเจ็กต์ประเภทต่างๆ คุณสามารถมีระบบเมนูที่ด้านข้างด้วยการคลิกแต่ละครั้งที่รายการที่แสดงการควบคุมที่เหมาะสม

  1. คุณสร้างมุมมองขนาดใหญ่หนึ่งมุมซึ่งมีตัวควบคุมส่วนบุคคลทั้งหมดซึ่งแสดงผ่านอินเทอร์เฟซมุมมอง

  2. คุณมีหลายมุมมอง คุณมีหนึ่งมุมมองสำหรับเมนูและพาเนลว่าง มุมมองนี้สร้างมุมมองอื่นที่จำเป็น แต่ไม่แสดงมุมมองเหล่านี้ (visible = false) มุมมองนี้ยังใช้อินเตอร์เฟสสำหรับแต่ละมุมมองที่มี (เช่นมุมมองลูก) ดังนั้นจึงสามารถแสดงต่อผู้นำเสนอคนเดียวได้ แผงว่างเปล่าเต็มไปด้วยมุมมองอื่น ๆ ( Controls.Add(myview)) และ ( (myview.visible = true) เหตุการณ์ที่เกิดขึ้นในมุมมอง "child" เหล่านี้ได้รับการจัดการโดยมุมมองพาเรนต์ซึ่งจะส่งผ่านเหตุการณ์ไปยังผู้นำเสนอและวีซ่าในทางกลับกันสำหรับการจัดหากิจกรรมกลับไปยังองค์ประกอบของเด็ก

  3. แต่ละมุมมองไม่ว่าจะเป็นพาเรนต์หลักหรือมุมมองย่อยที่เล็กกว่านั้นแต่ละสายจะมีผู้นำเสนอและโมเดลของตัวเอง คุณสามารถวางการควบคุมมุมมองลงในแบบฟอร์มที่มีอยู่แล้วและจะมีฟังก์ชั่นที่พร้อมใช้งานเพียงแค่ต้องการเดินสายไปยังผู้นำเสนอเบื้องหลัง

มาตรา E

หากทุกอย่างมีอินเทอร์เฟซตอนนี้ขึ้นอยู่กับวิธีการทำ MVP ในตัวอย่างข้างต้นจะมีผลต่อคำตอบนี้เพราะพวกเขาอาจไม่เข้ากันได้ข้าม

  1. ทุกอย่างมีอินเทอร์เฟซมุมมองผู้นำเสนอและรุ่น แต่ละสิ่งเหล่านี้มีการดำเนินการอย่างเป็นรูปธรรม แม้ว่าคุณจะมีมุมมองที่เป็นรูปธรรมเพียงรูปแบบและผู้นำเสนอ

  2. มุมมองและรุ่นมีส่วนต่อประสาน สิ่งนี้ทำให้มุมมองและรุ่นแตกต่างกัน ผู้นำเสนอสร้าง / ได้รับมุมมองและวัตถุรูปแบบและมันก็ทำหน้าที่ส่งข้อความระหว่างพวกเขา

  3. เฉพาะมุมมองที่มีส่วนต่อประสาน รุ่นนี้มีวิธีการคงที่และไม่ได้ถูกสร้างขึ้นดังนั้นจึงไม่จำเป็นต้องมีส่วนต่อประสาน หากคุณต้องการรูปแบบที่แตกต่างกันผู้นำเสนอจะเรียกวิธีการเรียนแบบคงที่ที่แตกต่างกัน การเป็นแบบคงที่ไม่มีลิงก์ไปยังผู้นำเสนอ

ความคิดส่วนตัว

จากรูปแบบที่แตกต่างกันทั้งหมดที่ฉันได้นำเสนอ (ส่วนใหญ่ฉันอาจใช้ในบางรูปแบบ) ซึ่งฉันแน่ใจว่ามีอีกมาก ฉันชอบ A3 เนื่องจากการรักษาตรรกะทางธุรกิจให้สามารถใช้ซ้ำได้นอก MVP, B2 สำหรับการทำสำเนาข้อมูลน้อยลงและเหตุการณ์น้อยลง C1 สำหรับการไม่เพิ่มในคลาสอื่นตรวจสอบให้แน่ใจว่าใส่ตรรกะที่ไม่สามารถทดสอบได้จำนวนเล็กน้อยในมุมมอง (วิธีการแสดงภาพวัตถุโดเมน) แต่สามารถตรวจสอบโค้ดหรือดูได้ง่ายๆในแอปพลิเคชัน ถ้าตรรกะนั้นซับซ้อนฉันจะเห็นด้วยกับคลาสอะแดปเตอร์ แต่ไม่ได้ในทุกกรณี สำหรับส่วน D ฉันรู้สึกว่า D1 สร้างมุมมองที่ใหญ่เกินไปสำหรับตัวอย่างเมนู ฉันเคยใช้ D2 และ D3 มาก่อน ปัญหาเกี่ยวกับ D2 คือคุณต้องเขียนโค้ดจำนวนมากเพื่อจัดเส้นทางเหตุการณ์ไปและกลับจากผู้นำเสนอไปยังมุมมองลูกที่ถูกต้องและไม่เข้ากันได้กับการลาก / วาง การควบคุมใหม่แต่ละอันต้องการการเดินสายที่มากขึ้นเพื่อรองรับผู้นำเสนอเดี่ยว D3 เป็นตัวเลือกที่ฉันชอบ แต่เพิ่มคลาสให้มากขึ้นในฐานะผู้นำเสนอและนางแบบที่จะจัดการกับมุมมองแม้ว่ามุมมองจะเกิดขึ้นง่ายมากหรือไม่จำเป็นต้องนำกลับมาใช้ใหม่ ฉันคิดว่าส่วนผสมของ D2 และ D3 นั้นดีที่สุดตามสถานการณ์ สำหรับหัวข้อ E ฉันคิดว่าทุกอย่างที่มีส่วนต่อประสานอาจเกินความจำเป็นฉันได้ทำมันสำหรับวัตถุโดเมน / ธุรกิจและมักจะไม่เห็นความได้เปรียบใน "การออกแบบ" โดยการทำเช่นนั้น แต่มันช่วยในการเยาะเย้ยวัตถุในการทดสอบ โดยส่วนตัวแล้วฉันเห็นว่า E2 เป็นโซลูชันแบบคลาสสิกแม้ว่าจะเคยเห็น E3 ที่ใช้ในโครงการ 2 โครงการที่ฉันเคยทำมาก่อนหน้านี้ ฉันคิดว่าส่วนผสมของ D2 และ D3 นั้นดีที่สุดตามสถานการณ์ สำหรับหัวข้อ E ฉันคิดว่าทุกอย่างที่มีส่วนต่อประสานอาจเกินความจำเป็นฉันได้ทำมันสำหรับวัตถุโดเมน / ธุรกิจและมักจะไม่เห็นความได้เปรียบใน "การออกแบบ" โดยการทำเช่นนั้น แต่มันช่วยในการเยาะเย้ยวัตถุในการทดสอบ โดยส่วนตัวแล้วฉันเห็นว่า E2 เป็นโซลูชันแบบคลาสสิกแม้ว่าจะเคยเห็น E3 ที่ใช้ในโครงการ 2 โครงการที่ฉันเคยทำมาก่อนหน้านี้ ฉันคิดว่าส่วนผสมของ D2 และ D3 นั้นดีที่สุดตามสถานการณ์ สำหรับหัวข้อ E ฉันคิดว่าทุกอย่างที่มีส่วนต่อประสานอาจเกินความจำเป็นฉันได้ทำมันสำหรับวัตถุโดเมน / ธุรกิจและมักจะไม่เห็นความได้เปรียบใน "การออกแบบ" โดยการทำเช่นนั้น แต่มันช่วยในการเยาะเย้ยวัตถุในการทดสอบ โดยส่วนตัวแล้วฉันเห็นว่า E2 เป็นโซลูชันแบบคลาสสิกแม้ว่าจะเคยเห็น E3 ที่ใช้ในโครงการ 2 โครงการที่ฉันเคยทำมาก่อนหน้านี้

คำถาม

ฉันกำลังใช้งาน MVP ถูกต้องหรือไม่ มีวิธีที่ถูกต้องเกี่ยวกับเรื่องนี้หรือไม่?

ฉันอ่านงานของ Martin Fowler ที่มีการเปลี่ยนแปลงและฉันจำได้เมื่อฉันเริ่มทำ MVC ฉันเข้าใจแนวคิด แต่แรกเริ่มไม่สามารถทำงานได้ว่าเป็นจุดเริ่มต้นทุกอย่างมีหน้าที่เป็นของตัวเอง แต่สิ่งที่ควบคุมและสร้างต้นฉบับ ชุดของวัตถุ MVC


2
เหตุผลในการถามคำถามนี้คือฉันต้องการทำให้ถูกต้องในเกือบครั้งแรก ฉันอยากให้ MVP มาตรฐานทำตามแทนที่จะสร้าง 6 แอพพลิเคชั่นโดยใช้รูปแบบที่แตกต่างกันสำหรับรูปแบบเดียวกัน
JonWillis

สมบูรณ์แบบ ... ฉันอยากจะขอเป็นเวลานาน
The King

คำตอบ:


4

สิ่งที่คุณนำเสนอที่นี่มากมายมีเหตุผลและเสียง ตัวเลือกบางอย่างจะขึ้นอยู่กับข้อมูลเฉพาะของแอปพลิเคชันและตัวเลือกใดที่ "รู้สึก" ถูกต้อง เป็นกรณีส่วนใหญ่เวลาจะไม่มีคำตอบที่ถูกต้องอย่างใดอย่างหนึ่ง ตัวเลือกบางอย่างจะสมเหตุสมผลที่นี่และตัวเลือกเหล่านั้นอาจผิดอย่างสมบูรณ์สำหรับการสมัครและสถานการณ์ต่อไป ฉันคิดว่าคุณกำลังอยู่ในเส้นทางที่ถูกต้องและได้ทำการตัดสินใจที่ดีและมีน้ำใจ

สำหรับฉันฉันรู้สึกว่าผู้นำเสนอควรเป็นจุดเริ่มต้นเกือบตลอดเวลา การมี UI เป็นจุดเริ่มต้นทำให้ตรรกะมากเกินไปใน UI และนำความสามารถในการแทนที่ UI ใหม่โดยไม่เปลี่ยนการเข้ารหัสขนาดใหญ่ และนั่นคืองานของผู้นำเสนอ


บางทีคำถามที่ฉันควรถามคือวิธีการใช้ MVP ที่ผิดธรรมดา ฉันจะเห็นด้วยกับรูปแบบที่เหมาะสมกับสถานการณ์ที่แตกต่างกัน แต่รู้สึกว่าควรมีวิธีการที่ยอมรับโดยทั่วไป ตัวอย่างของ MVP เป็นตัวอย่างง่าย ๆ และเกือบทั้งหมดมีความต้องการเดียวกันเพื่อแก้ไขวัตถุโดเมนและบันทึกการเปลี่ยนแปลง แต่จากตัวอย่างเหล่านั้นที่มีวัตถุประสงค์เดียวกันมีการสร้างความแตกต่างด้านบน ฉันเพิ่งเขียนโค้ดบางส่วนของแอพโดยใช้เหตุการณ์ที่เกิดขึ้นในมุมมองเพื่อจัดการในผู้นำเสนอ แต่ฉันน่าจะมีมุมมองที่อ้างอิงกับผู้นำเสนอและวิธีการโทรโดยตรง
JonWillis

ฉันจะเห็นด้วยกับความพยายามทั้งหมดที่จะทำให้มุมมองง่ายขึ้นเพื่อพิสูจน์ว่าไม่ได้ถูกทดสอบหน่วยจากนั้นผู้นำเสนอควรมีการควบคุม ข้อกังวลเดียวของฉันเกี่ยวกับเรื่องนี้ (คิดในหัวของฉันดังนั้นอาจผิด) คือว่า winforms / usercontrols อาจต้องเชื่อมโยงกับองค์ประกอบหลักและสงสัยว่าจำเป็นต้องใช้ตรรกะเพิ่มเติมในผู้นำเสนอเพื่อเขียนมันขึ้น
JonWillis

@Jon - วิธี MVP ผิดหรือเปล่า? ในหนังสือของฉันมันจะเป็นเมื่อมุมมองรู้เกี่ยวกับผู้นำเสนอ มันอาจจะไม่ "ผิด" ในแง่ที่มันใช้งานได้ แต่มันจะไม่เป็น MVP แต่มันเปลี่ยนไปเป็นอย่างอื่นในตอนนั้น ปัญหาเกี่ยวกับรูปแบบการออกแบบคือตัวอย่างสะอาดและเรียบง่ายที่สุดเท่าที่จะทำได้ จากนั้นเมื่อคุณไปปรับใช้พวกเขาเป็นครั้งแรกและโลกแห่งความจริงกระโดดขึ้นและพูดว่า นั่นคือสิ่งที่การเติบโตของคุณเริ่มต้น ค้นหาสิ่งที่เหมาะกับคุณและสถานการณ์ของแอพ
วอลเตอร์

ขอบคุณสำหรับคำแนะนำ. ฉันจำการเรียนรู้ MVC ที่มหาวิทยาลัย ฟังดูดี แต่ด้วยผืนผ้าใบว่างเปล่าคุณสงสัยว่าจะเริ่มต้นอย่างไรและทำงานอย่างไร ในแง่ของ MVP ผิดฉันหมายถึงว่ามีความคิด / ความหลากหลายของ MVC ที่ฉันโพสต์ไว้เหนือวิธีที่ผิดในการทำเช่นเมื่อมุมมองรู้ว่าผู้นำเสนอทำงานอย่างไร หรือมุมมองควรมีการอ้างอิงถึงส่วนต่อประสานของผู้นำเสนอหรือประเภทคอนกรีต ฯลฯ เพียงแค่รูปแบบที่แตกต่างกันมากมายซึ่งทั้งหมดสามารถทำงานได้เพื่อจุดประสงค์เดียวกัน
JonWillis

1
@ จอน - ความหลากหลายของคุณนั้นสอดคล้องกับเจตนารมณ์ของ MVP สำหรับการทำงานกับส่วนต่อประสานหรือประเภทที่เป็นรูปธรรมมันจะขึ้นอยู่กับสถานการณ์ของแอพ หากแอพมีขนาดค่อนข้างเล็กไม่ซับซ้อนอาจเพิ่มอินเทอร์เฟซไม่จำเป็น ฉันชอบที่จะทำให้สิ่งต่าง ๆ เรียบง่ายที่สุดเท่าที่จะเป็นไปได้จนกระทั่งมันค่อนข้างชัดเจนว่าแอปจำเป็นต้องใช้สถาปัตยกรรม X ดูคำตอบนี้สำหรับรายละเอียดเพิ่มเติม: programmers.stackexchange.com/questions/34547/…
Walter

4

เราใช้รูปแบบ MVP ที่ได้รับการดัดแปลงบนแอพ. NET 2.0 Winforms ของเรา สองสิ่งที่เราขาดไปคืออะแดปเตอร์ที่ได้รับการดัดแปลงของ WPF ViewModel และการเพิ่มการเชื่อมโยงข้อมูล รูปแบบเฉพาะของเราคือ MVPVM

เราวางตำแหน่งผู้นำเสนอเป็นรายแรกในเกือบทุกกรณียกเว้น usercontrols แบบกำหนดเองซึ่งมีสายในมุมมองก่อนเพื่อความเป็นมิตรของนักออกแบบ เราใช้การฉีดพึ่งพา ViewModels ที่สร้างรหัส, BDD สำหรับผู้นำเสนอและ TDD / TED สำหรับโมเดล

VM เป็นเพียงทรัพย์สินที่มีขนาดใหญ่และแบนซึ่งเพิ่มคุณสมบัติให้กับการเปลี่ยนแปลงเมื่อมีการเปลี่ยนแปลง มันง่ายมากในการสร้างสิ่งเหล่านี้ด้วยรหัส (และการทดสอบหน่วยการออกกำลังกายที่เกี่ยวข้อง) เราใช้พวกเขาสำหรับการอ่านและการเขียนไปยังการควบคุมที่ผู้ใช้สามารถโต้ตอบได้และการควบคุมสถานะที่เปิดใช้งาน ViewModel ประกอบกับวิวเนื่องจากเราใช้ databinding สำหรับการสาปแช่งใกล้กับทุกสิ่ง

มุมมองจะมีวิธีการเป็นครั้งคราวเพื่อทำสิ่งที่ VM ไม่สามารถทำได้ นี่คือการควบคุมการมองเห็นรายการ (WinForms สามารถเลือกได้) และสิ่งต่าง ๆ ที่ปฏิเสธที่จะเป็นฐานข้อมูล มุมมองจะแสดงเหตุการณ์เช่น "เข้าสู่ระบบ" หรือ "รีสตาร์ท" เสมอโดยมี EventArgs ที่เหมาะสมเพื่อดำเนินการกับพฤติกรรมของผู้ใช้ นอกจากว่าเราจะต้องใช้แฮ็คเช่น "View.ShowLoginBox" มุมมองนั้นสามารถเปลี่ยนได้อย่างสมบูรณ์ตราบใดที่มันเป็นไปตามข้อกำหนดการออกแบบทั่วไป

เราใช้เวลาประมาณ 6-8 เดือนในการทำแบบนี้ มันมีหลายชิ้น แต่มีความยืดหยุ่นและทรงพลังมาก การใช้งานเฉพาะของเรานั้นไม่ตรงกันและเป็นตัวขับเคลื่อนเหตุการณ์ซึ่งอาจเป็นสิ่งประดิษฐ์ของข้อกำหนดอื่น ๆ มากกว่าผลข้างเคียงของพฤติกรรมการออกแบบ ตัวอย่างเช่นฉันเพิ่มการซิงโครไนซ์เธรดลงใน baseclass ที่ VM ของเราสืบทอดมา (ซึ่งเพิ่งเปิดเผยวิธีการ OnPropertyChanged เพื่อเพิ่มเหตุการณ์) - และกะเทยตอนนี้เราสามารถมีผู้นำเสนอและแบบจำลองแบบมัลติเธรด


ฉันรู้ว่า MVPVM ของคุณอาจเป็นที่สนใจเชิงพาณิชย์ แต่ถ้าเป็นไรคุณสามารถให้รหัสตัวอย่างได้หรือไม่ ในบันทึกด้านข้างคุณจะวาดเส้นบนสิ่งที่ทำในรูปแบบและสิ่งที่เกิดขึ้นในผู้นำเสนอ ฉันได้เห็นผู้นำเสนอเป็นพื้นฐานแล้วพวกเขาจัดการกับมุมมองเหตุการณ์และเพียงเรียกแบบจำลองไปยังผู้นำเสนอการเข้าถึงเลเยอร์ข้อมูลเพื่อส่งผ่านวัตถุทางธุรกิจไปยังแบบจำลองไปจนถึงแบบจำลองที่ถูกแทนที่ด้วยผู้นำเสนอ
JonWillis

ใช่ฉันขอจบตัวอย่าง มันจะได้รับการปรับแต่งให้เข้ากับธุรกิจของเราเล็กน้อยเนื่องจากฉันใช้มันเป็นเครื่องมือฝึกอบรมภายในองค์กร
ไบรอันโบตเชอร์

ขอขอบคุณคุณฉันจะมองมากกว่านั้นในช่วงสุดสัปดาห์เพื่อดูว่าฉันเข้าใจมัน
JonWillis

@insta - ลิงก์ไม่ทำงานคุณสามารถโหลดซ้ำที่อื่นได้หรือไม่
Yves Schelpe

1
อึฉันเพิ่งลบไปเมื่อสัปดาห์ที่แล้ว ตัวเลข :(
Bryan Boettcher

2

ฉันกำลังใช้ PureMvc รุ่นที่ได้รับการแก้ไขสำหรับ. Net และขยายด้วยตัวเอง

ฉันคุ้นเคยกับ PureMvc จากการใช้มันในแอพพลิเคชั่น Flex มันเป็นโครงกระดูกประเภทเปลือยเปล่าดังนั้นมันจึงปรับได้ง่ายถ้าคุณต้องการปรับแต่งมัน

ฉันใช้เสรีภาพดังต่อไปนี้:

  • การใช้การไตร่ตรองฉันสามารถรับคุณสมบัติส่วนบุคคลใน view-mediator เพื่อออกไปในคลาสฟอร์มและคว้าการอ้างอิง (ส่วนตัว) ไปยังแต่ละคอนโทรลที่ฉันกำลังทำสมาธิ
  • การใช้การไตร่ตรองฉันสามารถวางสายควบคุมให้กับลายเซ็นเหตุการณ์ในผู้ไกล่เกลี่ยของฉันซึ่งเป็นแบบทั่วไปดังนั้นฉันเพิ่งเปิดพารามิเตอร์ผู้ส่ง
  • โดยปกติ PureMvc ต้องการผู้ไกล่เกลี่ยที่ได้รับเพื่อกำหนดความสนใจการแจ้งเตือนของพวกเขาในฟังก์ชั่นที่จะส่งกลับอาร์เรย์ของสตริง เนื่องจากความสนใจส่วนใหญ่ของฉันเป็นแบบสแตติกและฉันต้องการมีวิธีที่ง่ายกว่าในการดูความสนใจของผู้ไกล่เกลี่ยฉันจึงทำการปรับเปลี่ยนเพื่อให้ผู้ไกล่เกลี่ยสามารถประกาศความสนใจด้วยชุดตัวแปรสมาชิกที่มีลายเซ็นเฉพาะ: _ _ _ <classname> _ <notification-name> วิธีนี้ฉันสามารถเห็นสิ่งที่เกิดขึ้นโดยใช้แผนผังสมาชิก IDE แทนที่จะดูภายในฟังก์ชัน

ใน PureMvc คุณสามารถใช้ Command เป็นจุดเริ่มต้นคำสั่ง Start ทั่วไปจะตั้งค่า Model ให้มากที่สุดจากนั้นสร้าง MainForm สร้างและลงทะเบียนผู้ไกล่เกลี่ยด้วยและจากนั้นทำ Application.Run ในแบบฟอร์ม

ผู้ไกล่เกลี่ยสำหรับแบบฟอร์มจะรับผิดชอบในการตั้งค่าผู้ไกล่เกลี่ยทั้งหมดบางส่วนสามารถดำเนินการได้โดยอัตโนมัติอีกครั้งโดยใช้เทคนิคการไตร่ตรอง

ระบบที่ฉันใช้นั้นรองรับการลาก / วางถ้าฉันเข้าใจความหมายของคุณ แบบฟอร์มจริงทั้งหมดถูกสร้างใน VS แต่ประสบการณ์ของฉันมีเฉพาะกับแบบฟอร์มที่มีการควบคุมแบบคงที่เท่านั้น สิ่งต่าง ๆ เช่นรายการเมนูที่สร้างขึ้นแบบไดนามิกนั้นเป็นไปได้ด้วยการปรับเปลี่ยนสื่อกลางสำหรับเมนูหรือเมนูย่อยนั้น จุดที่มันจะลำบากคือเมื่อผู้ไกล่เกลี่ยไม่มีองค์ประกอบของรูตแบบคงที่ที่จะติดเข้าและคุณได้สร้างผู้ไกล่เกลี่ย 'อินสแตนซ์' แบบไดนามิก

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.