คำถามติดแท็ก error-handling

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

4
เกิดข้อผิดพลาดในการยับยั้งการปฏิบัติที่ไม่ดีหรือไม่?
เกี่ยวกับคำถามดังนั้นผมถามนี่เกี่ยวกับรหัสบางอย่างผมก็ไม่แน่ใจเกี่ยวกับใครบางคนตอบว่า "BTW รหัสที่น่ากลัวนั่น. จะใช้ข้อผิดพลาดปราบปรามสัญลักษณ์ (@) เป็นจำนวนมาก" มีเหตุผลหรือไม่ว่าทำไมนี่ถึงเป็นการปฏิบัติที่ไม่ดี? ด้วยสิ่งที่ชอบ: $db=@new mysqli($db_info) or die('Database error'); มันช่วยให้ฉันแสดงข้อความข้อผิดพลาดที่กำหนดเอง โดยไม่มีการระงับข้อผิดพลาดจากนั้นจะยังคงแสดงข้อความ PHP ทั่วไปของ: คำเตือน : mysqli :: mysqli (): php_network_getaddresses: getaddrinfo ล้มเหลว: ไม่รู้จักโฮสต์ดังกล่าว ในบาง \ file \ pathบนบรรทัด 6 เช่นเดียวกับ 'ข้อผิดพลาดฐานข้อมูล' ข้อผิดพลาดในการระงับไม่ดีเสมอและถ้าเป็นเช่นนั้นสิ่งที่เฉพาะเจาะจงเกี่ยวกับข้างต้นจะไม่ดี? อัปเดต: รหัสจริงที่ฉันใช้คือ: or error('Datatabase error', 'An error occurred with the database' . (($debug_mode) ? …

3
แนะนำรูปแบบการออกแบบ / แนวทางในการเปิดเผย / ยอมรับ / กู้คืนจากข้อผิดพลาดของระบบการจัดการข้อยกเว้น (egs ใน Java, C ++, Perl, PHP)
คุณสามารถแนะนำรูปแบบการออกแบบ / แนวทางในการเปิดเผย / ยอมรับ / กู้คืนจากข้อผิดพลาดของระบบการจัดการข้อยกเว้น (Java, C ++, Perl, PHP) หรือไม่ จำเป็นต้องรายงานข้อผิดพลาดบางอย่าง ข้อผิดพลาดบางอย่างสามารถจัดการภายใน (โดยลองใหม่หรือไม่สำคัญ (สามารถเพิกเฉย) คุณจัดโครงสร้างรหัสเพื่อจับพวกเขาอย่างไร แต่จะต้องมีการบันทึกข้อผิดพลาดทั้งหมด มีแนวทางปฏิบัติที่ดีที่สุดอะไรบ้าง และสำหรับการจำลองพวกเขาเพื่อให้สามารถทดสอบส่วนประกอบที่ได้รับผลกระทบโดยสมบูรณ์ได้ คำถามเฉพาะที่ไม่ใช่ภาษาโปรแกรมทั่วไปที่ใช้กับภาษาการเขียนโปรแกรมสมัยใหม่หลายภาษา แต่ยินดีต้อนรับตัวอย่างภาพประกอบของรูปแบบวิธีการและปรัชญาใน Java, C ++, PHP และ Perl (ถามด้วยใน stackoverflow: /programming/7432596/recommend-a-design-pattern-approach-to-exposing-tolerating-recovering-from-system) แต่ฉันคิดว่ามันควรถามโปรแกรมเมอร์เช่นกัน ฉันคิดว่าโปรแกรมเมอร์ถาม - ตอบครอบคลุมถึงซอฟต์แวร์ / ปัญหาการเขียนโปรแกรมที่กว้างขึ้น

4
`trigger_error` เทียบกับ` Throw Exception` ในบริบทของวิธีการเวทย์มนตร์ของ PHP
ฉันมีการอภิปรายกับเพื่อนร่วมงานที่ผ่านการใช้งานที่ถูกต้อง (ถ้ามี) ของtrigger_errorในบริบทของวิธีมายากล ตอนแรกฉันคิดว่าtrigger_errorควรหลีกเลี่ยงยกเว้นกรณีนี้ สมมติว่าเรามีคลาสด้วยวิธีหนึ่ง foo() class A { public function foo() { echo 'bar'; } } ตอนนี้บอกว่าเราต้องการที่จะให้อินเตอร์เฟซเดียวกันแน่นอน แต่ใช้วิธีการเวทย์มนตร์เพื่อจับการเรียกวิธีการทั้งหมด class B { public function __call($method, $args) { switch (strtolower($method)) { case 'foo': echo 'bar'; break; } } } $a = new A; $b = new B; $a->foo(); //bar $b->foo(); //bar …

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

5
ควรให้บริการมีข้อยกเว้นหรือส่งคืนเมื่อไม่มีรายการที่ระบุไว้สำหรับการลบ
ฉันมีโค้ดบางส่วนที่สามารถแสดงเป็น: public class ItemService { public void DeleteItems(IEnumerable<Item> items) { // Save us from possible NullReferenceException below. if(items == null) return; foreach(var item in items) { // For the purpose of this example, lets say I have to iterate over them. // Go to database and delete them. } } …

2
ฉันจะจัดการกับความล้มเหลวของคนตัดไม้ได้อย่างไร
ในหลายแอปพลิเคชันของ บริษัท เราใช้ตัวบันทึกที่กำหนดเอง มันค่อนข้างแข็งแกร่งแม้ว่าเราอาจแทนที่ด้วยอะไรบางอย่างเช่น NLog ในอนาคต หนึ่งในหน้าที่ของคนตัดไม้คือการบันทึกข้อยกเว้นที่พบในแอปพลิเคชัน สิ่งหนึ่งที่ฉันกังวลอยู่เสมอคือการจัดการข้อยกเว้นภายในตัวบันทึกช่วยให้เกิดความล้มเหลวเงียบ นั่นคือถ้าบันทึกไม่ได้ถูกเขียนสำหรับข้อยกเว้นที่กำหนด (เนื่องจากข้อผิดพลาดในตัวบันทึก) ฉันจะจัดการกับมันอย่างไรและ (อย่างใด) บันทึกข้อยกเว้นในตัวบันทึกเอง ? สมมติว่าฟังก์ชัน WriteLog ส่งข้อยกเว้น ฉันควรลองเรียกใช้ฟังก์ชันบางครั้งหรือจนกว่าจะมีข้อผิดพลาดเกิดขึ้น? ฉันควรลองเขียนข้อยกเว้นที่โยนด้วยตัวบันทึก (ซึ่งน่าจะส่งผลให้เกิดข้อยกเว้นลงไปหมด ... ) ฉันโชคดีที่ไม่พบสถานการณ์นี้ยกเว้นตอนที่เราใช้งานตัวบันทึกที่กำหนดเองเป็นครั้งแรก ในทางกลับกันฉันไม่มีทางรู้ได้เลยว่าคนตัดไม้ล้มเหลวในการบันทึกข้อยกเว้นแอปพลิเคชัน (เนื่องจากข้อยกเว้นของตัวเอง) ฉันได้ลองค้นหาทางออนไลน์และในเว็บไซต์ SE บางแห่ง แต่มันก็ยังไม่เกิดผลดีนักเนื่องจากการโพสต์ทั้งหมดมีข้อผิดพลาดในตัวบันทึก (แต่ไม่ใช่ข้อยกเว้นที่เป็นไปได้และวิธีการบันทึก) หรือข้อยกเว้นภายนอกตัวบันทึก

3
Python - ยืนยันกับ if & return
ฉันกำลังเขียนสคริปต์ที่ทำบางสิ่งบางอย่างกับไฟล์ข้อความ (สิ่งที่ไม่เกี่ยวข้องกับคำถามของฉัน) ดังนั้นก่อนที่ฉันจะทำบางสิ่งกับไฟล์ฉันต้องการตรวจสอบว่ามีไฟล์อยู่หรือไม่ ฉันสามารถทำสิ่งนี้ได้โดยไม่มีปัญหา แต่ปัญหาคือความสวยงาม นี่คือรหัสของฉันใช้สิ่งเดียวกันในสองวิธีที่แตกต่างกัน def modify_file(filename): assert os.path.isfile(filename), 'file does NOT exist.' Traceback (most recent call last): File "clean_files.py", line 15, in <module> print(clean_file('tes3t.txt')) File "clean_files.py", line 8, in clean_file assert os.path.isfile(filename), 'file does NOT exist.' AssertionError: file does NOT exist. หรือ: def modify_file(filename): if not os.path.isfile(filename): return …

2
ความแตกต่างระหว่างความทนทานและการยอมรับข้อผิดพลาดคืออะไร?
ระบบ / โปรแกรม / อัลกอริทึมแบบกระจาย / ... มักถูกอธิบายด้วยเพรดิเคตที่ทนทานหรือข้อผิดพลาดที่ยอมรับได้ อะไรคือความแตกต่าง? รายละเอียด: เมื่อฉัน google สำหรับ + ​​strong + "fault-tolerant" ฉันจะได้รับสองครั้งเท่านั้นทั้งไม่ช่วยเหลือ เมื่อฉันไปหาคำศัพท์ฉันพบเอกสารจำนวนมากที่มีทั้งสองคำอยู่ในชื่อของพวกเขา น่าเสียดายที่พวกเขาไม่ได้กำหนดคำอย่างแม่นยำ :( แต่เนื่องจากพวกเขาใช้ทั้งสองคำดูเหมือนว่าทั้งสองไม่มีนัยใด ๆ

3
ข้อผิดพลาดหรือข้อผิดพลาดที่แตกต่างกันเป็นอาร์กิวเมนต์แรกหรือไม่
เรา (และห้องสนทนา JS SO) ได้พูดคุยกับ @rlemon เมื่อหลายวันก่อนเกี่ยวกับห้องสมุดLittle-XHRของเขาเกี่ยวกับการจัดการข้อผิดพลาด โดยทั่วไปเราต้องการตัดสินใจว่าควรใช้รูปแบบการจัดการข้อผิดพลาดใด: xhr.get({ // Some parameters, and then success: function(data) {}, failure: function(data) {} }) หรือ: xhr.get({ // Some parameters, and then callback: function(err, data) {} }) หนึ่งจะเหมือน jQuery มากขึ้นในขณะที่อื่น ๆ ที่เป็นเหมือนโหนด บางคนบอกว่ารูปแบบแรกทำให้คุณคิดมากขึ้นเกี่ยวกับการจัดการข้อผิดพลาด ฉันคิดว่าตรงกันข้ามเพราะคุณอาจลืมฟังก์ชั่นการโทรกลับอื่น ๆ ในขณะที่การโต้แย้งมักจะอยู่ในรูปแบบที่สอง ความเห็น / ข้อได้เปรียบ / ข้อเสียเปรียบเกี่ยวกับทั้งสองรูปแบบเหล่านี้หรือไม่

3
การจัดการข้อผิดพลาดใน PHP เมื่อใช้ MVC
ฉันใช้ Codeigniter บ่อยครั้งมาก แต่สิ่งหนึ่งที่ทำให้ฉันกังวลคือการจัดการข้อผิดพลาดและแสดงให้ผู้ใช้เห็น ฉันไม่เคยจัดการกับข้อผิดพลาดได้โดยที่ไม่เคยยุ่ง ความกังวลหลักของฉันคือเมื่อคืนข้อผิดพลาดให้กับผู้ใช้ เป็นการดีที่จะใช้ข้อยกเว้นและโยน / จับข้อยกเว้นแทนที่จะส่งกลับ 0 หรือ 1 จากฟังก์ชันแล้วใช้ if / else เพื่อจัดการข้อผิดพลาด ดังนั้นทำให้ง่ายต่อการแจ้งผู้ใช้เกี่ยวกับปัญหา ฉันมักจะหายไปจากข้อยกเว้น ครูสอนพิเศษ Java ของฉันที่มหาวิทยาลัยเมื่อหลายปีก่อนบอกฉันว่า "ข้อยกเว้นไม่ควรใช้ในรหัสการผลิตเป็นมากกว่าสำหรับการแก้ไขข้อบกพร่อง" ฉันรู้สึกว่าเขาโกหก แต่ตัวอย่างฉันมีรหัสที่เพิ่มผู้ใช้ไปยังฐานข้อมูล ในระหว่างกระบวนการมากกว่า 1 สิ่งอาจผิดพลาดได้เช่นปัญหาฐานข้อมูลรายการซ้ำปัญหาเซิร์ฟเวอร์ ฯลฯ เมื่อเกิดปัญหาขึ้นระหว่างการลงทะเบียนผู้ใช้จำเป็นต้องรู้ เป็นวิธีที่ดีที่สุดในการจัดการข้อผิดพลาดใน PHP โปรดทราบว่าฉันใช้กรอบ MVC

3
ข้อยกเว้นหรือรหัสข้อผิดพลาด
เรากำลังสร้างบริการบนเว็บ (SOAP, .Net) ซึ่งจะพูดคุยกับลูกค้าพื้นเมือง (ส่วนใหญ่) (windows, C ++) และเราสงสัยว่าวิธีที่ดีที่สุดในการสื่อสารข้อผิดพลาดกับลูกค้าคืออะไรเช่น SomethingBadHappened เช่นบริการเข้าสู่ระบบไม่พร้อมใช้งาน หรือสิ่งที่ต้องการผู้ใช้ไม่พบ) และไม่สามารถตัดสินใจระหว่างการส่งข้อยกเว้นไปยังไคลเอนต์หรือใช้รูปแบบรหัสข้อผิดพลาดบางอย่างเพื่อทำดังกล่าว สิ่งที่คุณต้องการในการจัดการด้านลูกค้า: ได้รับรหัสข้อผิดพลาดหรือจัดการข้อยกเว้น ServerFault ซึ่งมีสาเหตุของข้อผิดพลาดหรือไม่ 1) เหตุใดเราจึงคิดยกเว้น: เพราะจะทำให้รหัสฝั่งเซิร์ฟเวอร์มีความสม่ำเสมอมากกว่า 2) เหตุใดเราจึงคิดรหัสข้อผิดพลาด: เพราะเราคิดว่ามันสมเหตุสมผลกว่าจากมุมมองฝั่งไคลเอ็นต์ หาก 2) เป็นจริงเราอาจต้องการรหัสข้อผิดพลาดมากกว่าข้อยกเว้น? เป็นกรณีนี้หรือไม่ นอกจากนี้คำตอบจะเปลี่ยนไปหรือไม่ถ้าเราคุยกับลูกค้าที่จัดการแทนที่จะเป็นลูกค้าพื้นเมือง

4
รวมลิงก์ไปยังเอกสารที่เกี่ยวข้องในข้อความแสดงข้อผิดพลาดหรือไม่
เราสร้างห้องสมุดเชิงพาณิชย์และตัวอย่างรหัสที่ผู้พัฒนาภายนอกใช้ เรามีเอกสาร (ปิดให้บริการสำหรับผู้ใช้ที่ลงทะเบียน) ซึ่งอธิบายวิธีการใช้ห้องสมุดอย่างกว้างขวาง นักพัฒนาหลายคนเป็นผู้ใช้ครั้งแรกดังนั้นจึงพบข้อผิดพลาดพื้นฐานมากมาย เหมาะสมหรือไม่ที่จะรวมลิงค์ไปยังเอกสารในบันทึกข้อผิดพลาด? ข้อเสียที่เป็นไปได้คืออะไร? ฉันสามารถคาดการณ์บางอย่าง แต่มันเป็นไปได้ที่จะเอาชนะต่อไปนี้ URL เอกสารคู่มือล้าสมัย ข้อผิดพลาดเฉพาะรุ่นที่ไม่ปรากฏในเอกสารล่าสุด มีบางอย่างผิดปกติและเรากำลังเสียเวลาของผู้พัฒนาโดยส่งเขาไปยังเอกสารที่ไม่เกี่ยวข้อง ด้านล่างเป็นตัวอย่างของสิ่งที่ฉันหมายถึงมันเป็นความคิดที่ดีที่จะเพิ่มข้อความหนา? [ข้อผิดพลาด] ล้มเหลวในการดำเนินการเป้าหมาย org.apache.maven.plugins: maven-archetype-plugin: 1.2.3: สร้าง (default-cli) ในโครงการ standalone-pom: archetype ที่ต้องการไม่มีอยู่ (com.example.library ต้นแบบ: library-archetype-blank: 1.2.3.0) -> โปรดดูhttp://example.com/docs/setting-up-an-archetypeสำหรับข้อมูลเพิ่มเติมและการแก้ไขปัญหาที่เป็นไปได้

6
การออกแบบวิธีการที่เกี่ยวข้องกับฐานข้อมูลซึ่งผลตอบแทนที่ดีกว่า: จริง / เท็จหรือแถวได้รับผลกระทบ
ฉันมีวิธีการบางอย่างที่เปลี่ยนแปลงข้อมูลบางอย่างในฐานข้อมูล (แทรกอัปเดตและลบ) ออมฉันใช้การกลับมาแถวรับผลกระทบจากค่า int สำหรับประเภทของวิธีการเหล่านั้น ฉันควรกลับไปที่ "วิธีการของฉัน" เพื่อระบุสถานะความสำเร็จ / ความล้มเหลวของการดำเนินการอย่างไร พิจารณารหัสที่ส่งคืนint: A.1 public int myLowerLevelMethod(int id) { ... int affectedRows = myOrm.deleteById(id) ... return affectedRows; } การใช้งาน: A.2 public void myOtherMethod() { ... int affectedRows = myLowerLevelMethod(id) if(affectedRows > 0) { // Success } else { // Fail } } …

5
การตรวจสอบ vs ไม่ได้ตรวจสอบ vs ไม่มีข้อยกเว้น ... แนวปฏิบัติที่ดีที่สุดของความเชื่อที่ตรงกันข้าม
มีข้อกำหนดมากมายที่จำเป็นสำหรับระบบในการถ่ายทอดและจัดการข้อยกเว้นอย่างเหมาะสม นอกจากนี้ยังมีตัวเลือกมากมายสำหรับภาษาที่เลือกจากการนำแนวคิดไปใช้ ข้อกำหนดสำหรับการยกเว้น (ตามลำดับโดยเฉพาะ): เอกสาร : ภาษาควรมีค่าเฉลี่ยในการยกเว้นเอกสารที่ API สามารถใช้งานได้ โดยทั่วไปแล้วสื่อเอกสารนี้ควรใช้กับเครื่องเพื่อให้คอมไพเลอร์และ IDE สามารถให้การสนับสนุนแก่โปรแกรมเมอร์ ส่งสถานการณ์พิเศษ : อันนี้ชัดเจนเพื่อให้ฟังก์ชั่นในการถ่ายทอดสถานการณ์ที่ป้องกันไม่ให้การทำงานที่เรียกว่าดำเนินการตามที่คาดไว้ ในความคิดของฉันมีสามประเภทใหญ่ของสถานการณ์เช่นนี้: 2.1 ข้อบกพร่องในรหัสที่ทำให้ข้อมูลบางอย่างไม่ถูกต้อง 2.2 ปัญหาในการกำหนดค่าหรือทรัพยากรภายนอกอื่น ๆ 2.3 ทรัพยากรที่ไม่น่าเชื่อถืออย่างแท้จริง (เครือข่ายระบบไฟล์ฐานข้อมูลผู้ใช้ปลายทางเป็นต้น) สิ่งเหล่านี้เป็นเรื่องเล็ก ๆ น้อย ๆ เนื่องจากลักษณะที่ไม่น่าเชื่อถือของพวกเขาควรให้เราคาดหวังความล้มเหลวเป็นระยะ ๆ ในกรณีนี้สถานการณ์เหล่านี้จะถือว่ายอดเยี่ยมหรือไม่ ให้ข้อมูลที่เพียงพอสำหรับรหัสในการจัดการ : ข้อยกเว้นควรให้ข้อมูลที่เพียงพอแก่ผู้ใช้เพื่อให้สามารถตอบสนองและจัดการกับสถานการณ์ได้ ข้อมูลควรเพียงพอเช่นกันเมื่อบันทึกข้อยกเว้นนี้จะให้บริบทที่เพียงพอแก่โปรแกรมเมอร์เพื่อระบุและแยกคำแถลงที่กระทำผิดและจัดหาวิธีแก้ปัญหา ให้ความมั่นใจแก่โปรแกรมเมอร์เกี่ยวกับสถานะปัจจุบันของสถานะการเรียกใช้รหัสของเขา : ความสามารถในการจัดการข้อยกเว้นของระบบซอฟต์แวร์ควรมีเพียงพอที่จะให้การป้องกันที่จำเป็นขณะที่อยู่ห่างจากโปรแกรมเมอร์เพื่อให้เขาสามารถจดจ่อกับงานที่ มือ. เพื่อให้ครอบคลุมถึงวิธีการต่อไปนี้ถูกนำไปใช้ในภาษาต่างๆ: ข้อยกเว้นที่ตรวจสอบ มีวิธีที่ดีในการจัดทำเอกสารข้อยกเว้นและในทางทฤษฎีเมื่อดำเนินการอย่างถูกต้องควรให้ความมั่นใจอย่างเพียงพอว่าทุกอย่างดี อย่างไรก็ตามค่าใช้จ่ายดังกล่าวทำให้หลายคนรู้สึกว่ามีประสิทธิผลมากกว่าที่จะหลีกเลี่ยงโดยการกลืนข้อยกเว้นหรือโยนทิ้งเป็นข้อยกเว้นที่ไม่ได้ตรวจสอบอีกครั้ง เมื่อใช้ข้อยกเว้นที่ตรวจสอบอย่างไม่เหมาะสมก็จะมีประโยชน์ นอกจากนี้การตรวจสอบข้อยกเว้นทำให้ยากในการสร้าง API ที่เสถียรในเวลา การใช้งานระบบทั่วไปภายในโดเมนที่เฉพาะเจาะจงจะทำให้เกิดสถานการณ์ที่ไม่ธรรมดาซึ่งยากต่อการบำรุงรักษาโดยใช้ข้อยกเว้นที่ตรวจสอบ แต่เพียงผู้เดียว ข้อยกเว้นที่ไม่ได้ตรวจสอบ …

2
เราจำเป็นต้องตรวจสอบการใช้งานโมดูลทั้งหมดหรือเพียงแค่ข้อโต้แย้งของวิธีการสาธารณะ?
ฉันได้ยินมาว่าขอแนะนำให้ตรวจสอบข้อโต้แย้งของวิธีการสาธารณะ: หนึ่งควรตรวจสอบโมฆะถ้าเขาไม่คาดหวังโมฆะ? เมธอดควรตรวจสอบความถูกต้องของพารามิเตอร์หรือไม่ MSDN - CA1062: ตรวจสอบข้อโต้แย้งของวิธีสาธารณะ (ฉันมีพื้นหลัง. NET แต่คำถามไม่เฉพาะ C #) แรงจูงใจสามารถเข้าใจได้ หากโมดูลจะถูกใช้ในทางที่ผิดเราต้องการที่จะโยนข้อยกเว้นทันทีแทนที่จะเป็นพฤติกรรมที่คาดเดาไม่ได้ สิ่งที่รบกวนจิตใจฉันคือข้อโต้แย้งที่ผิดไม่ใช่ข้อผิดพลาดเดียวที่สามารถทำได้ในขณะที่ใช้โมดูล นี่คือสถานการณ์ข้อผิดพลาดบางประการที่เราจำเป็นต้องเพิ่มตรรกะการตรวจสอบหากเราทำตามคำแนะนำและไม่ต้องการการเพิ่มระดับข้อผิดพลาด: สายเรียกเข้า - อาร์กิวเมนต์ที่ไม่คาดคิด สายเรียกเข้า - โมดูลอยู่ในสถานะไม่ถูกต้อง โทรภายนอก - ส่งคืนผลลัพธ์ที่ไม่คาดคิด การโทรภายนอก - ผลข้างเคียงที่ไม่คาดคิด (การป้อนสองครั้งในโมดูลการโทร, การแยกสถานะการอ้างอิงอื่น ๆ ) ฉันได้ลองคำนึงถึงเงื่อนไขเหล่านี้และเขียนโมดูลง่าย ๆ ด้วยวิธีการหนึ่ง (ขออภัยไม่ใช่ -C # guys): public sealed class Room { private readonly IDoorFactory _doorFactory; private bool …

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