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

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

1
วิธีการตั้งค่าการทดสอบหน่วยใน Visual Studio 2010 [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัพเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Software Engineering Stack Exchange ปิดให้บริการใน4 ปีที่แล้ว ฉันกำลังทำโปรเจคใหญ่ครั้งแรกและฉันไม่มีประสบการณ์มากมายในการเขียนโปรแกรมมืออาชีพ ในขณะที่ทำการค้นคว้าสิ่งที่เกี่ยวข้องกับการเขียนโปรแกรมฉันมักจะเห็นการอ้างอิงถึงการทดสอบหน่วย แต่ฉันก็ยังไม่ชัดเจนเกี่ยวกับวิธีการตั้งค่าเหล่านั้นหรือแม้ว่ามันจะเป็นประโยชน์กับฉัน ใครสามารถอธิบายการทดสอบหน่วยให้ฉันและวิธีการตั้งค่าในโซลูชัน Visual Studio 2010 ที่มีหลายโครงการ เป็นสิ่งที่เกิดขึ้นในโซลูชันของโครงการของคุณหรือเป็นโซลูชันแยกต่างหาก และเป็นสิ่งที่คุณต้องการแนะนำให้กับทีมพัฒนาขนาดเล็กหรือเพียงแค่เสียเวลาในการตั้งค่า ตอนนี้ฉันเพิ่งเรียกใช้โปรแกรมทั้งหมดเพื่อทดสอบสิ่งที่ฉันกำลังทำงานอยู่ แต่บางครั้งฉันพบปัญหาที่ไม่สามารถดีบักได้ง่ายและมันจะมีประโยชน์ในการเรียกใช้ส่วนย่อยของรหัสที่อื่น ... บางครั้งฉันทำการติดตั้งอีกครั้ง โปรเจ็กต์ที่มีไลบรารี่บางส่วนที่อ้างอิงเพื่อทดสอบส่วนเล็ก ๆ ของโปรแกรม แต่ฉันรู้สึกว่าเสียเวลามากขึ้นในการตั้งค่าที่ใช้งานแล้วเพียงแค่เรียกใช้โปรแกรมทั้งหมดเนื่องจากการพึ่งพาทั้งหมดที่เกี่ยวข้อง

7
วัตถุธุรกิจ - ภาชนะบรรจุหรือฟังก์ชั่น?
นี่เป็นคำถามที่ฉันถามกลับไปซักพักแล้ว แต่มันอาจจะดีกว่าที่นี่ ... ที่ที่ฉันทำงานเราได้ย้อนกลับไปในเรื่องนี้หลายครั้งและกำลังมองหาการตรวจสุขภาพ นี่คือคำถาม: หาก Business Objects เป็น data container (เหมือนDTO ) หรือควรมีตรรกะที่สามารถใช้งานบางอย่างกับวัตถุนั้นได้ ตัวอย่าง - นำวัตถุลูกค้าอาจมีคุณสมบัติทั่วไปบางอย่าง (ชื่อรหัส ฯลฯ ) หากวัตถุลูกค้านั้นควรมีฟังก์ชั่น (บันทึก, คำนวณ, ฯลฯ )? การใช้เหตุผลหนึ่งบรรทัดบอกว่าแยกวัตถุออกจากฟังก์ชั่น (ผู้รับผิดชอบหลักเดียว) และวางฟังก์ชันการทำงานในเลเยอร์หรือตรรกะทางธุรกิจ อีกเหตุผลหนึ่งบอกว่าไม่ใช่ถ้าฉันมีวัตถุลูกค้าฉันแค่ต้องการโทรหาลูกค้าบันทึกและทำได้ด้วย ทำไมฉันต้องรู้เกี่ยวกับคลาสอื่นเพื่อบันทึกลูกค้าถ้าฉันใช้วัตถุ? โครงการสองโครงการสุดท้ายของเรามีวัตถุที่แยกออกจากฟังก์ชันการทำงาน แต่การอภิปรายได้รับการยกขึ้นอีกครั้งในโครงการใหม่ ซึ่งทำให้รู้สึกมากขึ้นและทำไม?

11
มาตรฐานการเข้ารหัส. NET / C # ที่แนะนำ? [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้จะเรียกร้องให้มีการอภิปรายโต้แย้งโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน6 ปีที่ผ่านมา ล็อคแล้ว คำถามและคำตอบนี้ถูกล็อคเนื่องจากคำถามอยู่นอกหัวข้อ แต่มีความสำคัญทางประวัติศาสตร์ ขณะนี้ไม่ยอมรับคำตอบหรือการโต้ตอบใหม่ คุณคิดว่ามาตรฐานการเข้ารหัสแบบใดที่มีความสำคัญต่อโครงการ. NET / C # นี่อาจเป็นอะไรก็ได้จากการรับมือกับการจัดฟันแบบโค้งงอและการเว้นวรรค หรืออาจเป็นคำถามพื้นฐานเพิ่มเติมเช่นเนมสเปซใน. NET Framework ที่ควรหลีกเลี่ยงแนวปฏิบัติที่เหมาะสมที่สุดกับไฟล์กำหนดค่าเป็นต้น พยายามหลีกเลี่ยงการสร้างโพสต์ที่เป็นเพียงข้อพิสูจน์ไปยังอีก ตัวอย่างเช่นจะเป็นการดีถ้ามีหนึ่งโพสต์ที่เน้นที่เครื่องหมายปีกกา เราไม่ต้องการสองรูปแบบเพื่อสนับสนุนรูปแบบหนึ่งกับอีกรูปแบบหนึ่ง ความคิดนี้ไม่ได้ลงคะแนนสำหรับมาตรฐานสัตว์เลี้ยงของคุณ แต่ควรพิจารณาสิ่งที่ควรคำนึงถึงเมื่อสร้างมาตรฐาน

11
แก้ไขข้อผิดพลาดขณะทำงานในส่วนต่าง ๆ ของรหัสฐาน
เรื่องนี้เกิดขึ้นกับฉันอย่างน้อยหนึ่งครั้ง ฉันกำลังทำงานกับบางส่วนของรหัสฐานและค้นหาข้อบกพร่องเล็ก ๆ ในส่วนที่แตกต่างกันและข้อบกพร่องหยุดฉันจากการทำสิ่งที่ฉันกำลังพยายามทำ การแก้ไขบั๊กอาจทำได้ง่ายเพียงแค่เปลี่ยนคำสั่งเดียว คุณทำอะไรในสถานการณ์นั้น แก้ไขข้อผิดพลาดและส่งมอบมันพร้อมกับงานปัจจุบันของคุณ บันทึกงานปัจจุบันของคุณที่อื่นแก้ไขข้อผิดพลาดในการกระทำที่แยกต่างหากจากนั้นทำงานต่อ [1] ดำเนินการต่อในสิ่งที่คุณควรจะทำส่งรหัส (แม้ว่าจะเป็น ทำลายการสร้าง ล้มเหลวในการทดสอบบางอย่าง) จากนั้นแก้ไขข้อผิดพลาด (และ การสร้าง ทำการทดสอบผ่าน) ในการส่งที่แยกต่างหาก [1] ในทางปฏิบัตินี่อาจหมายถึง: โคลนที่เก็บต้นฉบับที่อื่นแก้ไขข้อผิดพลาดส่ง / ผลักการเปลี่ยนแปลงดึงคอมมิชชันไปยังที่เก็บที่คุณกำลังทำงานผสานการเปลี่ยนแปลงและทำงานต่อ แก้ไข:ฉันเปลี่ยนหมายเลขสามเพื่อสะท้อนถึงสิ่งที่ฉันหมายถึงจริงๆ

8
ควรเก็บรหัสในการควบคุมเวอร์ชันอย่างไร
ควรเก็บรหัสในการควบคุมเวอร์ชันอย่างไร นักพัฒนาเป็นมิตร ? เพื่อให้โปรแกรมเมอร์สามารถใช้งานล่าสุดและสามารถเรียกใช้จากตัวแก้ไขของเขาได้อย่างรวดเร็วโดยไม่ต้องทำการเปลี่ยนแปลงมากมาย? (เช่นไฟล์กำหนดค่าที่ชี้ไปยัง dev DB..etc) หรือ มันควรจะเป็นมิตรกับการผลิตหรือไม่? แหล่งที่มาควรอยู่ในลักษณะที่ง่ายต่อการปรับใช้ในสภาพแวดล้อมการผลิตและเมื่อนักพัฒนาใช้เวลาล่าสุดเขาควรทำการเปลี่ยนแปลงตามความต้องการในการพัฒนาของเขา

3
สาขาวิชาวิศวกรรมซอฟต์แวร์และวิทยาการคอมพิวเตอร์ควรแยกจากกันหรือไม่? [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัพเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Software Engineering Stack Exchange ปิดให้บริการใน4 ปีที่แล้ว เป็นเวลาหลายทศวรรษที่การได้รับการยอมรับให้เป็นนักพัฒนาซอฟต์แวร์คือ "Compter Science" เรามีคำถามสองสาม ข้อเกี่ยวกับว่าระดับนั้นเป็นการเตรียมนักเรียนเพื่อพัฒนาซอฟต์แวร์หรือไม่ โรงเรียนบางแห่งในช่วง 8 ปีที่ผ่านมาเริ่มเสนอสาขาวิชาที่แตกต่างหลากหลายในการเขียนโปรแกรม การใช้หลักสูตรจากโรงเรียนของฉัน: วิทยาการคอมพิวเตอร์ซึ่งเริ่มต้นด้วยหลักสูตรการเขียนโปรแกรมอินโทรในปีแรกจากนั้นมุ่งเน้นไปที่วิทยาศาสตร์คอมพิวเตอร์เชิงทฤษฎีอัลกอริทึมและสิ่งต่าง ๆ ของระบบปฏิบัติการ ชั้นเรียนส่วนใหญ่เกี่ยวข้องกับโครงการขนาดเล็กและการบ้านหลายอย่างทำเดี่ยวหรือเป็นคู่ วิศวกรรมซอฟต์แวร์ซึ่งเริ่มต้นด้วยหลักสูตรการเขียนโปรแกรมอินโทรเดียวกันนั้นมีทฤษฎีเพียงไม่กี่คลาสและจากนั้นจะเข้าสู่การพัฒนาซอฟต์แวร์ (การทดสอบวิธีการกระบวนการตัวชี้วัดซอฟต์แวร์การรวบรวมความต้องการ) และการออกแบบซอฟต์แวร์ (การออกแบบระบบกระจายการออกแบบระบบข้อมูล การออกแบบตามเวลาจริง / การฝังการออกแบบระบบย่อย ฯลฯ ) โรงเรียนที่แตกต่างกันทำแตกต่างกันดังนั้นข้างต้นเป็นเพียงตัวอย่างในโลกแห่งความจริงที่ฉันคุ้นเคย สิ่งที่ฉันถามคือมีความจำเป็นสำหรับวิชาเอกที่แตกต่างกันในการเขียนโปรแกรมหรือไม่?

3
การดำเนินการที่ถูกต้องคืออะไรเมื่อค้นหาโครงการซอฟต์แวร์ฟรีที่โปรแกรมปฏิบัติการกำลังแพร่กระจายไวรัส
วันนี้ฉันพบโครงการ GPLed บน SourceForge ซึ่งไฟล์เอ็กซีคิวต์กำลังแพร่กระจายไวรัส ความจริงเรื่องนี้ได้รับการชี้ให้เห็นหลายครั้งในความคิดเห็นของโครงการและปฏิบัติการที่ติดเชื้อยังคงสามารถดาวน์โหลดได้ เห็นได้ชัดว่า executables ที่เก่ากว่าจะไม่ติดเชื้อดังนั้นตัวโครงการเองก็ดูเหมือนจะไม่ถูกสร้างขึ้นโดยมีจุดประสงค์ที่ประสงค์ร้าย ไม่มีวิธีที่ต้องการในการติดต่อนักพัฒนาและฟอรั่มสำหรับโครงการจะตาย ฉันควรทำอย่างไรดี?

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

8
หากมีการเรียนรู้ภาษาการเขียนโปรแกรมใหม่ในแต่ละปีรายการควรเป็นอย่างไร [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้จะเรียกร้องให้มีการอภิปรายโต้แย้งโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน7 ปีที่ผ่านมา ในบทที่หนึ่งของ"The Pragmatic Programmer"เป้าหมายการเรียนรู้แรกคือ: เรียนรู้ภาษาใหม่อย่างน้อยหนึ่งภาษาทุกปี ภาษาที่ต่างกันแก้ปัญหาเดียวกันด้วยวิธีที่ต่างกัน โดยการเรียนรู้วิธีการต่าง ๆ คุณสามารถช่วยขยายความคิดของคุณและหลีกเลี่ยงการทะเลาะในร่อง [ ... ] เพื่อให้บรรลุเป้าหมายนี้ในอาชีพการงานรายการภาษามีแนวโน้มที่จะค่อนข้างยาว (โดยเฉพาะถ้าคุณไม่ต้องการ "ความคืบหน้า" ในการจัดการ) เห็นได้ชัดว่าการศึกษาของโปรแกรมเมอร์ (หรือรูปแบบอะไรก็ตาม) จะช่วยให้คุณเริ่มต้นด้วยภาษาหลักที่มีประโยชน์ในเชิงพาณิชย์ (รายการปกติจากการโพสต์งาน: C, C ++, Ruby, Python, JavaScript, C #, Java, VB, .. .) นอกจากนี้โปรแกรมการเรียนรู้อย่างเป็นทางการหรือไม่เป็นทางการมีแนวโน้มที่จะครอบคลุมวิธีการทำงาน (ผ่านบางสิ่งบางอย่างเช่น Haskell, LISP หรือภาษาที่ได้จาก ML) แต่เมื่อเรียนรู้ส่วนย่อยที่สมเหตุสมผลของรายการแล้วสิ่งต่อไปคืออะไรและเพราะเหตุใด

6
มีใครใช้ Sproutcore บ้างไหม
มีใครใช้ Sproutcore สำหรับเว็บแอปพลิเคชันหรือไม่ ถ้าเป็นเช่นนั้นคุณช่วยเล่าประสบการณ์ของคุณให้ฉันได้หรือไม่? ขณะนี้ฉันกำลังพิจารณา แต่มีข้อกังวลเล็กน้อย ครั้งแรกเอกสารประกอบไม่ดี / ไม่สมบูรณ์และฉันกลัวว่าฉันจะใช้เวลามากมายในการค้นหาสิ่งต่าง ๆ หรือขุดผ่านซอร์สโค้ด นอกจากนี้ฉันลังเลที่จะใช้โครงการที่ค่อนข้างใหม่และอาจได้รับการเปลี่ยนแปลงที่สำคัญ ความคิดใด ๆ จากผู้ที่พัฒนาใน Sproutcore จะได้รับการชื่นชม! แก้ไข / PS: ใช่ผมเคยเห็นโพสต์นี้: /programming/370598/sproutcore-and-cappuccino อย่างไรก็ตามฉันสนใจคำอธิบายที่ยาวขึ้นเล็กน้อยของ Sproutcore จากคนที่ใช้มันสำหรับโครงการสำคัญ
19 javascript 

14
ประโยชน์ของการใช้ฐานข้อมูลนามธรรมโดย ORM คืออะไร [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้จะเรียกร้องให้มีการอภิปรายโต้แย้งโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน9 ปีที่ผ่านมา ฉันเริ่มใช้ ORM ตามกรอบที่ฉันเลือกและถึงแม้ว่าฉันชอบความคิดของเลเยอร์ที่เพิ่มขึ้นของสิ่งที่เป็นนามธรรมให้ ORM ฉันก็เริ่มที่จะตระหนักถึงสิ่งนี้หมายถึงอะไรจริงๆ นั่นหมายความว่าฉันไม่ได้ทำงานกับฐานข้อมูลของฉัน (mysql) อีกต่อไปและคุณสมบัติเฉพาะของ mysql ก็หมดไปนอกหน้าต่างเหมือนไม่มีอยู่จริง แนวคิดของ ORM คือพยายามที่จะช่วยฉันด้วยการทำให้ทุกอย่างไม่เชื่อเรื่องฐานข้อมูล ฟังดูดี แต่บ่อยครั้งมีเหตุผลที่ฉันเลือกระบบฐานข้อมูลที่เฉพาะเจาะจง แต่ด้วยการไปยังฐานข้อมูลผู้ไม่เชื่อเรื่องพระเจ้า ORM จะใช้ตัวหารร่วมที่ต่ำที่สุดซึ่งหมายความว่าฉันจะได้รับชุดฟีเจอร์ที่เล็กที่สุด (อันที่รองรับโดยฐานข้อมูลทั้งหมด) ถ้าฉันรู้ว่าในระยะยาวฉันจะไม่เปลี่ยนฐานข้อมูลพื้นฐาน ทำไมไม่เข้าถึงคุณลักษณะเฉพาะฐานข้อมูลด้วย

17
สูตรทางคณิตศาสตร์ที่ดีที่ควรทราบสำหรับการเขียนโปรแกรมมีอะไรบ้าง [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้จะเรียกร้องให้มีการอภิปรายโต้แย้งโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน7 ปีที่ผ่านมา ล็อคแล้ว คำถามและคำตอบนี้ถูกล็อคเนื่องจากคำถามอยู่นอกหัวข้อ แต่มีความสำคัญทางประวัติศาสตร์ ขณะนี้ไม่ยอมรับคำตอบหรือการโต้ตอบใหม่ มีสูตรคณิตศาสตร์อะไรบ้างที่คุณได้เรียนรู้ซึ่งช่วยให้คุณเขียนอัลกอริธึมที่ดีขึ้นและกลายเป็นโปรแกรมเมอร์ที่ดีขึ้น ตัวอย่าง: ฉันเรียนรู้เกี่ยวกับสูตรระยะทาง ecludian: sqrt((x1-x2)^2+(y1-y2)^2)ซึ่งช่วยให้ฉันเข้าใจวิธีการค้นหาเช่นวัตถุโดยเปรียบเทียบ 2 ปัจจัย

6
การบันทึกถัดจากการใช้งานเป็นการละเมิด SRP หรือไม่
เมื่อคิดถึงการพัฒนาซอฟต์แวร์ที่คล่องตัวและหลักการทั้งหมด (SRP, OCP, ... ) ฉันถามตัวเองว่าจะจัดการการบันทึกอย่างไร การบันทึกถัดจากการใช้งานเป็นการละเมิด SRP หรือไม่ ฉันจะบอกว่าyesเพราะการใช้งานควรจะสามารถทำงานได้โดยไม่ต้องเข้าสู่ระบบ ดังนั้นฉันจะใช้การบันทึกในวิธีที่ดีกว่าได้อย่างไร ฉันได้ตรวจสอบรูปแบบบางอย่างและได้ข้อสรุปว่าวิธีที่ดีที่สุดที่จะไม่ละเมิดหลักการในแบบที่ผู้ใช้กำหนด แต่เพื่อใช้รูปแบบใด ๆ ที่ทราบว่าละเมิดหลักการก็คือใช้รูปแบบมัณฑนากร สมมติว่าเรามีส่วนประกอบจำนวนมากโดยไม่มีการละเมิด SRP จากนั้นเราต้องการเพิ่มการบันทึก องค์ประกอบ A องค์ประกอบ B ใช้ A เราต้องการบันทึกสำหรับ A ดังนั้นเราจึงสร้างส่วนประกอบอีก D ที่ตกแต่งด้วย A ทั้งสองใช้อินเตอร์เฟส I อินเตอร์เฟส I component L (บันทึกองค์ประกอบของระบบ) องค์ประกอบ A ใช้ I component D ใช้ I, ตกแต่ง / ใช้ A, ใช้ …

7
ปัญหาเกี่ยวกับรูปแบบการเข้ารหัส: เราควรมีฟังก์ชั่นที่ใช้พารามิเตอร์แก้ไขหรือไม่แล้วกลับไปที่พารามิเตอร์นั้นหรือไม่
ฉันกำลังถกเถียงกับเพื่อนของฉันเล็กน้อยว่าการปฏิบัติทั้งสองนี้เป็นเพียงแค่สองด้านของเหรียญเดียวกันหรือไม่หรือว่าจะดีกว่าอย่างแท้จริง เรามีฟังก์ชั่นที่รับพารามิเตอร์เติมสมาชิกของมันแล้วส่งกลับ: Item predictPrice(Item item) ฉันเชื่อว่ามันทำงานบนวัตถุเดียวกับที่ส่งผ่านไม่มีจุดที่จะส่งคืนรายการ ในความเป็นจริงถ้ามีอะไรจากมุมมองของผู้โทรมันสับสนเรื่องที่คุณอาจคาดหวังให้กลับรายการใหม่ที่มันไม่ เขาอ้างว่ามันไม่สร้างความแตกต่างและมันก็ไม่สำคัญว่ามันจะสร้างไอเท็มใหม่และคืนสิ่งนั้น ฉันไม่เห็นด้วยอย่างยิ่งด้วยเหตุผลดังต่อไปนี้: หากคุณมีการอ้างอิงหลายรายการไปยังรายการที่ผ่าน (หรือพอยน์เตอร์หรืออะไรก็ตาม) มันจะจัดสรรวัตถุใหม่และส่งคืนเป็นสิ่งสำคัญเนื่องจากการอ้างอิงเหล่านั้นจะไม่ถูกต้อง ในภาษาที่ไม่มีการจัดการหน่วยความจำฟังก์ชั่นการจัดสรรอินสแตนซ์ใหม่อ้างว่าเป็นเจ้าของหน่วยความจำและดังนั้นเราจะต้องใช้วิธีการล้างข้อมูลที่เรียกว่าในบางจุด การจัดสรรฮีปอาจมีราคาแพงและดังนั้นจึงเป็นสิ่งสำคัญที่ฟังก์ชันที่เรียกใช้ทำเช่นนั้น ดังนั้นฉันเชื่อว่ามันเป็นสิ่งสำคัญมากที่จะสามารถดูผ่านลายเซ็นวิธีการไม่ว่าจะแก้ไขวัตถุหรือจัดสรรใหม่ ดังนั้นฉันเชื่อว่าเนื่องจากฟังก์ชั่นเพียงแค่ปรับเปลี่ยนวัตถุที่ส่งผ่านลายเซ็นควรจะ: void predictPrice(Item item) ในทุก codebase (ยอมรับกันว่า C และ C ++ codebases ไม่ใช่ภาษาจาวาซึ่งเป็นภาษาที่เรากำลังทำงานอยู่) ฉันได้ทำงานด้วยสไตล์ข้างต้นได้ยึดติดเป็นหลักและเก็บไว้โดยโปรแกรมเมอร์ที่มีประสบการณ์มากกว่า เขาอ้างว่าเนื่องจากขนาดตัวอย่างของโค๊ดเบสและเพื่อนร่วมงานของฉันนั้นเล็กมากจากโค๊ดและเพื่อนร่วมงานที่เป็นไปได้ทั้งหมดดังนั้นประสบการณ์ของฉันจึงไม่มีตัวบ่งชี้ที่แท้จริงว่ามีใครเหนือกว่า ดังนั้นความคิดใด ๆ

3
ฉันจะสำรวจต้นไม้โดยไม่ใช้การเรียกซ้ำได้อย่างไร
ฉันมีขนาดใหญ่มากในทรีโหนดหน่วยความจำและจำเป็นต้องสำรวจทรี การส่งค่าที่ส่งคืนของโหนดชายด์แต่ละโหนดไปยังโหนดพาเรนต์ สิ่งนี้จะต้องทำจนกว่าโหนดทั้งหมดจะมีบับเบิลข้อมูลจนถึงรูตโหนด การสำรวจเส้นทางทำงานเช่นนี้ private Data Execute(Node pNode) { Data[] values = new Data[pNode.Children.Count]; for(int i=0; i < pNode.Children.Count; i++) { values[i] = Execute(pNode.Children[i]); // recursive } return pNode.Process(values); } public void Start(Node pRoot) { Data result = Execute(pRoot); } ใช้งานได้ดี แต่ฉันกังวลว่า call call จะ จำกัด ขนาดของทรีโหนด วิธีการสามารถรหัสถูกเขียนใหม่เพื่อให้ไม่มีการโทร recursive จะExecuteทำ?
19 c#  optimization  trees 

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