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

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

6
แนวทางปฏิบัติที่ดีที่สุดในการเขียนความคิดเห็นและเอกสาร
คำถามนี้ถูกโยกย้ายจาก Stack Overflow เพราะสามารถตอบได้ใน Software Engineering Stack Exchange อพยพ 7 ปีที่ผ่านมา การแสดงความคิดเห็นในปัจจุบันนั้นง่ายกว่าที่เคย ใน Java มีเทคนิคที่ดีในการเชื่อมความคิดเห็นไปยังคลาสและ Java IDEs สามารถสร้างเชลล์ความคิดเห็นให้คุณได้ดี ภาษาเช่น Clojure ช่วยให้คุณสามารถเพิ่มคำอธิบายของฟังก์ชันในโค้ดฟังก์ชันเองเป็นอาร์กิวเมนต์ อย่างไรก็ตามเรายังคงอยู่ในยุคที่มักมีความคิดเห็นล้าสมัยหรือไม่ดีเขียนโดยนักพัฒนาที่ดี - ฉันสนใจที่จะปรับปรุงความทนทานและประโยชน์ของความคิดเห็นของฉัน โดยเฉพาะฉันสนใจ Java / Clojure / Python ที่นี่ แต่คำตอบไม่จำเป็นต้องเฉพาะภาษา มีเทคนิคใด ๆ ที่เกิดขึ้นใหม่ที่ตรวจสอบความคิดเห็นและตรวจสอบความคิดเห็น "บอบบาง" โดยอัตโนมัติ (ตัวอย่างเช่นความคิดเห็นที่มีหมายเลขเวทย์มนตร์ประโยคที่ไม่สมบูรณ์ ฯลฯ ) หรือความคิดเห็นที่ไม่ถูกต้อง (ตัวอย่างเช่นการตรวจสอบตัวแปรที่สะกดผิด และที่สำคัญยิ่งกว่า: มี "นโยบายการแสดงความคิดเห็น" หรือกลยุทธ์ที่ยอมรับได้หรือไม่? มีคำแนะนำมากมายเกี่ยวกับวิธีการเขียนโค้ด - แต่จะมีวิธีการอย่างไรในการแสดงความคิดเห็น?

2
วิธีการโมฆะ Java เป็นโมฆะกลับนี้
คำถามนี้ถูกโยกย้ายจาก Stack Overflow เพราะสามารถตอบได้ใน Software Engineering Stack Exchange อพยพ 8 ปีที่ผ่านมา มีการสนทนาสองสามครั้งเกี่ยวกับ SO เกี่ยวกับเมธอด setter ที่ส่งคืนชนิด "this" และดูเหมือนว่า java 7 มีข้อเสนอของวิธีการโมฆะส่งกลับนี้ แต่ข้อเสนอนี้ไม่สามารถใช้กับคุณสมบัติของ Java 7 ได้ ฉันไม่พบว่าข้อเสนอนี้ถูกย้ายไปยังจาวา 8 หรือในอนาคตหรือถูกยกเลิกไปอย่างสมบูรณ์แล้ว ใช่ไหม? ลิงก์อ้างอิง - /programming/31584/design-java-and-returning-self-reference-in-setter-methods
20 java 

7
รักษาคลาสและวิธีการของฉันให้เล็กที่สุดเท่าที่จะทำได้?
ไม่กี่วันที่ผ่านมาฉันได้พูดคุยกับผู้สมัครระดับปริญญาเอกด้านวิศวกรรมซอฟต์แวร์และในบางครั้งเธอพูดกับฉัน: รักษาชั้นเรียนและวิธีการของคุณให้เล็กที่สุด และฉันสงสัยว่านี่เป็นวิธีปฏิบัติที่ดีเสมอ ฉันหมายถึงตัวอย่างมันคุ้มค่าที่จะมีชั้นเรียนที่มีเพียง 2 attibutes ในนั้น? ตัวอย่างเช่นในบางวิธีฉันต้องการคู่จำนวนเต็มเพื่อทำงานกับ ฉันควรเขียนคลาส "PairOfIntgers" หรือไม่ วิธีคิดแบบนี้ "แตก" โค้ดเป็นจำนวนมากเกินไปหรือไม่

10
การดิ้นรนเป็นโปรแกรมเมอร์ ต้องการคำแนะนำ [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจเรียกร้องให้มีการถกเถียงอภิปรายโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน7 ปีที่ผ่านมา ตอนนี้ฉันเป็นนักพัฒนามาหลายปีแล้ว ฉันค่อนข้างดีในสิ่งที่ฉันทำและสามารถ "ทำให้งานเสร็จ" แต่มีความแตกต่างระหว่าง "การทำงานให้เสร็จ" และ "การทำงานอย่างถูกต้อง" ลองใช้ตัวอย่าง เมื่อเร็ว ๆ นี้ฉันพัฒนาเว็บไซต์ตั้งแต่เริ่มต้น เว็บไซต์ทำงานได้ดีและฉันก็ไม่มีปัญหา เมื่อมองดูจากรหัสฉันคิดกับตัวเองว่าฉันทำได้ดีกว่านี้แล้ว ฉันสามารถลดแบบสอบถาม MySQL ของฉัน ฉันสามารถใช้ MVC ทำให้ขยายได้ง่ายขึ้น (ไม่จำเป็นต้องขยายในขณะนี้) ฉันตัดสินใจที่จะเขียนโครงการใหม่โดยใช้ CodeIgniter ฉันชอบกรอบ แต่จากนั้นฉันก็ถูกกีดกันเพราะการลดการสืบค้น MySQL ของฉันฉันต้องเรียนรู้การเข้าร่วมขั้นสูง และนี่คือปัญหา เมื่อใดก็ตามที่ฉันทำงานอย่างถูกต้องฉันอยู่ในวงล้อการเรียนรู้คง และหัวข้อต่าง ๆ เช่นการรวม MySQL ขั้นสูงต้องใช้เวลาในการเรียนรู้และจากนั้นใช้เวลาในการดำเนินการ ฉันไม่ทำงานให้ บริษัท ฉันทำทุกอย่างคนเดียว ดังนั้นฉันคิดว่าถ้าฉันทำงานเป็นนักพัฒนา PHP สำหรับ บริษัท จะมีทีมแยกต่างหากที่จัดการ SQL …

4
แผนการตั้งชื่อใดสำหรับไฟล์ C # ที่มีหลายคลาส
ต้องการปรับปรุงโพสต์นี้หรือไม่? ให้คำตอบโดยละเอียดสำหรับคำถามนี้รวมถึงการอ้างอิงและคำอธิบายว่าทำไมคำตอบของคุณถึงถูกต้อง คำตอบที่ไม่มีรายละเอียดเพียงพออาจแก้ไขหรือลบออกได้ คำถามนี้ถูกโยกย้ายจาก Stack Overflow เพราะสามารถตอบได้ใน Software Engineering Stack Exchange อพยพ 8 ปีที่ผ่านมา ในโครงการ C # เรามักจะจัดกลุ่มคลาสที่เล็กและสัมพันธ์อย่างแน่นหนาไว้ใน.csไฟล์เดียวกัน การปฏิบัตินี้ช่วยลดความไม่ลงรอยกันของการจัดการกับไฟล์จำนวนมากที่มีรหัสใกล้เคียงกับไม่มีรหัสจริง ยังมีวิธีปฏิบัติที่กำหนดขึ้นเพื่อตั้งชื่อไฟล์ที่มีหลายคลาสหรือไม่?
20 c#  .net 

3
การออกแบบที่ดีที่สุดสำหรับรูปแบบ Windows ที่จะแบ่งปันฟังก์ชั่นทั่วไป
ในอดีตที่ผ่านมาฉันเคยใช้การสืบทอดเพื่อให้สามารถขยายแบบฟอร์ม Windows ในแอปพลิเคชันของฉันได้ ถ้าแบบฟอร์มทั้งหมดของฉันมีตัวควบคุมงานศิลปะและฟังก์ชันการทำงานร่วมกันฉันจะสร้างแบบฟอร์มพื้นฐานที่ใช้ตัวควบคุมและฟังก์ชันการทำงานทั่วไปแล้วอนุญาตให้ตัวควบคุมอื่นสืบทอดจากแบบฟอร์มพื้นฐานนั้น อย่างไรก็ตามฉันพบปัญหาเล็กน้อยเกี่ยวกับการออกแบบ การควบคุมสามารถอยู่ในภาชนะหนึ่งครั้งเท่านั้นดังนั้นการควบคุมแบบคงที่ใด ๆ ที่คุณมีจะยุ่งยาก ตัวอย่างเช่นสมมติว่าคุณมีรูปแบบพื้นฐานที่เรียกว่า BaseForm ซึ่งมี TreeView ซึ่งคุณได้รับการป้องกันและคงที่เพื่อให้อินสแตนซ์อื่น ๆ (ที่ได้รับ) ของคลาสนี้ทั้งหมดสามารถแก้ไขและแสดง TreeView เดียวกันได้ สิ่งนี้จะไม่ทำงานสำหรับหลาย ๆ คลาสที่สืบทอดมาจาก BaseForm เนื่องจาก TreeView นั้นสามารถอยู่ในหนึ่งคอนเทนเนอร์ในแต่ละครั้งเท่านั้น มันน่าจะเป็นในรูปแบบสุดท้ายที่เริ่มต้น แม้ว่าทุกอินสแตนซ์สามารถแก้ไขการควบคุมได้ แต่จะแสดงในเวลาเดียวเท่านั้น แน่นอนว่ามีการแก้ไข แต่พวกมันน่าเกลียด (นี่ดูเหมือนจะเป็นการออกแบบที่แย่มากสำหรับฉันทำไมภาชนะบรรจุหลาย ๆ อันไม่สามารถเก็บพอยน์เตอร์ไปยังวัตถุเดียวกันได้อย่างไรก็ตามมันเป็นอย่างนั้น) สถานะระหว่างฟอร์มนั่นคือปุ่มสถานะข้อความป้ายกำกับ ฯลฯ ฉันต้องใช้ตัวแปรโกลบอลสำหรับและรีเซ็ตสถานะบนโหลด สิ่งนี้ไม่ได้รับการสนับสนุนโดยนักออกแบบของ Visual Studio เป็นอย่างดี มีการออกแบบที่ดีกว่า แต่ยังคงไว้ซึ่งการบำรุงรักษาที่ใช้ง่ายหรือไม่? หรือรูปแบบการสืบทอดยังคงเป็นวิธีที่ดีที่สุด? อัปเดต ฉันเปลี่ยนจากการดู MVC เป็น MVP เป็นรูปแบบการสังเกตการณ์เป็นรูปแบบกิจกรรม นี่คือสิ่งที่ฉันกำลังคิดอยู่ในขณะนี้โปรดวิจารณ์: …

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

8
วิธีการกระจายความรู้สำหรับการเขียนโปรแกรมทั่วไปในหมู่สมาชิกในทีม?
ฉันอยู่ในสภาพแวดล้อมที่ผู้คนเชื่อว่า: Java generics เป็นคุณสมบัติที่ใช้สำหรับการเขียนไลบรารีโดยเฉพาะและไม่ใช่การเข้ารหัสที่แท้จริง C ++ เป็นภาษาการเขียนโปรแกรม OO; templateเป็นคุณสมบัติเสริมและหลีกเลี่ยงได้ แม้ว่าคนเหล่านี้จะพึ่งพาไลบรารีที่เขียนโดยใช้โปรแกรมทั่วไป (เช่น STL, คอนเทนเนอร์ Java) ถ้าผมเขียนโค้ดที่ใช้templateหรือgenericsรหัสวิจารณ์มีแนวโน้มที่จะปฏิเสธมันและจะแสดงความคิดเห็นที่จะเขียนมันใน"เหมาะสม / เข้าใจ / สง่างาม"วิธี ความคิดดังกล่าวสามารถใช้งานได้จากโปรแกรมเมอร์ปกติถึงผู้จัดการส่วนใหญ่อาวุโส ไม่มีทางออกเพราะ 90% ของเวลาคนเหล่านี้มีการวิ่งเต้น เป็นวิธีที่ดีที่สุด ( ไม่ถูกตัดคอ ) ของการอธิบายพวกเขาวิธีการปฏิบัติของการเขียนโค้ดซึ่งประกอบด้วย OO และการเขียนโปรแกรมทั่วไปทั้งสองในเวลาเดียวกันคืออะไร?
20 java  c++  templates  generics 

5
ฉันจะเริ่มต้นการทดสอบในการต่อต้านการทดสอบได้อย่างไร [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว ฉันมีคำสารภาพที่ต้องทำ: การทดสอบอัตโนมัติอย่างเป็นทางการไม่ได้เป็นส่วนหนึ่งของพื้นฐานการเขียนโปรแกรมของฉัน ตอนนี้ฉันทำงานใน บริษัท ขนาดใหญ่ที่มีนักพัฒนาหลายคน (ส่วนใหญ่เป็นนักพัฒนาเว็บประเภทใดประเภทหนึ่ง) และเห็นได้ชัดว่าพวกเขาส่วนใหญ่ไม่ได้ทดสอบ * เช่นกัน (* ฉันจะไม่พูดต่อไปอย่างเป็นทางการโปรดสรุป) หากฉันรอรับการสนับสนุนจากองค์กรของฉันเพื่อเริ่มการทดสอบมันจะไม่เกิดขึ้น ถ้าฉันพยายามที่จะ "เปลี่ยนแปลงสิ่งต่าง ๆ จากภายใน" โดยการทดสอบการจัดการที่ฉันจะหมดแรงก่อนที่จะเกิดการเปลี่ยนแปลง ฉันต้องเริ่มการทดสอบตอนนี้ แต่ด้วย TDD และตระกูลของมันฉันจะจบลงด้วยรหัสการทดสอบมากมายพร้อมกับรหัสการผลิต ระบบควบคุมเวอร์ชันของเรา (รวมศูนย์ทั้งหมด) ไม่ได้จัดระเบียบไว้สำหรับการจัดเก็บรหัสทดสอบ ฉันจะต้องหาที่สำหรับทุกอย่างบนเวิร์กสเตชันของฉัน เป็นไปได้หรือไม่ที่จะเริ่มฝึกฝนการทดสอบซอฟต์แวร์ในวัฒนธรรมที่ไม่ได้ให้คุณค่าหรือจัดหาเครื่องมือสำหรับการทดสอบส่วนตัว? คุณใช้เทคนิคและเครื่องมือใดในการทดสอบเมื่อเครื่องมือและองค์กรอย่างเป็นทางการไม่มีที่สำหรับการทดสอบกรอบและระบบอัตโนมัติ
20 testing  tdd 

6
ปวดหัวโดยใช้การควบคุมเวอร์ชันแบบกระจายสำหรับทีมดั้งเดิม?
แม้ว่าฉันจะใช้และชอบ DVCS สำหรับโครงการส่วนบุคคลของฉันและสามารถเห็นได้อย่างชัดเจนว่ามันช่วยให้คุณจัดการการสนับสนุนโครงการของคุณจากผู้อื่นได้ง่ายขึ้น (เช่นสถานการณ์ Github ทั่วไปของคุณ) แต่ดูเหมือนว่าสำหรับทีม "ดั้งเดิม" อาจมีปัญหามากกว่า วิธีการรวมศูนย์ที่ใช้งานโดยโซลูชันเช่น TFS, Perforce เป็นต้น (โดย "ดั้งเดิม" ฉันหมายถึงทีมนักพัฒนาในสำนักงานที่ทำงานในโครงการหนึ่งที่ไม่มีใคร "เป็นเจ้าของ" โดยทุกคนอาจสัมผัสรหัสเดียวกัน) ปัญหาเหล่านี้สองสามอย่างที่ฉันเห็นล่วงหน้าด้วยตัวเอง แต่โปรดพูดสอดแทรกกับข้อควรพิจารณาอื่น ๆ ในระบบดั้งเดิมเมื่อคุณพยายามตรวจสอบการเปลี่ยนแปลงของคุณในเซิร์ฟเวอร์หากมีคนอื่นตรวจสอบก่อนหน้านี้ในการเปลี่ยนแปลงที่ขัดแย้งกันแล้วคุณจะถูกบังคับให้รวมก่อนที่คุณจะสามารถตรวจสอบของคุณในรุ่น DVCS นักพัฒนาแต่ละคนตรวจสอบ การเปลี่ยนแปลงในท้องถิ่นและในบางจุดผลักไปที่ repo อื่น ๆ repo นั้นมีสาขาของไฟล์นั้นที่ 2 คนเปลี่ยน ดูเหมือนว่าตอนนี้บางคนต้องรับผิดชอบในการจัดการกับสถานการณ์นั้น บุคคลที่ได้รับมอบหมายในทีมอาจไม่มีความรู้เพียงพอเกี่ยวกับ codebase ทั้งหมดเพื่อให้สามารถจัดการกับการรวมความขัดแย้งทั้งหมด ดังนั้นตอนนี้จึงมีการเพิ่มขั้นตอนพิเศษที่บางคนต้องเข้าหาหนึ่งในผู้พัฒนาบอกให้เขาดึงและทำการรวมแล้วกดอีกครั้ง (หรือคุณต้องสร้างโครงสร้างพื้นฐานที่ทำงานโดยอัตโนมัติ) นอกจากนี้เนื่องจาก DVCS มีแนวโน้มที่จะทำงานในพื้นที่ให้สะดวกจึงมีความเป็นไปได้ที่นักพัฒนาจะสามารถสะสมการเปลี่ยนแปลงบางอย่างใน repos ท้องถิ่นของพวกเขาก่อนที่จะผลักดันทำให้ความขัดแย้งดังกล่าวเป็นเรื่องธรรมดาและซับซ้อนมากขึ้น เห็นได้ชัดว่าถ้าทุกคนในทีมทำงานได้เฉพาะในส่วนต่าง ๆ ของรหัสนี่ไม่ใช่ปัญหา แต่ฉันอยากรู้เกี่ยวกับกรณีที่ทุกคนทำงานกับรหัสเดียวกัน ดูเหมือนว่ารูปแบบการรวมศูนย์บังคับให้เกิดความขัดแย้งที่จะได้รับการจัดการอย่างรวดเร็วและบ่อยครั้งลดความจำเป็นในการรวมตัวที่ใหญ่โตเจ็บปวดหรือมีใคร "ตำรวจ" เป็นตัวแทนหลัก …

5
การทดสอบหน่วยนำไปสู่การวางนัยทั่วไปก่อนกำหนด (โดยเฉพาะในบริบทของ C ++) หรือไม่
บันทึกเบื้องต้น ฉันจะไม่เข้าไปในความแตกต่างของชนิดที่แตกต่างกันของการทดสอบมีมีอยู่แล้วไม่กี่คำถามในเว็บไซต์เหล่านี้เกี่ยวกับการที่ ฉันจะใช้สิ่งที่มีและที่กล่าวว่า: การทดสอบหน่วยในแง่ของ "การทดสอบหน่วยแยกได้ที่เล็กที่สุดของแอปพลิเคชัน"ซึ่งคำถามนี้มาจริง ปัญหาการแยกตัว คืออะไรหน่วย isolatable ที่เล็กที่สุดของโปรแกรม อย่างที่ฉันเห็นมันขึ้นอยู่กับว่าคุณกำลังใช้ภาษาอะไร Micheal Feathers พูดถึงแนวคิดของรอยต่อ : [WEwLC, p31] ตะเข็บเป็นสถานที่ที่คุณสามารถเปลี่ยนพฤติกรรมในโปรแกรมของคุณโดยไม่ต้องแก้ไขในสถานที่นั้น และโดยไม่ต้องลงรายละเอียดฉันเข้าใจตะเข็บ - ในบริบทของการทดสอบหน่วย - เป็นสถานที่ในโปรแกรมที่ "การทดสอบ" ของคุณสามารถเชื่อมต่อกับ "หน่วย" ของคุณ ตัวอย่าง การทดสอบหน่วย - โดยเฉพาะอย่างยิ่งใน C ++ ต้องการรหัสจากการทดสอบเพื่อเพิ่มตะเข็บเพิ่มเติมที่จะถูกเรียกอย่างเคร่งครัดสำหรับปัญหาที่ระบุ ตัวอย่าง: การเพิ่มอินเทอร์เฟซเสมือนซึ่งการใช้งานที่ไม่ใช่เสมือนจะเพียงพอ การแยก - การสรุป (?) - คลาส (เล็ก) เพิ่มเติม "เพียงแค่" เพื่ออำนวยความสะดวกในการเพิ่มการทดสอบ การแยกโครงการที่ดำเนินการได้ครั้งเดียวออกเป็น libs ที่ "อิสระ" ดูเหมือน …

6
การคำนวณแบบคลาวด์เป็นวิธีการเช่าทรัพยากรหรือไม่
บริษัท ที่ฉันทำงานที่เพิ่งโฮสต์บริการเว็บใน Windows Azure และประกาศว่า ตอนนี้การค้านิตยสารออนไลน์พูดอะไรที่ไร้ความหมายมากมายเช่น "company X ย้ายไปที่คลาวด์", "บริษัท X วางเดสก์ท็อปสำหรับคลาวด์" ฯลฯ ดูเหมือนว่ามีวัสดุจำนวนมากอยู่ที่นั่น (เริ่มต้นด้วยWikipedia ) ที่มีความยาวมากและพูดคุยเกี่ยวกับ "บริการ" และ "ราคาเริ่มต้นต่ำ" และสิ่งอื่น ๆ มากมาย แต่ฉันอ่านทั้งหมดแล้วและไม่เห็นว่าพวกเขาเป็นอย่างไร อาจมีประโยชน์สำหรับคนธรรมดาในการวาดเส้นระหว่างบริการในคลาวด์และการแลกเปลี่ยนสแต็กที่เป็นบริการ แต่ทำงานบนเซิร์ฟเวอร์อิฐและปูนใน colocation ตอนนี้จากประสบการณ์ของฉันกับ Windows Azure ความแตกต่างที่แท้จริงมีดังต่อไปนี้ ด้วยคลาวด์เจ้าของบริการจะเช่าฮาร์ดแวร์แบนด์วิดท์เครือข่ายและสิทธิ์ในการใช้มิดเดิลแวร์ (Windows 2008 ที่ใช้ในบทบาท Azure เป็นต้น) ตามต้องการและยังมีความช่วยเหลือในการบำรุงรักษาบางอย่าง (เช่นถ้าคอมพิวเตอร์ที่มีบทบาทกำลังทำงานขัดข้องคอมพิวเตอร์เครื่องอื่น พบโดยอัตโนมัติและมีการปรับใช้บทบาทใหม่) หากไม่มีระบบคลาวด์เจ้าของบริการจะต้องจัดการกับทุกสิ่งด้วยตัวเอง นั่นจะเป็นความแตกต่างใช่มั้ย

9
มันเป็นการดีที่จะใช้ฟังก์ชั่นเพื่อรวมรหัสทั่วไปหรือไม่
ฉันพบปัญหานี้มากมาย ตัวอย่างเช่นฉันกำลังเขียนฟังก์ชั่นการอ่านและฟังก์ชั่นการเขียนและพวกเขาทั้งสองตรวจสอบว่าbufเป็นตัวชี้ NULL และmodeตัวแปรที่อยู่ภายในขอบเขตที่แน่นอน นี่คือการทำสำเนารหัส สิ่งนี้สามารถแก้ไขได้โดยการย้ายมันไปไว้ในฟังก์ชันของตัวเอง แต่ฉันควร นี่จะเป็นฟังก์ชั่นโลหิตจาง (ไม่ทำอะไรมาก), ค่อนข้างจะแปลเป็นภาษาท้องถิ่น (ไม่ใช่วัตถุประสงค์ทั่วไป) และไม่โดดเด่นในตัวมันเอง (ไม่สามารถหาสิ่งที่คุณต้องการได้เว้นแต่คุณจะเห็นว่ามันอยู่ที่ไหน ใช้) อีกทางเลือกหนึ่งคือการใช้มาโคร แต่ฉันต้องการพูดคุยเกี่ยวกับฟังก์ชั่นในโพสต์นี้ ดังนั้นคุณควรใช้ฟังก์ชั่นสำหรับสิ่งนี้หรือไม่? ข้อดีและข้อเสียคืออะไร?

2
ข้อยกเว้น 'จำนวนดี' ที่จะนำไปใช้กับห้องสมุดของฉันคืออะไร
ฉันสงสัยอยู่เสมอว่ามีกี่คลาสข้อยกเว้นที่แตกต่างกันที่ฉันควรนำไปใช้กับซอฟต์แวร์ของฉัน การพัฒนาเฉพาะของฉันมักจะเกี่ยวข้องกับ C ++ / C # / Java แต่ฉันเชื่อว่านี่เป็นคำถามสำหรับทุกภาษา ฉันต้องการที่จะเข้าใจว่าอะไรคือข้อยกเว้นที่แตกต่างกันจำนวนมากและชุมชนนักพัฒนาคาดหวังอะไรกับห้องสมุดที่ดี การแลกเปลี่ยนที่ฉันเห็นรวมถึง: คลาสยกเว้นเพิ่มเติมสามารถอนุญาตให้มีการจัดการข้อผิดพลาดในระดับดีมากสำหรับผู้ใช้ API (มีแนวโน้มที่จะกำหนดค่าผู้ใช้หรือข้อผิดพลาดข้อมูลหรือไม่พบไฟล์) คลาสข้อยกเว้นเพิ่มเติมอนุญาตให้ข้อมูลเฉพาะข้อผิดพลาดถูกฝังอยู่ในข้อยกเว้นไม่ใช่เพียงแค่ข้อความสตริงหรือรหัสข้อผิดพลาด คลาสยกเว้นเพิ่มเติมอาจหมายถึงการบำรุงรักษาโค้ดเพิ่มเติม คลาสที่มีข้อยกเว้นเพิ่มเติมอาจหมายความว่า API นั้นเข้าถึงผู้ใช้ได้น้อยกว่า สถานการณ์ที่ฉันต้องการเข้าใจการใช้งานข้อยกเว้นรวมถึง: ในช่วง 'การกำหนดค่า' ซึ่งอาจรวมถึงการโหลดไฟล์หรือการตั้งค่าพารามิเตอร์ ระหว่างเฟส 'การดำเนินการ' ที่ไลบรารีอาจกำลังทำงานและทำงานบางอย่างอาจอยู่ในเธรดอื่น รูปแบบอื่น ๆ ของการรายงานข้อผิดพลาดโดยไม่ใช้ข้อยกเว้นหรือข้อยกเว้นน้อยกว่า (เป็นการเปรียบเทียบ) อาจรวมถึง: ข้อยกเว้นน้อยกว่า แต่ฝังรหัสข้อผิดพลาดที่สามารถใช้เป็นการค้นหา การส่งคืนรหัสข้อผิดพลาดและการตั้งค่าสถานะโดยตรงจากฟังก์ชั่น (บางครั้งไม่สามารถทำได้จากกระทู้) ใช้งานเหตุการณ์หรือระบบติดต่อกลับเมื่อเกิดข้อผิดพลาด (หลีกเลี่ยงการคลายสแต็ก) ในฐานะนักพัฒนาคุณต้องการเห็นอะไร หากมีข้อยกเว้นหลายประการคุณสนใจที่จะจัดการข้อผิดพลาดแยกต่างหากหรือไม่? คุณมีการตั้งค่าสำหรับประเภทการจัดการข้อผิดพลาดขึ้นอยู่กับขั้นตอนการทำงานหรือไม่?

4
ความสัมพันธ์ระหว่างเอ็นจิน Business Rules และภาษาการเขียนโปรแกรมข้อ จำกัด
คำถามนี้ถูกโยกย้ายจาก Stack Overflow เพราะสามารถตอบได้ใน Software Engineering Stack Exchange อพยพ 8 ปีที่ผ่านมา ถ้ามีคนดูคู่มือ Drools หรือบางทีอาจจะเป็นกฎเก่า ๆ ภาพหนึ่งในมูลค่าเพิ่มของพวกเขาก็คือการไขปริศนาเช่น Puzzle Miss Manners (คู่มือของ Drools) ตอนนี้ปริศนาดังกล่าวได้รับการพัฒนาและแก้ไขตามธรรมชาติโดยใช้ภาษาโปรล็อกหรือภาษาโปรแกรมข้อ จำกัด ล่าสุดและสงสัยว่าทำไมทุกคนจะใช้ Drools เพื่อจุดประสงค์นี้ มูลค่าเพิ่มที่ Prolog และ CPL ให้ไว้ในกรณีนี้คือความสามารถในการกำหนดตัวไขปริศนาตามชุดของตรรกะและเพื่อค้นหาพื้นที่ของการแก้ปัญหาโดยอัตโนมัติ (โดย CPL มีประสิทธิภาพมากกว่าในแง่นี้) แต่มูลค่าเพิ่มของผลิตภัณฑ์เช่น Drools คืออะไร (ฉันหมายถึงนอกเหนือจากเสียงระฆังและเสียงนกหวีดแห่งการถ่ายเช่นไฟล์ Excel และแปลเป็นชุดของกฎ) โดยเฉพาะอย่างยิ่ง Prolog ใช้การค้นหาย้อนรอย CLP ใช้การค้นหาย้อนรอยด้วยการเผยแพร่ข้อ จำกัด และดังนั้นแทนที่จะค้นหาเพื่อพูดผลิตภัณฑ์คาร์ทีเซียนทั้งหมดของช่องว่างสำหรับตัวแปรแต่ละตัวจะตัดส่วนที่มีขนาดใหญ่ของพื้นที่ผลิตภัณฑ์นี้ สิ่งนี้ทำให้พวกเขามีประสิทธิภาพและมีประโยชน์ ทั้ง Prolog …

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