คำถามติดแท็ก c#

C # เป็นภาษาการเขียนโปรแกรมเชิงวัตถุที่มีการจัดการและรวบรวมขยะที่สร้างขึ้นโดย Microsoft ควบคู่ไปกับแพลตฟอร์ม. NET

1
เราใช้รูปแบบพื้นที่เก็บข้อมูลใช่มั้ย
เรากำลังใช้คลาสที่แยกจากกัน-repositoryเพื่อต่อท้ายเรียกข้อมูลจากฐานข้อมูล สำหรับแต่ละตารางที่เก็บของตนเอง ตัวอย่างเช่นเรามีcustomerrepositoryคลาสที่มีวิธีการทุกอย่างเพื่อดึงลูกค้าและvacancyrepositoryที่มีวิธีการทุกชนิดเพื่อดึงตำแหน่งที่ว่าง ฉันมีคำถามสองข้อเกี่ยวกับวิธีการทำสิ่งนี้: วิธีรับข้อมูลที่ครอบคลุมหลายตาราง ตัวอย่างเช่นฉันมีหน้าจอที่แสดงลูกค้าทั้งหมดที่ยังไม่ได้สร้างตำแหน่งว่าง ที่สามารถcustomerrepositoryใช้วิธีการจากvacancyrespositoryหรือทำทั้งสองอย่างที่เก็บกลับผลลัพธ์และจะมีระดับที่สูงขึ้นในลำดับชั้น (ชื่อให้ของมันdataservice) ที่ได้รับผลจากทั้งเก็บและรวมเป็น 1 ผล? พื้นที่เก็บข้อมูลสามารถจัดการตรรกะได้เท่าใด ฉันคิดว่ามันโอเคที่จะใช้ 'where active == true' ในที่เก็บเพื่อเรียกใช้เฉพาะเร็กคอร์ดที่ใช้งานอยู่หรือว่าควรจัดการตรรกะง่ายๆโดยคลาสที่สูงกว่าในลำดับชั้น (ลองตั้งชื่อ a dataservice)? ตัวอย่างที่ฉันพบตอนนี้ก็คืออันนี้: เรามีรายการคำถามซึ่งมีหนึ่งคำถามขึ้นไป คำถามสามารถมีผลลัพธ์ซึ่งถืออยู่ในตารางแยกต่างหาก ดังนั้นเมื่อคุณต้องการดึงผลลัพธ์รวมของรายการคำถามคุณต้องรวมข้อมูลจากquestionlistตารางตารางคำถามและquestionstatusตาราง ตอนนี้เรามีที่เก็บข้อมูล 3 แห่งสำหรับตารางเหล่านี้ ถ้าฉันจะถามquestionlistrepositoryสิ่งที่เป็นผลรวมสำหรับรายการหมายเลข 12 มันจะต้องได้รับข้อมูลจากสองที่เก็บอื่น ๆ และด้วยเหตุนี้มีตรรกะบางอย่างในนั้นที่ได้รับอนุญาต? หรือมีquestionlistdataserviceที่รู้ที่เก็บที่จะใช้? อีกอย่างหนึ่ง: ที่เก็บข้อมูลของเราสามารถส่งผลIQueryableให้บริการโทรศัพท์สามารถรวมผลลัพธ์ได้อย่างง่ายดาย แต่ถ้าเป็นกรณีนี้ฉันไม่คิดว่ามันเป็นความคิดที่ดีที่จะดึงเนื้อหาทั้งหมดของตารางทั้งสามจาก ฐานข้อมูล

3
คุณจะบอกได้อย่างไรว่าจะใช้รูปแบบคอมโพสิตหรือโครงสร้างแบบต้นไม้หรือการนำไปใช้ครั้งที่สาม
ฉันมีสองประเภทลูกค้า "ผู้สังเกตการณ์ " - ประเภทและ " Subject " -type ทั้งคู่เกี่ยวข้องกับลำดับชั้นของกลุ่มลำดับชั้นของกลุ่ม ผู้สังเกตการณ์จะได้รับ(ปฏิทิน) ข้อมูลจากกลุ่มที่เกี่ยวข้องกับตลอดทั้งลำดับชั้นที่แตกต่างกัน ข้อมูลนี้ถูกคำนวณโดยการรวมข้อมูลจากกลุ่ม 'ผู้ปกครอง'ของกลุ่มที่พยายามรวบรวมข้อมูล (แต่ละกลุ่มสามารถมีผู้ปกครองได้เพียงคนเดียว ) หัวเรื่องจะสามารถสร้างข้อมูล (ซึ่งผู้สังเกตการณ์จะได้รับ) ในกลุ่มที่พวกเขาเชื่อมโยงด้วย เมื่อข้อมูลถูกสร้างขึ้นในกลุ่ม 'ลูก' ของกลุ่มทั้งหมดจะมีข้อมูลเช่นกันและพวกเขาจะสามารถสร้างพื้นที่เฉพาะของข้อมูลในเวอร์ชันที่เป็นของตัวเองแต่ยังคงเชื่อมโยงกับข้อมูลดั้งเดิมที่สร้างขึ้น (ใน การใช้งานเฉพาะของฉันข้อมูลดั้งเดิมจะมีช่วงเวลาและพาดหัวในขณะที่กลุ่มย่อยระบุข้อมูลที่เหลือสำหรับผู้รับที่เชื่อมโยงโดยตรงกับกลุ่มของตน) อย่างไรก็ตามเมื่อหัวเรื่องสร้างข้อมูลจะต้องตรวจสอบว่าผู้สังเกตการณ์ที่ได้รับผลกระทบทั้งหมดมีหรือไม่ ข้อมูลที่ขัดแย้งกับสิ่งนี้หรือไม่ซึ่งหมายถึงฟังก์ชั่นวนซ้ำขนาดใหญ่เท่าที่ฉันสามารถเข้าใจได้ ดังนั้นฉันคิดว่าสิ่งนี้สามารถสรุปได้ถึงความจริงที่ว่าฉันต้องมีลำดับชั้นที่คุณสามารถขึ้นและลงและบางแห่งสามารถปฏิบัติต่อพวกเขาโดยรวมได้ (การเรียกซ้ำโดยทั่วไป) นอกจากนี้ฉันไม่ได้แค่มุ่งแก้ปัญหาที่ใช้งานได้ ฉันหวังว่าจะหาวิธีแก้ปัญหาที่ค่อนข้างง่ายต่อการเข้าใจ (อย่างน้อยต้องมีสถาปัตยกรรมอย่างชาญฉลาด) และยังมีความยืดหยุ่นเพียงพอที่จะรับฟังก์ชั่นเพิ่มเติมในอนาคตได้อย่างง่ายดาย มีรูปแบบการออกแบบหรือแนวปฏิบัติที่ดีในการแก้ปัญหานี้หรือปัญหาลำดับชั้นที่คล้ายกัน แก้ไข : นี่คือการออกแบบของฉัน: คลาส "Phoenix" ตั้งชื่ออย่างนั้นเพราะฉันยังไม่ได้นึกถึงชื่อที่เหมาะสม แต่นอกเหนือจากนี้ฉันต้องสามารถซ่อนกิจกรรมที่เฉพาะเจาะจงสำหรับผู้สังเกตการณ์ที่เฉพาะเจาะจงแม้ว่าพวกเขาจะแนบกับพวกเขาผ่านกลุ่ม นอกหัวข้อเล็กน้อย : โดยส่วนตัวแล้วฉันรู้สึกว่าฉันควรจะสามารถตัดปัญหานี้ให้กลายเป็นปัญหาเล็ก ๆ น้อย ๆ ได้ แต่มันจะช่วยฉันได้อย่างไร ฉันคิดว่าเป็นเพราะมันมีฟังก์ชั่นเรียกซ้ำหลายอย่างที่ไม่เกี่ยวข้องกันและประเภทลูกค้าที่แตกต่างกันซึ่งจำเป็นต้องได้รับข้อมูลในรูปแบบที่แตกต่างกัน ฉันห่อหัวของฉันไม่ได้จริงๆ …

7
C # ให้“ เชือกน้อยกว่าให้คุณแขวน” กว่า C ++ หรือไม่? [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังว่าคำตอบจะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจเรียกร้องให้มีการอภิปรายโต้แย้งโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน7 ปีที่ผ่านมา โจ Spolsky ลักษณะ C ++ เป็น "เชือกพอที่จะแขวนตัวเอง" อันที่จริงเขาสรุป "Effective C ++" โดย Scott Meyers: มันเป็นหนังสือที่บอกว่าโดยทั่วไปแล้ว C ++ นั้นมีเชือกพอที่จะแขวนตัวคุณเองและจากนั้นอีกสองสามไมล์ของเชือกแล้วก็มียาฆ่าตัวตายสองตัวที่ปลอมตัวเป็น M & Ms ... ฉันไม่มีสำเนาของหนังสือเล่มนี้ แต่มีข้อบ่งชี้ว่าหนังสือส่วนใหญ่เกี่ยวข้องกับข้อผิดพลาดในการจัดการหน่วยความจำซึ่งดูเหมือนว่าจะมีการแสดงผลที่สงสัยใน C # เนื่องจากรันไทม์จัดการปัญหาเหล่านั้นให้คุณ นี่คือคำถามของฉัน: C # หลีกเลี่ยงข้อผิดพลาดที่หลีกเลี่ยงใน C ++ โดยการโปรแกรมอย่างระมัดระวังหรือไม่ ถ้าเป็นเช่นนั้นในระดับใดและพวกเขาหลีกเลี่ยง? มีข้อผิดพลาดใหม่ ๆ ใน C # ที่โปรแกรมเมอร์ C …

3
ใครสามารถอธิบายแบบแผนการเข้ารหัสของ C # ให้ฉันได้บ้าง
ฉันเพิ่งเริ่มทำงานกับ Unity3D และสคริปต์เป็นหลักด้วย C # ตามปกติแล้วฉันจะเขียนโปรแกรมใน Java ความแตกต่างก็ไม่ดีนัก แต่ฉันยังคงเรียกใช้หลักสูตรความผิดพลาดเพื่อให้แน่ใจว่าฉันกำลังอยู่ในเส้นทางที่ถูกต้อง อย่างไรก็ตามความอยากรู้ที่ยิ่งใหญ่ที่สุดของฉันกับ C # คือมันใช้อักษรตัวแรกของชื่อเมธอด (เช่น Java: getPrime()C #: GetPrime()aka: Pascal Case) มีเหตุผลที่ดีสำหรับสิ่งนี้หรือไม่? ฉันเข้าใจจากหน้าหลักสูตรความผิดพลาดที่ฉันอ่านซึ่งเห็นได้ชัดว่ามันเป็นแบบแผนสำหรับ. Net และฉันไม่มีทางที่จะเปลี่ยนแปลงมัน แต่ฉันอยากรู้ว่าทำไมมันถึงทำแบบนี้เมื่อเทียบกับกรณีอูฐปกติ (ญาติ?) ที่พูดว่า Java ใช้ หมายเหตุ: ฉันเข้าใจว่าภาษาต่าง ๆ มีระเบียบการเข้ารหัสของตนเอง (วิธีการ Python เป็นตัวพิมพ์เล็กทั้งหมดซึ่งใช้กับคำถามนี้ด้วย) แต่ฉันไม่เคยเข้าใจเลยว่าทำไมมันถึงไม่ทำเป็นมาตรฐาน

5
คลาสพื้นฐานเป็นโรงงาน
ฉันเขียนโค้ดในช่วงสุดสัปดาห์และพบว่าตัวเองต้องการเขียนโรงงานเป็นวิธีการคงที่ในคลาสฐาน คำถามของฉันคือการรู้ว่า ac # idomatic approach หรือไม่? ความรู้สึกของฉันที่อาจไม่ได้มาจากความจริงที่ว่าชั้นฐานมีความรู้เกี่ยวกับชั้นเรียนที่ได้รับ ที่กล่าวว่าฉันไม่แน่ใจว่าวิธีที่ง่ายกว่าเพื่อให้ได้ผลลัพธ์เดียวกัน คลาสโรงงานอื่นทั้งดูเหมือน (อย่างน้อยฉัน) เช่นความซับซ้อนที่ไม่จำเป็น (?) สิ่งที่ต้องการ: class Animal { public static Animal CreateAnimal(string name) { switch(name) { case "Shark": return new SeaAnimal(); break; case "Dog": return new LandAnimal(); break; default: throw new Exception("unknown animal"); } } } class LandAnimal : Animal { …
14 c#  class-design 

4
ข้อบกพร่องของการใช้ประเภทไดนามิกใน C #
ฉันได้ศึกษาเพิ่มเติมเกี่ยวกับประเภทไดนามิกใน C # ด้วยตัวอย่างบางอย่างที่ฉันเข้าใจเมื่อมีการคอมไพล์โค้ดมันไม่จำเป็นต้องคอมไพล์ใหม่อีกครั้ง แต่สามารถรันได้โดยตรง ผมรู้สึกมีความยืดหยุ่นในการให้บริการโดยคำหลักที่จริงสามารถที่จะเปลี่ยนแปลงชนิดของข้อมูลที่จะเป็นใหญ่ได้เปรียบ คำถาม, มีข้อบกพร่องใด ๆ ที่เฉพาะเจาะจงนอกเหนือจากการเรียกใช้วิธีการแบบไดนามิกที่ไม่ถูกต้องซึ่งโยนข้อยกเว้นเวลาทำงานที่นักพัฒนาต้องรู้ก่อนเริ่มการใช้งานหรือไม่

5
โหลดการทดสอบ: วิธีการสร้างคำขอต่อวินาที?
ฉันมีส่วนประกอบเซิร์ฟเวอร์ที่รันบน Zeroc-ICE เมื่อฉันต้องการโหลดทดสอบฉันคิดว่าการใช้ไลบรารีคู่ขนานเพื่อสร้างคำขอหลายรายการจะทำ แต่มันก็จบลงด้วยวิธีนั้น การใช้ไลบรารีParallel (Parallel.For)จาก C # นั้นง่ายกว่า แต่ดูเหมือนว่าจะไม่ได้สร้างทุกอย่างขนานกันในทันที ดังนั้นจึงไม่สามารถกำหนดคำจำกัดความสำหรับการสร้างคำขอ N ต่อวินาที ฉันควรทำอย่างไร ฉันคิดว่าทุกคนที่ต้องการทำการทดสอบการโหลดก่อนจะคิดเกี่ยวกับเรื่องนี้ วิธีที่มีประสิทธิภาพในการสร้างคำขอ N ในเวลาจริงต่อวินาทีคืออะไร? ตำนานอีกเรื่องเกี่ยวกับการเขียนโปรแกรมแบบขนาน โปรดให้ความกระจ่างแก่เราถ้าคุณใช้รูปแบบการเขียนโปรแกรมแบบขนานใน C # หรือ. Net โดยทั่วไป ลองนึกภาพฉันมี 5 กระบวนการ จะเริ่มต้นกระบวนการทั้งห้าในเวลาเดียวกันได้อย่างไร การบริโภคทรัพยากรหมายถึงอะไร ฉันได้ลองอ่านเนื้อหาที่มีอยู่มากมายในเน็ต แต่ฉันได้รับคำถามมากขึ้นกว่าที่พวกเขาเป็นคำตอบสำหรับคำถามของฉัน ฉันใช้ Parallel.For และสร้างเธรด N และเวลาที่วัดได้ จากนั้นฉันก็ลองสิ่งเดียวกันโดยใช้ Task.Factory.start สำหรับการแจงนับงาน เวลาที่วัดแตกต่างกัน ดังนั้นอะไรคือความแตกต่างระหว่างการใช้สิ่งเหล่านี้ เมื่อใดที่ฉันควรใช้คลาสที่เกี่ยวข้องและมีจุดประสงค์อะไรกันแน่ เรามักจะมีความมั่งคั่งมากมาย แต่เพียงว่าเราไม่รู้วิธีแยกความแตกต่างจากสิ่งอื่น นี่เป็นกรณีเช่นนี้สำหรับฉันไม่สามารถค้นหาสาเหตุที่ฉันไม่ควรใช้จากอีกกรณีหนึ่ง ฉันใช้คลาสนาฬิกาจับเวลาเพื่อวัดเวลาเหล่านี้ซึ่งอ้างว่าดีที่สุด ในสถานการณ์ของฉันโหลดการทดสอบส่วนประกอบสิ่งที่จะเป็นวิธีการวัดเวลาของการตอบสนอง นาฬิกาจับเวลาน่าจะเป็นทางออกที่ดีที่สุดสำหรับฉัน ความคิดเห็นใด …

4
มีเหตุผลที่จะชอบไวยากรณ์แลมบ์ดาแม้ว่าจะมีเพียงพารามิเตอร์เดียวหรือไม่?
List.ForEach(Console.WriteLine); List.ForEach(s => Console.WriteLine(s)); สำหรับฉันแล้วความแตกต่างนั้นเป็นเครื่องสำอางล้วนๆ แต่มีเหตุผลใดที่ลึกซึ้งว่าทำไมคน ๆ หนึ่งถึงชอบกัน
14 c#  syntax  lambda 

10
การแปลงรหัส Fortran 77 เป็น C #
ฉันพยายามแปลงโปรแกรม Fortan77 เป็น C # ฉันมีรูทีนย่อยที่มีโค้ดประมาณ 650 บรรทัดและคำสั่ง GOTO ที่น่ากลัวทั่วทุกที่ ฉันมีปัญหามากมายแม้กระทั่งเริ่มเห็นภาพการไหลของรูทีนย่อยเพื่อหาว่ามันทำอะไร มีใครบ้างไหมที่มีประสบการณ์ในสิ่งนี้ที่สามารถให้คำแนะนำกับฉันเกี่ยวกับวิธีรับภาพรวมของรูทีนย่อยนี้ มีเครื่องมือบางอย่างที่สามารถเพิ่มความเร็วหรืออำนวยความสะดวกในการแปลงประเภทนี้หรือไม่?
14 c#  fortran 

3
มันเป็นวิธีปฏิบัติที่ดีตั้งค่าสตริงการเชื่อมต่อในการตั้งค่าเว็บ?
เมื่อเร็ว ๆ นี้ฉันได้พูดคุยกับเพื่อนร่วมงานบางคนในที่ทำงานของฉันเพราะพวกเขาบอกว่าควรมีการเข้ารหัสการเชื่อมต่อสตริงที่ดีกว่า และฉันบอกว่าทำไมไม่ใช้การเชื่อมต่อสตริงที่กำหนดไว้ใน web.config เข้ารหัส? มันเหมือนกันและดีกว่าเพราะเอนทิตี้ของเฟรมเวิร์กตัวอย่างเช่นค้นหาชื่อของการเชื่อมต่อในเว็บ config ของแอพพลิเคชั่นตอนนี้ฉันอยากรู้จากจุดรักษาความปลอดภัยว่าอะไรดีกว่า

3
คลาสฐานนามธรรมพร้อมอินเทอร์เฟซเป็นพฤติกรรม
ฉันต้องออกแบบลำดับชั้นของชั้นเรียนสำหรับโครงการ C # ของฉัน โดยพื้นฐานแล้วฟังก์ชันของคลาสนั้นคล้ายกับคลาสของ WinForms ดังนั้นให้ลองใช้ชุดเครื่องมือ WinForms เป็นตัวอย่าง (อย่างไรก็ตามฉันไม่สามารถใช้ WinForms หรือ WPF ได้) มีคุณสมบัติและฟังก์ชั่นหลักบางอย่างที่ทุกชั้นต้องการ ขนาดตำแหน่งสีการมองเห็น (จริง / เท็จ) วิธีการวาด ฯลฯ ฉันต้องการคำแนะนำด้านการออกแบบฉันใช้การออกแบบที่มีคลาสเบสและอินเทอร์เฟซที่เป็นนามธรรมซึ่งไม่ใช่ประเภทจริง ๆ แต่ชอบพฤติกรรมมากกว่า นี่เป็นการออกแบบที่ดีหรือไม่? ถ้าไม่สิ่งที่จะเป็นการออกแบบที่ดีกว่า รหัสมีลักษณะดังนี้: abstract class Control { public int Width { get; set; } public int Height { get; set; } public int BackColor { get; …

1
วิธีการประกาศเหตุการณ์ที่ต้องการ
ฉันค่อนข้างมีความสุขกับความเข้าใจโมเดลเหตุการณ์. NET ฉันคิดว่าฉันอาจเข้าใจผิดถึงความแตกต่างเล็กน้อยของระบบ เมื่อฉันเริ่มวางกิจกรรมลงในชั้นเรียนของฉันฉันจะใช้วิธีมาตรฐานดังนี้: public event EventHandler<MyEventArgs> MyEvent; นี่หมายความว่าทุกสิ่งที่สมัครรับกิจกรรมจะต้องมีวิธีการดังนี้: void HandleThatEvent(object sender, MyEventArgs args){...} ซึ่งเป็นสิ่งที่ดี แต่ฉันพบว่าฉันไม่ค่อยสนใจผู้ส่งดังนั้นจึงทำให้มีวิธีการมากมายในการลงลายมือชื่อ ดังนั้นฉันจึงเปลี่ยนเป็นการประกาศประเภทตัวแทนของฉันเอง public delegate void MyEventHandler(SomeClass argument); ซึ่งลดความยุ่งเหยิง แต่ทิ้งฉันด้วยปัญหาเล็ก ๆ เมื่อมันมาถึงการเขียนจัดการ: eventImplmentor.MyEvent += HandleThatEvent; . . . void HandleThatEvent(/*oh, um, what arguments does it take? Intellisense isn't telling me*/) ดังนั้นฉันจะต้องกลับไปที่การประกาศของผู้ได้รับมอบหมายและมองแล้วกลับไปและเขียนพวกเขาในหรือรวบรวมและรอที่จะบอก ดังนั้นตอนนี้แทนฉันเพียงแค่ใช้Action, Action<T>หรือสิ่งที่เหมาะกับแม่แบบ public event Action<SomeClass> …
14 c# 

12
แนวปฏิบัติที่ดีที่สุดในปัจจุบันที่ได้รับการยอมรับเกี่ยวกับคำสำคัญ“ นี้” ที่อยู่หน้าฟิลด์และวิธีการใน c # คืออะไร
หากไม่จำเป็นต้องแยกแยะความแตกต่างระหว่างตัวแปรและฟิลด์ด้วยชื่อเดียวกันฉันไม่เคยใส่this.หน้าฟิลด์หรือการเข้าถึงสมาชิกใด ๆ ใน C # ฉันเห็นว่านี่ไม่ต่างจากm_คำนำหน้าซึ่งเคยเป็นเรื่องปกติใน C ++ และคิดว่าถ้าคุณต้องการระบุว่าเป็นสมาชิกคลาสของคุณใหญ่เกินไป อย่างไรก็ตามมีคนจำนวนมากในสำนักงานของฉันที่ไม่เห็นด้วยอย่างยิ่ง สิ่งที่ถือว่าเป็นแนวทางปฏิบัติที่ดีที่สุดในปัจจุบันเกี่ยวกับthis.อะไร? แก้ไข: เพื่อชี้แจงฉันไม่เคยใช้m_และใช้เฉพาะthis.เมื่อจำเป็นจริงๆ
14 c#  coding-style 

7
มารยาทที่มาเปิด
ฉันเริ่มทำงานในโครงการโอเพนซอร์สแห่งแรกของฉันบน Codeplex และเจอรหัสที่แย่มาก (ฉันเรียนรู้ว่า C # ยังคงมีคำสั่ง "goto") ฉันเริ่มเพิ่มคุณสมบัติที่ "เจ้าของ" ต้องการและหลังจากสำรวจรหัสฐานและเห็นว่ามันยุ่งเหยิง (เช่นใช้ "goto") ฉันต้องการทำความสะอาด นิดหน่อย. แต่ฉันเป็นกังวลเล็กน้อยและนั่นคือเหตุผลที่ฉันหันไปหาคุณทุกคน: มันเป็นมารยาทที่เหมาะสมสำหรับฉันที่จะ "แก้ไข" "รหัสไม่ดี" หรือฉันควรปล่อยให้มันเป็นและทำงานกับคุณสมบัติใหม่หรือไม่? อย่างที่ฉันพูดไว้ก่อนหน้านี้ฉันยังใหม่กับฉาก OSS ทั้งหมดและทำงานเป็นทีมโดยทั่วไปดังนั้นฉันจึงไม่ต้องการทำให้ยุ่งเหยิง

3
ฉันจะตั้งค่า MVP สำหรับโซลูชัน Winforms ได้อย่างไร
ฉันเคยใช้ MVP และ MVC ในอดีตและฉันชอบ MVP มากกว่าเพราะมันควบคุมการไหลของการดำเนินการที่ดีขึ้นมากในความคิดของฉัน ฉันได้สร้างโครงสร้างพื้นฐานของฉัน (คลาสที่เก็บข้อมูล / พื้นที่เก็บข้อมูล) และใช้งานได้อย่างไม่มีปัญหาเมื่อทำการเข้ารหัสข้อมูลตัวอย่างอย่างหนักดังนั้นตอนนี้ฉันจึงย้ายไปยัง GUI และเตรียม MVP ของฉัน หมวดก ฉันได้เห็น MVP โดยใช้มุมมองเป็นจุดเริ่มต้นซึ่งอยู่ในวิธีการสร้างมุมมองที่สร้างพรีเซนเตอร์ซึ่งจะสร้างแบบจำลองเชื่อมโยงเหตุการณ์ตามความจำเป็น ฉันยังเห็นผู้นำเสนอเป็นจุดเริ่มต้นที่มุมมองโมเดลและผู้นำเสนอถูกสร้างขึ้นผู้นำเสนอนี้จะได้รับวัตถุมุมมองและแบบจำลองในตัวสร้างเพื่อโยงเหตุการณ์ เช่นเดียวกับใน 2 แต่รูปแบบไม่ผ่านไปยังผู้นำเสนอ แต่โมเดลเป็นคลาสสแตติกที่เรียกเมธอดและส่งคืนการตอบกลับโดยตรง มาตรา B ในแง่ของการรักษามุมมองและรูปแบบในการซิงค์ฉันได้เห็น เมื่อใดก็ตามที่ค่าในมุมมองเปลี่ยนไปเช่นTextChangedเหตุการณ์ใน. Net / C # นี่เป็นการยิงDataChangedEventที่ผ่านเข้าไปในแบบจำลองเพื่อให้ซิงค์อยู่ตลอดเวลา DataChangedEventและที่มีการเปลี่ยนแปลงรูปแบบคือเหตุการณ์พื้นหลังมันฟังแล้วมุมมองที่มีการปรับปรุงทางความคิดเดียวกันของการเพิ่ม เมื่อผู้ใช้ต้องการที่จะกระทำการเปลี่ยนแปลงSaveEventมันก็จะผ่านเข้าไปในแบบจำลองเพื่อทำการบันทึก ในกรณีนี้แบบจำลองเลียนแบบมุมมองข้อมูลและประมวลผลการกระทำ คล้ายกับ # b1 อย่างไรก็ตามมุมมองจะไม่ซิงค์กับโมเดลตลอดเวลา แต่เมื่อผู้ใช้ต้องการที่จะยอมรับการเปลี่ยนแปลงSaveEventถูกไล่ออกและผู้นำเสนอคว้ารายละเอียดล่าสุดและส่งพวกเขาไปยังรูปแบบ ในกรณีนี้โมเดลไม่ทราบเกี่ยวกับข้อมูลมุมมองจนกว่าจะต้องดำเนินการกับมันซึ่งในกรณีนี้โมเดลจะถูกส่งผ่านรายละเอียดที่จำเป็นทั้งหมด หมวด C การแสดงวัตถุธุรกิจในมุมมองเช่นวัตถุ (MyClass) ไม่ใช่ข้อมูลดั้งเดิม (int, double) …

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