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

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

4
ไปไกลแค่ไหนกับการทดสอบหน่วย
คำถามที่ถามมาหลายครั้งก่อน แต่มีการพัฒนาเอียง twds mvc เฉพาะ ฉันเป็นเด็กที่ดีมากและได้เขียนโค้ดแอ็คชั่นคอนโทรลเลอร์ทั้งหมดของฉันด้วยการทดสอบหน่วยที่เกี่ยวข้องซึ่งยอดเยี่ยมมาก (ถ้าซ้ำ ๆ [อ่านมาก ๆ ] ในบางครั้ง) ตามจริงแล้วฉันได้สร้างเทมเพลต T4 เล็ก ๆ น้อย ๆ เพื่อเขียนกระดูกเปลือยส่วนใหญ่ของการทดสอบหน่วยเริ่มต้นจากนั้นปรับแต่งตามความเหมาะสมตามการใช้งาน ฉันจะยอมรับว่าไม่แน่ใจว่าจะจัดการกับการทดสอบในมุมมองที่มีบางส่วนได้อย่างไร - แต่นั่นเป็นเรื่องราวสำหรับคำถามอื่น ตอนนี้ส่วนที่ยากสำหรับฉันที่จะตัดสินใจก็คือความครอบคลุมที่ลึกแค่ไหนในชั้นบริการของฉัน สาเหตุที่วิธีการบริการบางอย่างของฉัน (ดีขึ้นหรือแย่ลง) ดำเนินการกับคำสั่ง linq ที่หลากหลายซึ่งให้ข้อมูลที่รอบคอบกับตรรกะที่ตามมาภายในวิธีการนั้น ฉันรู้ว่าฉันสามารถ (ควร ??) ทำลายวิธีการเหล่านี้ลงไปเท่านั้นเรียกตรรกะที่จำเป็นสำหรับแต่ละคำสั่ง linq แล้วใช้พวกเขาภายในวิธีการ อย่างไรก็ตามในหลาย ๆ กรณีไม่มีการใช้งานซ้ำของฟังก์ชัน 'linq' และดังนั้นจึงรู้สึกว่าการทำเช่นนี้จะทำให้รหัสออกมาในระดับที่ไกลเกินไป สิ่งที่ฉันถามคือด้วยตรรกะที่ซับซ้อนที่เกิดขึ้นในวิธีการมันเป็น 'ดีพอ' ที่จะมีวิธีการทดสอบที่เพียงแค่อ้างถึงผลลัพธ์ที่ต้องการและ / หรือข้อผิดพลาดที่คาดหวังหรือควรจะทุกบรรทัดตรรกะพร้อมกันและทดสอบด้วย วิธีที่ฉันเห็นการทำการทดสอบอย่างถูกต้องจากนั้นเมธอดตรรกะ (ทีละบรรทัด) ควรได้รับความครอบคลุมบางประเภทเช่นกัน อย่างไรก็ตาม (ในความคิดเห็นที่ไร้เดียงสาของฉัน) อาจนำไปสู่วัฏจักรที่ไม่สิ้นสุดของการพยายามทดสอบและวิธีการที่นำมาใช้อย่างใกล้ชิด …
11 c#  .net  asp.net-mvc 

9
ศึกษาเกี่ยวกับการเพิ่มหรือลดความสามารถในการผลิตเอกสารรหัส
หลังจากค้นหามากฉันล้มเหลวในการตอบคำถามพื้นฐานที่เกี่ยวข้องกับการสันนิษฐานว่าเป็นที่รู้จักในโลกการพัฒนาซอฟต์แวร์: สิ่งที่เป็นที่รู้จัก: การบังคับใช้นโยบายที่เข้มงวดเกี่ยวกับเอกสารรหัสที่เพียงพอ (ไม่ว่าจะเป็นแท็ก Doxygen, Javadoc หรือเพียงแค่ความคิดเห็นมากมาย) จะเพิ่มส่วนหัวไปยังเวลาที่ใช้ในการพัฒนาโค้ด แต่: การมีเอกสารอย่างละเอียด (หรือแม้กระทั่ง API) จะนำมาซึ่งความสามารถในการเพิ่มผลผลิต (ข้อสันนิษฐานหนึ่งข้อ) ในนักพัฒนาใหม่และผู้ที่มีประสบการณ์ในช่วงที่พวกเขากำลังเพิ่มคุณสมบัติหรือแก้ไขข้อบกพร่องตามท้องถนน คำถาม: ต้องใช้เวลาในการพัฒนาเพิ่มเติมเพื่อรับประกันเอกสารดังกล่าวซึ่งชดเชยด้วยผลกำไรที่เพิ่มขึ้นจากการผลิตบนถนน (ในแง่ที่ประหยัดอย่างเคร่งครัด) หรือไม่? ฉันกำลังมองหากรณีศึกษาหรือคำตอบที่สามารถนำหลักฐานที่เป็นหลักฐานมาสนับสนุนข้อสรุปที่ได้รับ ขอบคุณล่วงหน้า!

4
ความเป็นอิสระของแพลตฟอร์มคืออะไร ข้ามแพลตฟอร์มและ 'ความเป็นอิสระของแพลตฟอร์ม' เหมือนกันหรือไม่
ความเป็นอิสระของแพลตฟอร์มหมายถึงอะไรจริงๆ? อะไรคือเกณฑ์ในการเรียกแพลตฟอร์มภาษาที่เป็นอิสระ? ข้ามแพลตฟอร์มและ 'ความเป็นอิสระของแพลตฟอร์ม' เหมือนกันหรือไม่ (นี่อาจเป็นคำถามสำหรับการศึกษาด้วยตนเอง แต่ฉันต้องการได้ยินจากผู้เชี่ยวชาญจาก Stack overflow มีคำจำกัดความและมุมมองมากมายเกี่ยวกับเรื่องนี้ใน interenet และบางคนก็สับสน)

10
ฉันจะอธิบายโปรแกรมที่ไม่ใช่. NET คืออะไรได้อย่างไร [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน5 ปีที่ผ่านมา ฉันไม่ได้ทำงานกับ บริษัท ซอฟต์แวร์และฉันเป็นหนึ่งในไม่กี่คนใน บริษัท ที่รู้อะไรเกี่ยวกับการเขียนโปรแกรม ฉันใช้เวลาโดยอัตโนมัติในการทำให้โปรแกรมอื่น ๆ ที่ใช้ในสำนักงานผ่าน API สาธารณะและฉันยังสร้างแอปพลิเคชันแบบสแตนด์อโลนเพียงไม่กี่ตัว ฉันทำงานเกือบทั้งหมดใน C # .NET เนื่องจากทุกแอปพลิเคชันที่เราใช้ในสำนักงานดูเหมือนว่าจะมี. NET API บางรูปแบบ ฉันมีบางคนที่นี่ถามฉันเกี่ยวกับการเรียนรู้ "วิธีการโปรแกรม" และที่พวกเขาควรเริ่ม ฉันคิดว่ามันสมเหตุสมผลมากกว่าที่จะเรียนรู้ภาษา. NET เนื่องจากโปรแกรมเกือบทั้งหมดที่พวกเขาต้องการจะมี. NET API โดยอัตโนมัติและดูเหมือนว่า VBA กำลังจะมาถึงและถูกแทนที่ด้วย VSTA อย่างไรก็ตามฉันพยายามหาวิธีอธิบายว่า. NET คืออะไรและทำไมพวกเขาจึงควรเรียนรู้กับคนที่ไม่รู้เกี่ยวกับการเขียนโปรแกรม มันไม่ใช่ภาษาจริงๆเนื่องจากมีหลายภาษาที่ถูกพิจารณาว่าเป็น. NET languages บวกฉันคิดว่ามีความแตกต่างระหว่าง ". NET" และ ". NET Framework" …

4
ฉันจะปิดบริการได้อย่างไรจึงง่ายขึ้น
เรามีการพึ่งพาบริการของบุคคลที่สามซึ่งแสดงถึงอินเทอร์เฟซขนาดมหึมาซึ่งเราต้องการเพียง 3 วิธีเท่านั้น นอกจากนี้อินเทอร์เฟซเปลี่ยนบ่อย ... ฉันตัดสินใจที่จะรวมส่วนต่อประสานในชั้นเรียนในโครงการของเราและเปิดเผยวิธีการที่เราต้องการเท่านั้น แต่ผมไม่แน่ใจว่าผมควรจะจัดการกับค่าส่งกลับ ... Storageอินเตอร์เฟซที่ส่งกลับวัตถุของการพิมพ์ เราภายในมีชนิดซึ่งเป็นตัวแทนของเราภายในของStorageModelStorage สิ่งที่คุณจะกลับมาใน mapper นี้StorageหรือStorageModel? เรามี DataService StorageServiceซึ่งได้รับการพึ่งพาของ wrapper injected ขณะนี้ฉันกำลังทำมันโดยทั่วไปดังนี้: public class StorageService { private readonly IExternalStorageWrapper externalStorageWrapper; public StorageService(IExternalStorageWrapper externalStorageWrapper) { this.externalStorageWrapper = externalStorageWrapper; } public StorageModel GetStorage(int storageId) { return this.externalStorageWrapper.GetStorage(storageId).ConvertToStorageModel(); } } public class ExternalStorageWrapper : IExternalStorageWrapper { …

4
วิธีที่ดีที่สุดในการทำเครื่องหมายวิธีการที่เรียกว่าผ่านการสะท้อน?
ซอฟต์แวร์ของเรามีหลายคลาสที่ควรพบแบบไดนามิกผ่านการสะท้อนกลับ คลาสทั้งหมดมีคอนสตรัคเตอร์ที่มีลายเซ็นเฉพาะซึ่งรหัสการสะท้อนจะทำให้วัตถุเป็นอินสแตนซ์ อย่างไรก็ตามเมื่อมีคนตรวจสอบว่ามีการอ้างอิงวิธีการนั้นหรือไม่ (เช่นผ่าน Visual Studio Code Lens) การอ้างอิงผ่านการสะท้อนกลับจะไม่ถูกนับ ผู้คนสามารถพลาดการอ้างอิงและลบ (หรือเปลี่ยน) วิธีที่ไม่ได้ใช้อย่างเห็นได้ชัด เราควรทำเครื่องหมาย / วิธีการเอกสารที่ต้องการเรียกผ่านการสะท้อนอย่างไร เป็นการดีที่ควรทำเครื่องหมายวิธีในลักษณะที่ทั้งเพื่อนร่วมงานและ Visual Studio / Roslyn และเครื่องมืออัตโนมัติอื่น ๆ 'ดู' ว่าวิธีการมีวัตถุประสงค์ที่จะเรียกว่าผ่านการสะท้อน ฉันรู้ว่ามีสองตัวเลือกที่เราสามารถใช้ได้ แต่ทั้งคู่ไม่ค่อยพอใจ เนื่องจาก Visual Studio ไม่พบการอ้างอิง: ใช้แอตทริบิวต์ที่กำหนดเองและทำเครื่องหมายตัวสร้างด้วยคุณลักษณะนี้ ปัญหาคือคุณสมบัติของแอททริบิวไม่สามารถเป็นการอ้างอิงเมธอดได้ดังนั้นตัวสร้างจะยังคงแสดงว่ามีการอ้างอิง 0 รายการ เพื่อนร่วมงานที่ไม่คุ้นเคยกับแอตทริบิวต์ที่กำหนดเองอาจจะเพิกเฉย ข้อดีของวิธีการปัจจุบันของฉันคือส่วนการสะท้อนสามารถใช้คุณลักษณะเพื่อค้นหาตัวสร้างที่ควรเรียกใช้ ใช้ความคิดเห็นเพื่อจัดทำเอกสารว่าเมธอด / คอนสตรัคเตอร์ตั้งใจที่จะเรียกผ่านการสะท้อนกลับ เครื่องมืออัตโนมัติไม่สนใจความคิดเห็น (และเพื่อนร่วมงานก็ทำได้เช่นกัน) ความคิดเห็นเกี่ยวกับเอกสาร XMLสามารถนำมาใช้เพื่อให้ Visual Studio นับการอ้างอิงเพิ่มเติมถึงวิธีการ / คอนสตรัคเตอร์: อนุญาตให้MyPluginคลาสที่ตัวสร้างเรียกใช้ผ่านการสะท้อนกลับ สมมติว่าโค้ดการสะท้อนที่กล่าวอ้างค้นหาคอนสตรัคเตอร์ที่รับintพารามิเตอร์ …

2
ใน MVVM, ViewModel หรือ View ควรรับผิดชอบในการสร้างมุมมองใหม่หรือไม่?
ในแอปพลิเคชัน WPF ของฉันฉันต้องการสร้างมุมมองใหม่ ฉันควรทำเช่นนั้น - ในViewModel or Model ? แอปพลิเคชั่นนี้เป็นเครื่องมือที่มีลักษณะคล้ายหน้าต่างเดียว (ง่ายมากสำหรับตอนนี้ด้วยปุ่ม "ส่ง" เดียว ในกรณีที่เลือกช่องทำเครื่องหมายหนึ่งหน้าต่างใหม่ที่ใช้ ViewModel เดียวกันควรปรากฏขึ้นเพื่อขอรายละเอียดเพิ่มเติมจากผู้ใช้ สำหรับจุดประสงค์ของคำถามนี้ลองพิจารณาเพียงวิธีเข้าหน้าต่างใหม่โดยไม่พิจารณาวิธีอื่นเช่นแสดง / ซ่อนแผง ในอุดมคติแล้วในมุมมองไม่ควรมีรหัสใด ๆ นอกจากนี้เนื่องจาก View ไม่ได้มีตรรกะใด ๆ ในนั้น VM จะต้องตรวจสอบก่อนว่าการสร้างมุมมองใหม่นั้นจำเป็นหรือไม่ - และเมื่อมีการสะท้อนความรับผิดชอบนี้กลับไปที่ View ซึ่งนำไปสู่การขยายโค้ด ในทางกลับกันการสร้างมุมมองใหม่ใน ViewModel ละเมิดหลักการที่ ViewModel ไม่ควรรู้เกี่ยวกับมุมมอง ดังนั้นจะเป็นการดีกว่าหรือที่จะสร้างมุมมองใหม่ใน View หรือ ViewModel?
11 c#  design  wpf  mvvm 

4
วิธีที่ดีที่สุดในการใช้ตัวดำเนินการเงื่อนไขแบบ null ในนิพจน์บูลีน
คุณกำลังเขียนนิพจน์บูลีนที่อาจมีลักษณะเช่นนี้: team.Category == "A Team" && team?.Manager?.IsVietnamVet public class Manager { public bool IsVietnamVet { get; set; } } public class Team { public string Category { get; set; } public Manager Manager { get; set; } } ... และคุณได้รับข้อผิดพลาด: ผู้ประกอบการ '&&' ไม่สามารถใช้กับผู้ดำเนินการประเภท 'bool' และ 'bool?' วิธีที่ดีที่สุด / สะอาดที่สุดในการจัดการคืออะไร? team.Category …
11 c# 

4
การลดสำเร็จรูปในชั้นเรียนที่ใช้ส่วนต่อประสานผ่านองค์ประกอบ
ฉันได้เรียน: Aว่าเป็นคอมโพสิตของจำนวนของชั้นเรียนขนาดเล็กB, และCD B, CและDใช้อินเตอร์เฟซIB, ICและIDตามลำดับ ตั้งแต่AรองรับทุกการทำงานของB, CและD, AการดำเนินการIB, ICและIDเช่นกัน แต่นี้โชคไม่ดีที่นำไปสู่การเป็นจำนวนมากเส้นทางใหม่ในการดำเนินการA ชอบมาก interface IB { int Foo {get;} } public class B : IB { public int Foo {get {return 5;}} } interface IC { void Bar(); } public class C : IC { public void Bar() { } } …

2
จะทำการเชื่อมต่อฐานข้อมูลทั่วไปสำหรับชั้นเรียนของฉันได้ที่ไหน
ฉันมีหลายคลาส (Repositories) ซึ่งทำหน้าที่ในการบันทึก / ดึงข้อมูลวัตถุบางอย่างใน / จากฐานข้อมูล; พวกเขาทั้งหมดต้องสร้างการเชื่อมต่อกับฐานข้อมูลเดียว ฉันคิดว่าเพื่อหลีกเลี่ยงการนิยามใหม่ConnectionStringและSqlConnectionในแต่ละชั้นเรียนให้ผ่านการเชื่อมต่อแบบเปิดกับพวกเขา เมื่อใดที่ / เวลาที่ดีที่สุดในการกำหนด / เปิดการเชื่อมต่อนั้นและส่งผ่านไปยังชั้นเรียนคืออะไร? มีวิธี / รูปแบบที่ดีกว่าในการเข้าถึงทรัพยากรทั่วไปนี้หรือไม่?
11 c#  sql  class-design 

2
ตัวจัดการคำสั่งและ DDD
ฉันมีแอพพลิเคชั่น ASP.NET MVC ที่ใช้บริการสอบถามเพื่อรับข้อมูลและบริการคำสั่งเพื่อส่งคำสั่ง คำถามของฉันเกี่ยวกับส่วนคำสั่ง หากมีการร้องขอเข้ามาบริการคำสั่งจะใช้โปรแกรมเลือกจ่ายงานคำสั่งที่จะกำหนดเส้นทางคำสั่งไปยังตัวจัดการคำสั่งที่กำหนดไว้ ตัวจัดการคำสั่งนี้ตรวจสอบความถูกต้องของ comand ก่อนและหากทุกอย่างเป็นที่ยอมรับก็จะดำเนินการคำสั่ง ตัวอย่างที่เป็นรูปธรรม: AddCommentToArticleCommandHandler ได้รับ AddCommentToArticleCommand ซึ่งมี ArticleId, CommentText และ EmailAddress ครั้งแรก; การตรวจสอบจะต้องเกิดขึ้นเช่น: - ตรวจสอบว่ามีบทความอยู่หรือไม่ - ตรวจสอบว่าบทความไม่ได้ปิดอยู่หรือไม่ - ตรวจสอบว่ามีการกรอกข้อความแสดงความคิดเห็นและระหว่าง 20 ถึง 500 อักขระหรือไม่ - ตรวจสอบว่ากรอกอีเมลแล้วหรือไม่ ฉันสงสัยว่าจะใช้การตรวจสอบนี้ที่ไหน 1 / ในตัวจัดการคำสั่งเอง แต่จะไม่สามารถนำกลับมาใช้ใหม่ได้ในตัวจัดการคำสั่งอื่น 2 / ในนิติบุคคลโดเมน แต่เป็นนิติบุคคลที่โดเมนไม่ทราบเกี่ยวกับที่เก็บหรือบริการจึงไม่สามารถทำการตรวจสอบที่จำเป็น (ไม่สามารถตรวจสอบว่ามีบทความ) แต่ในทางกลับกันหากเอนทิตีไม่มีตรรกะมากกว่าจะกลายเป็นที่เก็บข้อมูลอย่างง่ายซึ่งไม่เป็นไปตามหลักการ DDD 3 / ตัวจัดการคำสั่งใช้ตัวตรวจสอบความถูกต้องเพื่อให้การตรวจสอบสามารถนำกลับมาใช้ในตัวจัดการคำสั่งอื่น ๆ 4 / …

6
อะไรคือเหตุผลที่ดีในการใช้งานส่วนติดต่ออย่างชัดเจนเพื่อจุดประสงค์ในการซ่อนสมาชิก
ระหว่างที่ฉันศึกษาเรื่องความซับซ้อนของ C # ฉันพบข้อความที่น่าสนใจเกี่ยวกับการใช้อินเทอร์เฟซที่ชัดเจน While this syntax is quite helpful when you need to resolve name clashes, you can use explicit interface implementation simply to hide more "advanced" members from the object level. ความแตกต่างระหว่างการอนุญาตให้ใช้object.method()หรือต้องการการหล่อของ((Interface)object).method()การทำให้งงงวยหมายถึงใจแข็งกับสายตาที่ไม่มีประสบการณ์ของฉัน ข้อความตั้งข้อสังเกตว่าสิ่งนี้จะซ่อนวิธีการจาก Intellisense ที่ระดับวัตถุ แต่ทำไมคุณต้องการทำเช่นนั้นหากไม่จำเป็นต้องหลีกเลี่ยงความขัดแย้งของชื่อ
11 c#  design  interfaces 

12
มีวิธีรองรับการรันแอปพลิเคชั่น. NET 4.0 บนเครื่อง Mac หรือไม่?
ตัวเลือกการสนับสนุนของ Microsoft สำหรับการใช้งานรหัส C # /. NET 4.0 บน Mac คืออะไรถ้ามี ใช่ฉันรู้เกี่ยวกับ Mono แต่เหนือสิ่งอื่นใดมันล่าช้า Microsoft และ Silverlight จะทำงานในเว็บเบราว์เซอร์เท่านั้น โซลูชันประเภท VMWare จะไม่ลดลงเช่นกัน มีคำตอบกึ่งเผด็จการว่าทำไม Microsoft เพียงแค่ไม่สนับสนุน. NET บนเครื่อง Mac? ดูเหมือนว่าพวกเขาจะสามารถ Silverlight และ / หรือซื้อ Mono ได้อย่างรวดเร็ว ไม่จำเป็นต้องมี Visual Studio ดั้งเดิม การคอมไพล์ข้ามและการดีบักแบบรีโมททำได้ดี เหตุผลก็คือที่ที่ฉันทำงานมีจำนวนไม่แน่นอนเกี่ยวกับอนาคตที่เพิ่มขึ้นซึ่งทำให้การพัฒนามากขึ้นที่จะต้องทำใน C ++ แทน C #; โครงการใหม่ล่าสุดกำลังถูกเลือกให้ใช้ C ++ ไม่มีใครต้องการบอกการจัดการ 18–24 …
11 c#  .net  mac  mono 

4
จำนวนคลาสในเนมสเปซ - กลิ่นรหัส?
ฉันมีไลบรารี C # ที่ใช้งานได้หลายอย่าง มีเนมสเปซอยู่สองสามอันในห้องสมุดและฉันเพิ่งสังเกตว่าหนึ่งเนมสเปซมีคลาสค่อนข้างน้อย ฉันมักจะหลีกเลี่ยงการมีคลาสมากเกินไปในเนมสเปซเดียวเนื่องจากการจัดหมวดหมู่และเนื่องจากจิตใต้สำนึกฉันคิดว่ามันดู "สวยกว่า" เพื่อมีลำดับชั้นของเนมสเปซลึกกว่า คำถามของฉันคือ: ไม่มีใครคิดว่ามันเป็น "กลิ่นรหัส" เมื่อ namespace มีหลายชั้น - แม้ว่าชั้นเรียนที่เกี่ยวข้องกับแต่ละอื่น ๆ ? คุณจะใช้ความพยายามอย่างมากในการค้นหาความแตกต่างในคลาสที่อนุญาตให้มีการจัดหมวดหมู่ย่อยหรือไม่?
11 c#  count  namespace 

8
อะไรคือวิธีที่ดีในการปรับสมดุลข้อยกเว้นที่ให้ข้อมูลและรหัสที่สะอาด
ด้วย SDK สาธารณะของเราเรามักจะต้องการส่งข้อความที่ให้ข้อมูลอย่างมากเกี่ยวกับสาเหตุที่เกิดข้อยกเว้น ตัวอย่างเช่น: if (interfaceInstance == null) { string errMsg = string.Format( "Construction of Action Argument: {0}, via the empty constructor worked, but type: {1} could not be cast to type {2}.", ParameterInfo.Name, ParameterInfo.ParameterType, typeof(IParameter) ); throw new InvalidOperationException(errMsg); } อย่างไรก็ตามสิ่งนี้มีแนวโน้มที่จะทำให้การไหลเวียนของรหัสแย่ลงเนื่องจากมีแนวโน้มที่จะให้ความสำคัญกับข้อความแสดงข้อผิดพลาดมากกว่าที่จะทำโค้ด เพื่อนร่วมงานเริ่ม refactoring ข้อยกเว้นบางอย่างให้กับสิ่งนี้: if (interfaceInstance == null) throw …

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