วิศวกรรมซอฟต์แวร์

ถาม - ตอบสำหรับมืออาชีพนักวิชาการและนักเรียนที่ทำงานในวงจรการพัฒนาระบบ

2
ธรรมเนียมในการใช้วงเล็บเหลี่ยมสำหรับองค์ประกอบอาร์เรย์พัฒนาอย่างไร
ภาษาการเขียนโปรแกรมจำนวนมากใช้ไวยากรณ์a[i]เพื่ออ้างถึงiองค์ประกอบ 'ของอาร์เรย์ลำดับหรือเวกเตอร์a- โดยเฉพาะ C และ Pascal (จากช่วงปลายทศวรรษ 1960 และต้น 1970) ทำสิ่งนี้ ในทางตรงกันข้ามภาษาก่อนหน้านี้บางอย่างเช่น Fortran (จากปี 1950) ไม่ใช้การประชุมนี้ นอกจากนี้ฉันศึกษาวิชาคณิตศาสตร์นิดหน่อยและนักคณิตศาสตร์ใช้วงเล็บเหลี่ยมสำหรับช่วงเวลาและตัวห้อยสำหรับการดีอาเรย์และเมทริกซ์การห้อย (หรือวงเล็บปกติถ้าอาร์เรย์คิดว่าเป็นฟังก์ชั่นจากจำนวนเต็มไม่เป็นลบ) ดังนั้นคำถามของฉันคือ: สี่เหลี่ยมจัตุรัสในบริบทนี้พัฒนาขึ้นมาจากไหน / อย่างไร / ในบริบทใดและใครเป็นใคร? หมายเหตุ: ไม่ใช่คำถามที่เกี่ยวกับการใช้วงเล็บปีกกาในซี
11 history  array  syntax 

1
OOP ECS กับ Pure ECS
ประการแรกฉันรู้ว่าคำถามนี้เชื่อมโยงกับหัวข้อของการพัฒนาเกม แต่ฉันได้ตัดสินใจที่จะถามที่นี่เพราะมันมีปัญหาทั่วไปเกี่ยวกับซอฟต์แวร์ที่ทำให้เกิดปัญหา ในช่วงเดือนที่ผ่านมาฉันได้อ่านมากมายเกี่ยวกับ Entity-Component-Systems และตอนนี้ค่อนข้างสะดวกสบายกับแนวคิด อย่างไรก็ตามมีแง่มุมหนึ่งที่ดูเหมือนจะหายไป 'นิยาม' ที่ชัดเจนและบทความต่าง ๆ ได้เสนอวิธีแก้ไขปัญหาที่แตกต่างกันอย่างสิ้นเชิง: นี่เป็นคำถามว่า ECS ควรทำลายการห่อหุ้มหรือไม่ กล่าวอีกนัยหนึ่งคือสไตล์ OOP ECS (ส่วนประกอบเป็นวัตถุที่มีทั้งสถานะและ behaivour ที่ห่อหุ้มข้อมูลที่เฉพาะเจาะจงกับพวกเขา) เทียบกับECS บริสุทธิ์ (ส่วนประกอบคือโครงสร้างสไตล์ c ที่มีข้อมูลสาธารณะและระบบที่มีฟังก์ชันการทำงานเท่านั้น) โปรดทราบว่าฉันกำลังพัฒนา Framework / API / Engine ใหม่ ดังนั้นเป้าหมายคือสามารถขยายได้อย่างง่ายดายโดยใครก็ตามที่ใช้งาน ซึ่งรวมถึงสิ่งต่าง ๆ เช่นการเพิ่มประเภทการแสดงผลหรือองค์ประกอบการชน ปัญหาเกี่ยวกับวิธีการ OOP ส่วนประกอบต้องเข้าถึงข้อมูลของส่วนประกอบอื่น ๆ เช่นวิธีการดึงขององค์ประกอบการแสดงผลจะต้องเข้าถึงตำแหน่งขององค์ประกอบการแปลง สิ่งนี้สร้างการพึ่งพาในโค้ด ส่วนประกอบต่างๆสามารถเป็นแบบโพลีมอร์ฟิคซึ่งจะนำเสนอความซับซ้อนเพิ่มเติม เช่นอาจมีสไปรต์การเรนเดอร์องค์ประกอบที่แทนที่เมธอดการวาดเสมือนของคอมโพเนนต์การเรนเดอร์ ปัญหาเกี่ยวกับวิธีการที่บริสุทธิ์ เนื่องจาก behaivour polymorphic (เช่นสำหรับการเรนเดอร์) ต้องถูกนำไปใช้ที่ไหนสักแห่งจึงเป็นเพียงการเอาต์ซอร์ซเข้าสู่ระบบ (เช่นระบบเรนเดอร์เรนเดอร์สร้างโหนดเรนเดอร์เรนเดอร์ที่สืบทอดโหนดเรนเดอร์และเพิ่มไปยังเอ็นจิ้นการเรนเดอร์) …

4
การทดสอบหน่วยกล่องดำคืออะไร
ฉันเพิ่งสอบครั้งสุดท้ายของฉันสำหรับหลักสูตรวิศวกรรมซอฟต์แวร์สำหรับโปรแกรมปริญญาโทของฉันและหนึ่งในคำถามในการสอบมีดังต่อไปนี้: Unit Testing is considered: a. White-box Testing b. Black-box Testing c. Either ในประสบการณ์การพัฒนาซอฟต์แวร์ 7 ปีของฉันการทดสอบหน่วยได้ใช้แนวทางกล่องสีขาวเสมอ ผู้ทดสอบมีความรู้เต็มรูปแบบเกี่ยวกับการใช้งานหน่วยการเรียนรู้ในขณะที่เขียนการทดสอบ การทดสอบกล่องดำมาในภายหลังในรูปแบบของการรวมระบบและการทดสอบการยอมรับ อย่างไรก็ตามคำตอบที่ถูกต้องในการสอบ (ตามอาจารย์) คือการทดสอบหน่วยสามารถเป็นการทดสอบกล่องสีขาวหรือกล่องดำ ฉันได้ทำการวิจัยมาแล้วและดูเหมือนว่าหลาย ๆ กรณี "การทดสอบหน่วยกล่องดำ" ถูกใช้เพื่ออธิบายวิธีการทดสอบครั้งแรกที่การทดสอบหน่วยถูกเขียนขึ้นก่อนรหัสคือ อย่างไรก็ตามในความคิดของฉันนี้ยังคงทดสอบกล่องสีขาว ในขณะที่การใช้งานยังไม่มีอยู่ใครก็ตามที่กำลังเขียนการทดสอบโดยทั่วไปมีความคิดที่ดีเกี่ยวกับการใช้งานซอร์สโค้ด ใครช่วยอธิบายให้ฉันฟังว่าการทดสอบหน่วยกล่องดำทำงานอย่างไร (ถ้ามันเป็นเรื่องจริง) และแตกต่างจากการทดสอบยูนิตกล่องขาวอย่างไร

3
DDD - รูปแบบโดเมนโลหิตจางเป็นปฏิปักษ์หรือไม่? เราใช้โมเดลโดเมนที่หลากหลายใช่ไหม [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน2 ปีที่ผ่านมา รูปแบบของโดเมนโลหิตจางถูกวิพากษ์วิจารณ์เมื่อนานมาแล้วโดยEvans และ Fowlerเนื่องจากเห็นได้ชัดว่ามันขัดกับหลักการเชิงวัตถุ ฯลฯ ชุมชน DDD นั้นสอดคล้องกับข้อความนี้อย่างชัดเจน อย่างไรก็ตามในช่วงไม่กี่ปีที่ผ่านมามีเสียงไม่เห็นด้วยที่อ้างว่ามันไม่ได้เป็นปฏิปักษ์เลยและเป็นตัวอย่างของการปฏิบัติตามหลักการของโซลิด ฉันใช้งาน Spring Framework มาหลายปีแล้ว ทุกโครงการในทุก บริษัท มีชั้นบริการที่มีตรรกะทางธุรกิจอยู่เสมอโดยใช้แหล่งเก็บข้อมูลที่ทำงานกับโมเดลโลหิตจาง (เอนทิตี JPA) นอกจากนี้ตัวอย่างส่วนใหญ่แม้แต่คนที่เป็นทางการจากพวก Spring ก็แสดงวิธีการทำงานนี้ คำถามของฉันคือ: โมเดลโดเมนโลหิตจางยังถือว่าเป็น antipattern หรือไม่? เราทุกคนทำสิ่งต่าง ๆ (เกี่ยวกับ DDD) ผิดหรือเปล่า? คุณไม่คิดว่าการมีโมเดล Rich Domain ละเมิดหลักการของ SOLID หรือไม่

3
เป็นวิธีปฏิบัติที่ดีในการใช้คำเตือนในรหัสของคุณหรือไม่?
ฉันใช้@SuppressWarnings("unchecked")และ@SuppressWarnings("null")ส่วนใหญ่วิธีการข้างต้นเพื่อให้รหัสรวบรวมโดยไม่มีคำเตือนใด ๆ แต่ฉันมีข้อสงสัยของฉัน พบคำถาม Stackoverflow นี้ Jon Skeet เขียนคำตอบที่ฉันพบว่าน่าสนใจ ตามที่เขาพูด บางครั้ง generics Java ก็ไม่ยอมให้คุณทำสิ่งที่คุณต้องการและคุณต้องบอกคอมไพเลอร์อย่างมีประสิทธิภาพว่าสิ่งที่คุณทำจริงๆจะถูกกฎหมายในเวลาดำเนินการ แต่ถ้ามีโอกาสที่ข้อยกเว้นจะถูกโยนทิ้งไปล่ะ? การระงับคำเตือนเป็นความคิดที่ไม่ดีใช่ไหม ฉันไม่ควรทราบเกี่ยวกับสถานที่ซึ่งปัญหาอาจปรากฏหรือไม่ นอกจากนี้จะเกิดอะไรขึ้นถ้ามีคนอื่นแก้ไขโค้ดของฉันในภายหลังและเพิ่มฟังก์ชันการทำงานที่น่าสงสัยโดยไม่ลบ SuppressWarnings จะสามารถหลีกเลี่ยงและ / หรือมีทางเลือกอื่นในการนี้ได้อย่างไร? ฉันควรจะใช้@SuppressWarnings("unchecked")และ@SuppressWarnings("null")? อัปเดต # 1 เท่าที่ประเภทที่ไม่ได้เลือกได้ปลดเปลื้องไปตามคำตอบนี้(ชี้ให้เห็นโดย @gnat ในความคิดเห็นด้านล่าง) การปราบปรามคำเตือนเหล่านี้เป็นสิ่งที่จำเป็น ห้องสมุด Java ที่ขาดไม่ได้หลายแห่งไม่เคยมีการอัพเดทเพื่อกำจัดความต้องการ typecasts ที่ไม่ปลอดภัย การระงับคำเตือนเหล่านั้นเป็นสิ่งที่จำเป็นเพื่อให้คำเตือนที่สำคัญอื่น ๆ จะได้รับการสังเกตและแก้ไข ในกรณีที่มีการระงับคำเตือนอื่น ๆ ยังคงอยู่ในพื้นที่สีเทาเล็กน้อย อัปเดต # 2 ตามเอกสาร Oracle (กล่าวถึงบางคำตอบด้านล่าง): โปรแกรมเมอร์ควรใช้คำอธิบายประกอบนี้กับองค์ประกอบที่ซ้อนกันมากที่สุดซึ่งมีประสิทธิภาพ หากคุณต้องการระงับคำเตือนในวิธีใดวิธีหนึ่งคุณควรใส่คำอธิบายประกอบวิธีนั้นแทนการเรียน

1
อนุสัญญาไปยังที่ที่จะประกาศ module.exports ในไฟล์ Javascript
มีวิธีการที่เราควรประกาศmodule.exportsไฟล์โมดูล Javascript / Node.js หรือไม่? มันควรจะอยู่ในจุดเริ่มต้นของไฟล์เช่น: module.exports = Foo; function Foo() { this.bar = 'bar'; } Foo.prototype.getBar = function() { return this.bar; } หรือควรอยู่ท้ายไฟล์: function Foo() { this.bar = 'bar'; } Foo.prototype.getBar = function() { return this.bar; } module.exports = Foo; ฉันรู้ว่าไม่มีความแตกต่างทางเทคนิค ตัวอย่างแรกเป็นที่ถูกต้องสมบูรณ์เพราะการประกาศยก ดังนั้นฉันจึงสงสัยว่ามีวิธีปฏิบัติที่ดีที่สุดบางประเภทหรือไม่

2
การครอบครองหลายครั้งหรือหลายอินสแตนซ์?
ฉันกำลังพยายามสร้างโซลูชัน SaaS ทางเว็บและฉันเข้าสู่ถนนที่ฉันไม่แน่ใจว่าจะใช้หลายผู้เช่าหรืออินสแตนซ์หลาย ฉันจะพยายามอธิบายสิ่งที่ฉันพยายามที่จะบรรลุและแต่ละวิธีข้อดีและข้อเสีย (ความเห็นของฉันตามสิ่งที่ฉันอ่าน) โปรดระบุคำแนะนำของคุณในกรณีที่ฉันพลาดอะไรในแนวทางเดียว แอปพลิเคชันที่ฉันพยายามสร้างคือดังที่ฉันกล่าวถึงโซลูชัน SaaS ที่ บริษัท สามารถสร้างบัญชีของตนเองและแต่ละบัญชี / บริษัท มีผู้ใช้ลูกค้าผลิตภัณฑ์บริการ ... ฯลฯ ผู้ใช้แต่ละคน; ใครเป็นพนักงาน บริษัท ที่เกี่ยวข้องกับหนึ่งบัญชี / บริษัท จะสามารถเข้าถึงลูกค้า บริษัท ผลิตภัณฑ์และบริการของตนเท่านั้น บริษัท ต่างๆอาจมีลูกค้าผลิตภัณฑ์และบริการไม่ จำกัด จำนวนดังนั้นแต่ละ บริษัท ควรมีศูนย์ข้อมูลของตัวเอง เพื่อที่ฉันตัดสินใจที่จะสร้างฐานข้อมูลที่ใช้ร่วมกัน (บันทึกข้อมูลประจำตัวของผู้ใช้ทั้งหมดเพื่อวัตถุประสงค์ในการเข้าสู่ระบบ) และหลายสคีมาฐานข้อมูลที่ใช้ร่วมกัน (ฐานข้อมูลต่อบัญชี / บริษัท ) โดยทั่วไปมีหลายครอบครอง จากนั้นมีคนแนะนำให้ใช้Multi Instanceแทนซึ่งแต่ละ บริษัท จะมีอินสแตนซ์ของแอปพลิเคชันของตัวเอง (เช่นรหัสห้องสมุดฐานข้อมูลกรอบงาน ... ฯลฯ ) แยกออกจาก บริษัท อื่นโดยสิ้นเชิง …

4
รูปแบบการคัดลอกคลาส?
ฉันกำลังทำงานเป็นนักพัฒนาเดี่ยวในโครงการปัจจุบันของฉัน ฉันสืบทอดโครงการจากผู้พัฒนารายอื่นซึ่งออกจาก บริษัท ไปแล้ว มันเป็นเว็บแอพพลิเคชั่นรูปแบบมุมมอง - คอนโทรลเลอร์ใน C # มันใช้ Entity Framework สำหรับการทำแผนที่วัตถุสัมพันธ์ และมีคลาสที่แตกต่างกันสองชุดสำหรับประเภทในรูปแบบโดเมน ชุดหนึ่งใช้สำหรับการโต้ตอบกับ ORM และอีกชุดหนึ่งใช้เป็นแบบจำลองในระบบ MVC ตัวอย่างเช่นอาจมีสองคลาสดังนี้: public class Order{ int ID{get;set;} String Customer{get;set;} DateTime DeliveryDate{get;set;} String Description{get;set;} } และ public class OrderModel{ String Customer{get;set;} DateTime DeliveryDate{get;set;} String Description{get;set;} public OrderModel( Order from){ this.Customer= from.Customer; // copy all …

5
ฟังก์ชั่นการส่งคืนสตริงสไตล์ที่ดี?
ในโปรแกรม C ของฉันฉันมักต้องการวิธีในการสร้างการแสดงสตริงของ ADT ของฉัน แม้ว่าฉันไม่จำเป็นต้องพิมพ์สตริงไปที่หน้าจอ แต่อย่างใดมันก็เรียบร้อยที่จะมีวิธีการดังกล่าวสำหรับการดีบั๊ก ฟังก์ชันประเภทนี้มักเกิดขึ้น char * mytype_to_string( const mytype_t *t ); ฉันรู้จริงว่าฉันมี (อย่างน้อย) สามตัวเลือกที่นี่เพื่อจัดการหน่วยความจำสำหรับสตริงที่จะกลับมา ทางเลือก 1: การจัดเก็บสตริงส่งคืนในอาร์เรย์ char แบบคงที่ในฟังก์ชัน ฉันไม่ต้องการคิดมากนักยกเว้นว่าสตริงนั้นจะถูกเขียนทับทุกครั้งที่โทร ซึ่งอาจเป็นปัญหาในบางโอกาส ทางเลือกที่ 2: จัดสรรสตริงบนฮีพด้วย malloc ภายในฟังก์ชัน เรียบร้อยจริงๆตั้งแต่ฉันไม่ต้องคิดขนาดของบัฟเฟอร์หรือการเขียนทับ อย่างไรก็ตามฉันต้องจำให้ฟรี () สตริงเมื่อทำแล้วฉันยังต้องกำหนดให้กับตัวแปรชั่วคราวเช่นที่ฉันสามารถฟรี แล้วการจัดสรรฮีปจะช้ากว่าการจัดสรรสแต็คมากจริงๆดังนั้นจึงเป็นคอขวดถ้าทำซ้ำในลูป ทางเลือก 3: ส่งผ่านตัวชี้ไปยังบัฟเฟอร์และให้ผู้เรียกจัดสรรบัฟเฟอร์นั้น ชอบ: char * mytype_to_string( const mytype_t *mt, char *buf, size_t buflen ); …

2
มันจะดีกว่าที่จะใช้สตริงหรือ int เพื่ออ้างอิง enums นอกส่วน java ของระบบ?
เรากำลังคุยกันเรื่องงานของฉันเกี่ยวกับการใช้ enums ใน Java ผู้ร่วมงานกำลังโต้เถียงว่าเมื่อใช้ enums บนฝั่งเซิร์ฟเวอร์เมื่อใดก็ตามที่ต้องการเราควรใช้สตริงเพื่ออ้างอิง (เช่นเมื่อส่งข้อมูลจาก JS ไปยังเซิร์ฟเวอร์หรือเมื่อจัดเก็บในฐานข้อมูล) ยืนยันว่านี่ชัดเจนกว่า สำหรับนักพัฒนาและยังเถียงว่ามันจะล้มเหลวอย่างรวดเร็วในกรณีที่พิมพ์ผิด ฉันมักจะใช้จำนวนเต็มเพื่อระบุ enums ในกรณีเหล่านี้เพราะมันจะเป็นตัวระบุที่ไม่เปลี่ยนรูปและจะไม่มีปัญหาเกี่ยวกับตัวพิมพ์และตัวพิมพ์เล็ก (ถึงแม้ว่า dev จะทำผิดพลาดในการใช้ค่า 2 แทน 1 เมื่อวิเคราะห์อย่างถี่ถ้วนเกี่ยวกับข้อโต้แย้งเหล่านี้ฉันจะบอกว่าการใช้สตริงนั้นดีกว่า แต่ฉันรู้สึกแปลก ๆ กับมัน (ราวกับว่ามันไม่ใช่วิธีการที่ดี) มีวิธีปฏิบัติที่ดีที่สุดเกี่ยวกับการสนทนานี้ที่สามารถแนะนำฉันได้ไหม แก้ไข: เมื่อใดก็ตามที่เป็นไปได้เราจะใช้ enum เองดังนั้นโค้ด Java ของเราจึงใช้ Enum โดย "อ้างอิงถึง enum" ฉันหมายถึง: การอ้างอิงค่าใน enum เมื่อแลกเปลี่ยนข้อมูลจาก JavaScript ไปยังเซิร์ฟเวอร์หรือจัดเก็บข้อมูลในฐานข้อมูล

1
ย้ายความหมายใน C ++ - ย้ายกลับของตัวแปรท้องถิ่น
ความเข้าใจของฉันคือว่าใน C ++ 11 เมื่อคุณส่งคืนตัวแปรโลคัลจากฟังก์ชันตามค่าคอมไพเลอร์ได้รับอนุญาตให้จัดการกับตัวแปรนั้นเป็นการอ้างอิงค่า r-value และ 'ย้าย' ออกจากฟังก์ชันเพื่อส่งคืน (ถ้า RVO / NRVO ไม่ได้เกิดขึ้นแทนแน่นอน) คำถามของฉันคือจะไม่ทำลายรหัสที่มีอยู่นี้หรือไม่ พิจารณารหัสต่อไปนี้: #include <iostream> #include <string> struct bar { bar(const std::string& str) : _str(str) {} bar(const bar&) = delete; bar(bar&& other) : _str(std::move(other._str)) {other._str = "Stolen";} void print() {std::cout << _str << std::endl;} std::string _str; }; …
11 c++  c++11 

1
รูปแบบการเขียนโปรแกรมปฏิกิริยา vs MVVM สำหรับจัดการการปรับปรุง GUI
ปฏิกิริยาการเขียนโปรแกรมและ MVVM เป็นสองวิธีที่สามารถแก้ไขปัญหาของการแยกชั้นโดเมนจาก UI MVVM ทำสิ่งนี้โดยกำหนด viewmodel ซึ่งเป็นโครงสร้างข้อมูลที่แม็พกับคอมโพเนนต์ UI UI แสดงข้อมูลและอาจอัปเดตเมื่อผู้ใช้เกิดขึ้น เฟรมเวิร์กที่ทำปฏิกิริยาจะกำหนดกราฟของสิ่งที่สังเกตได้ซึ่งแจ้งให้ UI ทราบว่ามีการเปลี่ยนแปลงข้อมูลบางส่วน เฟรมเวิร์กปฏิกิริยาได้รับการแบ่งปันความคิดทั้งในแพลตฟอร์มหลัก (ด้วย Rx ใน. net & java, react.js) และสถานที่ทดลองเพิ่มเติม (FRP in haskell) ฉันใช้ MVVM เป็นมุมเป็นหลักและฉันพบว่าอัตราส่วนความเรียบง่ายต่อการแสดงออกค่อนข้างน่าพอใจแม้ว่าฉันจะทำงานในโครงการขนาดเล็ก / ขนาดกลางเท่านั้น เฟรมเวิร์กที่ตอบสนองต่อการซื้อนักพัฒนาที่ mvvm ทำไม่ได้คืออะไร มีความแตกต่างจริงๆเหรอ? ตัวอย่างเช่น knockout.js ถูกโฆษณาเป็นเฟรมเวิร์ก mvvm แต่มีความรู้สึกโต้ตอบในอินเตอร์เฟส: this.firstName = ko.observable("John"); this.lastName = ko.observable("Smith"); this.fullName = ko.computed(function() { …
11 gui  mvvm  ui  reactive 

3
ใครคือบุคคลที่ 1 และ 2?
ดังนั้นนี่คือความอยากรู้อย่างแท้จริง ฉันได้ยินคำว่าบุคคลที่สามเหมือนใน "ห้องสมุดบุคคลที่สาม" สักพัก ฉันสงสัยว่าทำไมเราถึงพูดอันดับ 3 ไม่ใช่ 2nd (หรือ 4)? ใครคือบุคคลที่หนึ่งและสองและคำนี้มาจากไหน?

3
การพิมพ์ไปที่ console / stdout เป็นกลยุทธ์การดีบั๊กหรือไม่
สมมติว่าเรามีฟังก์ชั่นเช่นนี้: public void myStart() { for (int i = 0; i<10; i++) myFunction(i); } private int myFunction(int a) { a = foo(a); a = bar(a); return a; } private int foo(int a) { //do something here //something gnarly here //etc return aValue; } private int bar(int a) { // do …
11 debugging 

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.