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

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

5
มันเป็นการปฏิบัติที่ไม่ถูกต้องหรือไม่ในการสร้างวัตถุใหม่โดยไม่เก็บไว้
คำถามนี้ถูกโยกย้ายจาก Stack Overflow เพราะสามารถตอบได้ใน Software Engineering Stack Exchange อพยพ 7 ปีที่ผ่านมา ฉันเคยเห็นวัตถุที่สร้างขึ้นในรหัส Java โดยไม่ต้องจัดเก็บการอ้างอิงถึงวัตถุ ตัวอย่างเช่นในปลั๊กอิน eclipse ฉันเห็น SWT Shell ที่สร้างขึ้นเช่น: new Shell(); วัตถุเชลล์ใหม่นี้ไม่ได้เก็บไว้ในตัวแปร แต่จะยังคงอ้างอิงจนกว่าจะมีการกำจัดหน้าต่างซึ่ง [ฉันเชื่อว่า?] จะเกิดขึ้นตามค่าเริ่มต้นเมื่อปิดหน้าต่าง มันเป็นการปฏิบัติที่ไม่ถูกต้องหรือไม่ในการสร้างวัตถุเช่นนี้ หรือว่าห้องสมุดออกแบบมาไม่ดี? ถ้าฉันไม่ต้องการการอ้างอิง แต่ต้องการเพียง "ผลข้างเคียง" ของวัตถุ? ฉันควรจะเก็บข้อมูลอ้างอิงไว้หรือไม่? UPDATE: ชื่นชมตัวอย่างข้างต้นของฉันไม่ดี ในขณะที่ฉันได้เห็นองค์ประกอบ UI ที่สร้างขึ้นเช่นนี้การสร้าง SWT Shell แบบนี้อาจไม่มีจุดหมายเพราะคุณจำเป็นต้องเรียกใช้วิธีการเปิดบนอินสแตนซ์เชลล์ มีตัวอย่างที่ดีขึ้นโดย aixเช่นต่อไปนี้จากการสอนพร้อมกัน Java : (new HelloThread()).start(); การฝึกฝนนี้มีให้เห็นในหลายบริบทดังนั้นคำถามยังคงอยู่ เป็นการปฏิบัติที่ดีหรือไม่?
23 java 

12
ฉันเพิ่งเริ่มงานกับการแย่งชิงกันและดูเหมือนจะมีบางอย่างขาดหายไป ฉันใหม่เพื่อการต่อสู้
รหัสเป็นระเบียบที่สมบูรณ์ของการรวมกันของ ASP / ASP.NET แบบคลาสสิก การทะเลาะกันของเราประกอบด้วยการปะทุใหญ่หรือการเพิ่มเติมเข้าไป เราทุกคนยุ่งเกินไปที่จะทำเช่นนั้นเพื่อเริ่มเขียนใหม่ดังนั้นฉันจึงสงสัย .. ส่วนใดใน Scrum ที่นักพัฒนาสามารถมีอำนาจที่จะพูดได้ว่าเพียงพอแล้วและเรียกร้องให้พวกเขาได้รับเวลาเพื่อเริ่มการเขียนครั้งใหญ่? เราดูเหมือนจะวนรอบไม่สิ้นสุดเพียงแค่ติดตั้งโค้ดเก่ากับ 'Stories' ดังนั้นสิ่งต่าง ๆ จึงถูกดำเนินการโดยบุคคลที่ไม่ใช่ช่างเทคนิคซึ่งดูเหมือนจะไม่มีความปรารถนาที่จะผลักดันให้มีการเขียนซ้ำเพราะพวกเขาไม่เข้าใจว่า codebase เลวร้ายเพียงใด .. ดังนั้นใครจะเป็นผู้รับผิดชอบในการเปลี่ยนแปลงครั้งใหญ่นี้เกิดขึ้น? นักพัฒนา ปริญญาโทการต่อสู้? กลยุทธ์ในปัจจุบันเป็นเพียงการหาเวลาและทำมันได้เองโดยไม่ต้องสูงกว่าอัพมีส่วนร่วมตั้งแต่พวกเขาส่วนใหญ่จะให้โทษสำหรับระเบียบปัจจุบันเราอยู่ใน .. แทรกพูดจาโผงผางเกี่ยวกับคนที่ไม่ใช่ทางด้านเทคนิคบอกคนทางเทคนิคว่าจะทำอะไรที่นี่<-->

8
มีเทคนิคหรือแบบทดสอบที่ดีสำหรับประเภทการตั้งชื่อหรือไม่
คำถามเปิดกว้างที่น่าอึดอัดใจ แต่มันเป็นปัญหาที่ฉันต้องเผชิญกับ: ซอฟต์แวร์ที่ง่ายต่อการบำรุงรักษาและใช้งานด้วยซอฟต์แวร์ที่ออกแบบมาอย่างดี การพยายามออกแบบให้ใช้งานง่ายหมายถึงการตั้งชื่อคอมโพเนนต์ของคุณในลักษณะที่นักพัฒนาซอฟต์แวร์รายต่อไปควรสามารถสรุปการทำงานของส่วนประกอบ นี่คือเหตุผลที่เราไม่ตั้งชื่อคลาสของเรา "Type1", "Type2" เป็นต้น เมื่อคุณกำลังสร้างแบบจำลองแนวคิดในโลกแห่งความเป็นจริง (เช่นลูกค้า) สิ่งนี้ง่ายเหมือนการตั้งชื่อประเภทของคุณหลังจากที่แนวคิดแบบโลกแห่งความจริงถูกจำลอง แต่เมื่อคุณสร้างสิ่งที่เป็นนามธรรมซึ่งเป็นระบบมากขึ้นมันง่ายมากที่จะหมดชื่อซึ่งง่ายต่อการอ่านและย่อยง่าย มันแย่ลง (สำหรับฉัน) เมื่อพยายามตั้งชื่อตระกูลประเภทโดยใช้ประเภทฐานหรือส่วนต่อประสานที่อธิบายถึงองค์ประกอบที่ต้องทำ แต่ไม่ใช่วิธีการทำงาน สิ่งนี้นำไปสู่แต่ละประเภทที่ได้มาโดยพยายามอธิบายถึงรสชาติของการนำไปใช้ (เช่นIDataConnectionและSqlConnectionใน. NET Framework) แต่คุณจะแสดงบางสิ่งที่ซับซ้อนเช่น "ทำงานโดยสะท้อนและมองหาชุดคุณลักษณะเฉพาะ" ได้อย่างไร จากนั้นเมื่อคุณเลือกชื่อสำหรับประเภทที่คุณคิดว่าอธิบายว่ามันกำลังพยายามทำอะไรเพื่อนร่วมงานของคุณถามว่า "WTF ทำสิ่งนี้ได้DomainSecurityMetadataProviderจริงหรือไม่ " มีเทคนิคที่ดีหรือไม่ในการเลือกชื่อที่มีความหมายดีสำหรับส่วนประกอบหรือจะสร้างกลุ่มขององค์ประกอบโดยไม่ต้องใช้ชื่อที่ยุ่งเหยิงหรือไม่? มีการทดสอบอย่างง่าย ๆ ที่ฉันสามารถนำไปใช้กับชื่อเพื่อให้เกิดความรู้สึกที่ดีขึ้นไม่ว่าจะเป็นชื่อ "ดี" หรือไม่
23 design  naming 

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

3
เหตุใด C ++ จึงเป็นที่โดดเด่นในการเขียนโปรแกรมการแข่งขันและการแข่งขัน? [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน6 ปีที่ผ่านมา ฉันเข้าใจว่า C ++ เป็นภาษาที่รวดเร็วมาก แต่ไม่ใช่ C เร็วหรือเร็วกว่าในบางกรณี? จากนั้นคุณอาจบอกว่า C ++ มี OOP แต่จำนวน OOP ที่คุณต้องการสำหรับปริศนาการเขียนโปรแกรมส่วนใหญ่นั้นไม่ใหญ่มากและในความคิดของฉัน C จะสามารถจัดการได้ นี่คือเหตุผลที่ฉันถามสิ่งนี้ : ฉันสนใจการเขียนโปรแกรมการแข่งขันและการแข่งขันและฉันคุ้นเคยกับการเขียนโปรแกรมใน C อย่างไรก็ตามฉันสังเกตเห็นว่าคนส่วนใหญ่ใช้ C ++ (เช่น 17 จาก 25 ผู้เข้ารอบสุดท้ายใน Google Code Jam 2011 ใช้มันในขณะที่ไม่มีใครใช้ C) ดังนั้นฉันสงสัยว่าฉันจะเสียเปรียบกับ C. นอกเหนือจากการวางแนววัตถุสิ่งที่ทำให้ภาษา C ++ เป็นภาษาที่เหมาะสมกว่าสำหรับการแข่งขันการเขียนโปรแกรม? คุณสมบัติของภาษาที่ฉันควรเรียนรู้และใช้เพื่อการแข่งขันที่ดีขึ้นคืออะไร สำหรับพื้นหลังฉันคิดว่าตัวเองค่อนข้างเชี่ยวชาญใน …
23 c++  c 

4
ทำไมเราต้องมี URIs สำหรับเนมสเปซ XML
ฉันกำลังพยายามหาสาเหตุที่เราต้องการ URIs สำหรับเนมสเปซ XML และฉันไม่สามารถหาจุดประสงค์ได้ ทุกคนสามารถเพิ่มสีสันให้ฉันเล็กน้อยแสดงการใช้ของพวกเขาในตัวอย่างที่เป็นรูปธรรม? แก้ไข: ตกลงเช่น: ฉันมีสิ่งนี้จาก w3schools <root xmlns:h="http://www.w3.org/TR/html4/" xmlns:f="http://www.w3schools.com/furniture"> <h:table> <h:tr> <h:td>Apples</h:td> <h:td>Bananas</h:td> </h:tr> </h:table> <f:table> <f:name>African Coffee Table</f:name> <f:width>80</f:width> <f:length>120</f:length> </f:table> </root> ดังนั้นสิ่งที่ควรhttp://www.w3schools.com/furnitureถือ
23 xml  namespace 

11
เป็นไปได้หรือไม่ที่จะเขียนซอฟต์แวร์ที่ไม่จำเป็นต้องแก้ไขอย่างต่อเนื่อง?
ฉันเขียนซอฟต์แวร์เป็นจำนวนมากในหลายภาษาและฉันยังได้เขียนฮาร์ดแวร์สำหรับใช้กับ FPGA โดยใช้ Verilog และ VHDL ฉันมักจะสนุกกับการเขียนฮาร์ดแวร์มากกว่าซอฟต์แวร์และฉันคิดว่าหนึ่งในเหตุผลหลักคือมันเป็นไปได้ที่จะเขียนฮาร์ดแวร์ที่ "เสร็จสิ้น" และไม่จำเป็นต้องแก้ไข: คุณกำหนดอินเทอร์เฟซและฟังก์ชันการทำงานเขียนตารางทดสอบ ใช้โมดูลฮาร์ดแวร์จากนั้นทดสอบ heck จากมันโดยใช้ตัวจำลอง จากนั้นคุณสามารถพึ่งพาโมดูลฮาร์ดแวร์นั้นเป็นแบบเอกสารสำเร็จรูปเพื่อสร้างสิ่งที่ใหญ่กว่าและดีกว่า: หากคุณต้องการเพิ่มคุณสมบัติให้กับโมดูลนั้นคุณจะสร้างโมดูลที่สองและเพิ่มฟังก์ชันการทำงานที่นั่น คุณไม่เคยทิ้งโมดูลดั้งเดิมเพราะมันใช้งานได้ดีและยังคงมีประโยชน์ หนึ่งในความผิดหวังหลักของฉันกับซอฟต์แวร์คือมันไม่เคย "ทำ" มีคุณสมบัติเพิ่มอยู่เสมอ บ่อยครั้งเมื่อเพิ่มคุณสมบัติมันจะแนะนำบั๊กที่อื่นซึ่งใช้งานได้ดีมาก่อน สิ่งนี้ไม่ได้เกิดขึ้นในฮาร์ดแวร์ตราบใดที่อินเทอร์เฟซไม่ได้ถูกละเมิด เพื่อความชัดเจนฉันไม่ได้เรียกร้องให้สร้างบางสิ่งบางอย่างในรุ่นเดียวกับรายการคุณลักษณะและมันจะคงอยู่ตลอดไป: ฉันชอบการทำซ้ำและเผยแพร่หลายครั้งเมื่อเวลาผ่านไปเพื่อเพิ่มคุณลักษณะใหม่ ฉันไม่ต้องการที่จะกระตุ้นรหัสทางด้านซ้ายและค้นหาข้อผิดพลาดทางด้านขวาและสิ่งนี้ดูเหมือนว่าจะเกิดขึ้นหลังจากการเพิ่มคุณสมบัติใหม่ เป็นไปได้ไหมที่จะเขียนซอฟต์แวร์ในลักษณะเดียวกันกับที่ "เขียน" ฮาร์ดแวร์อยู่? มีวิธีการพัฒนาซอฟต์แวร์ที่ดีที่อนุญาตให้มีความก้าวหน้าไปข้างหน้าเสมอและอนุญาตให้เพิ่มฟังก์ชันการทำงานใหม่โดยไม่จำเป็นต้องเขียนโค้ดที่มีอยู่และแนะนำบั๊กใหม่หรือไม่

11
เลือกความพยายามในการออกแบบรหัสหรือความเกียจคร้านในโลกธนาคาร
ฉันทำงานเป็นเวลาสองปีในวาณิชธนกิจที่ยิ่งใหญ่ ฉันทำโครงการด้านเทคนิคบางอย่างด้วยความปรารถนาที่จะสร้างโค้ดที่มีประสิทธิภาพสูงสุดโดยคำนึงถึงรูปแบบการออกแบบที่ดีที่ปรับได้หลักการ SOLID กฎหมายของ demeter และหลีกเลี่ยงรหัสที่ซ้ำกันทุกประเภท ... เมื่อส่งมอบในการผลิต => ศูนย์ข้อบกพร่องทั้งหมดเกิดขึ้นตามที่คาดไว้ แต่นักพัฒนาส่วนใหญ่มาหาฉันเพื่อที่จะแม่นยำว่ารหัสของฉันทั้งหมดนั้นซับซ้อนเกินไปสำหรับการอ่านเพื่อความเข้าใจ ฉันฟังตัวอย่างเช่น: "ทำบางอย่างถ้าและอินสแตนซ์ของลืมความหลากหลายเพื่อที่จะแก้ไขข้อบกพร่องการผลิตฉุกเฉินได้อย่างง่ายดาย" ฉันไม่ชอบตอบ ...... การรู้ว่านักพัฒนาเหล่านี้ไม่อยากรู้อยากเห็นเลยปฏิเสธความพยายามที่จะเข้าใจการออกแบบที่ดี (ตัวอย่างเช่น 90% ของผู้พัฒนาไม่รู้ว่าอะไรคือรูปแบบกลยุทธ์และสร้างรหัสขั้นตอนและไม่เคยออกแบบเพราะพวกเขาต้องการ ) ผู้จัดการโครงการของฉันบอกว่าฉันผิดจริง ๆ และเป็นนักอุดมคติในโลกของธนาคาร คุณจะแนะนำอะไรให้ฉัน ฉันควรรักษาความปรารถนาของรหัสที่ดีจริง ๆ หรือปรับให้ฉันเป็นนักพัฒนาส่วนใหญ่ที่ฉันทำซ้ำไม่น่าสนใจจริงๆโดยการออกแบบรหัสตามที่ฉันความงามทั้งหมดของงานนักพัฒนาของเรา หรือในทางตรงกันข้ามพวกเขาควรเรียนรู้หลักการ OO ขั้นพื้นฐานและแนวปฏิบัติที่ดีที่สุดเพื่อปรับตัวให้เข้ากับรหัสของฉันหรือไม่?

13
การทดสอบหน่วยทำงานอย่างไร
ฉันกำลังพยายามทำให้รหัสของฉันแข็งแกร่งขึ้นและฉันได้อ่านเกี่ยวกับการทดสอบหน่วย แต่ฉันพบว่ามันยากมากที่จะหาการใช้งานจริงที่มีประโยชน์ ตัวอย่างเช่นวิกิพีเดียตัวอย่าง : public class TestAdder { public void testSum() { Adder adder = new AdderImpl(); assert(adder.add(1, 1) == 2); assert(adder.add(1, 2) == 3); assert(adder.add(2, 2) == 4); assert(adder.add(0, 0) == 0); assert(adder.add(-1, -2) == -3); assert(adder.add(-1, 1) == 0); assert(adder.add(1234, 988) == 2222); } } ฉันรู้สึกว่าการทดสอบนี้ไร้ประโยชน์โดยสิ้นเชิงเนื่องจากคุณจำเป็นต้องคำนวณผลลัพธ์ที่ต้องการและทดสอบด้วยตนเองฉันรู้สึกว่าการทดสอบหน่วยที่ดีกว่าที่นี่จะเป็น assert(adder.add(a, b) …

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

4
รหัสเช่นนี้เป็น "ซากรถไฟ" (เป็นการละเมิด Law of Demeter) หรือไม่
เรียกดูรหัสบางส่วนที่ฉันเขียนฉันเจอโครงสร้างต่อไปนี้ซึ่งทำให้ฉันคิด เพียงแวบแรกดูเหมือนว่าสะอาดเพียงพอ ใช่ในรหัสจริงgetLocation()เมธอดมีชื่อเฉพาะที่มากกว่าเล็กน้อยซึ่งจะอธิบายตำแหน่งที่ได้รับได้ดีกว่า service.setLocation(this.configuration.getLocation().toString()); ในกรณีserviceนี้เป็นตัวแปรอินสแตนซ์ของชนิดที่รู้จักประกาศภายในวิธีการ this.configurationมาจากการถูกส่งผ่านไปในการสร้างคลาสและเป็นตัวอย่างของชั้นเรียนใช้อินเตอร์เฟซที่เฉพาะเจาะจง (ซึ่งเอกสารสาธารณะgetLocation()วิธีการ) ดังนั้นชนิดการคืนค่าของนิพจน์this.configuration.getLocation()จึงเป็นที่รู้จัก โดยเฉพาะในกรณีนี้ก็คือjava.net.URLในขณะที่ต้องการservice.setLocation() Stringเนื่องจากทั้งสองประเภทเป็นสตริงและ URL เข้ากันไม่ได้โดยตรงจึงจำเป็นต้องมีการแปลงบางประเภทเพื่อให้พอดีกับหมุดสี่เหลี่ยมในรูกลม อย่างไรก็ตามตามกฎหมายของ Demeter เป็นที่อ้างถึงในรหัสสะอาด , วิธีฉระดับCเท่านั้นที่ควรจะเรียกวิธีการในCวัตถุที่สร้างขึ้นโดยหรือผ่านอาร์กิวเมนต์ไปที่Fและวัตถุที่จัดขึ้นในตัวแปรเช่นของC อะไรก็ตามที่เกินกว่านั้น (สุดท้ายtoString()ในกรณีเฉพาะของฉันด้านบนเว้นแต่คุณจะพิจารณาวัตถุชั่วคราวที่สร้างขึ้นอันเป็นผลมาจากวิธีการภาวนาตัวเองซึ่งในกรณีนี้กฎหมายทั้งหมดดูเหมือนว่าจะเป็นข้อสงสัย) ไม่ได้รับอนุญาต มีเหตุผลที่ถูกต้องหรือไม่ทำไมการโทรในลักษณะดังกล่าวข้างต้นเนื่องจากมีข้อ จำกัด ในรายการควรจะหมดกำลังใจหรือไม่ได้รับอนุญาต? หรือฉันแค่เป็นคนเก็บไม้จิ้มฟันมากเกินไป? ถ้าผมจะใช้วิธีการURLToString()ซึ่งก็เรียกtoString()บนURLวัตถุ (เช่นที่ส่งกลับโดยgetLocation()) ผ่านไปเป็นพารามิเตอร์และผลตอบแทนผลที่ฉันสามารถห่อgetLocation()โทรในนั้นเพื่อให้บรรลุผลตรงเดียวกัน ได้อย่างมีประสิทธิภาพฉันจะย้ายการแปลงออกไปหนึ่งก้าว มันจะทำให้เป็นที่ยอมรับหรือไม่? ( ดูเหมือนว่าสำหรับฉันอย่างสังหรณ์ใจว่ามันไม่ควรสร้างความแตกต่างในทางใดทางหนึ่งเนื่องจากสิ่งที่ทำคือเคลื่อนย้ายสิ่งต่าง ๆ ไปรอบ ๆ อย่างไรก็ตามตามจดหมายของกฎหมายของ Demeter ตามที่อ้างถึงมันจะเป็นที่ยอมรับตั้งแต่ฉัน จะทำงานโดยตรงบนพารามิเตอร์ของฟังก์ชัน) มันจะสร้างความแตกต่างหรือไม่ถ้าสิ่งนี้เกี่ยวกับสิ่งที่แปลกใหม่กว่าการโทรtoString()แบบมาตรฐาน เมื่อตอบรับโปรดจำไว้ว่าการเปลี่ยนแปลงพฤติกรรมหรือ API ของประเภทที่serviceตัวแปรนั้นไม่สามารถนำไปใช้ได้จริง นอกจากนี้เพื่อเหตุผลของการโต้แย้งสมมติว่าการเปลี่ยนประเภทการส่งคืนของgetLocation()ยังทำไม่ได้

5
หนึ่งจะจัดการการอ้างอิงภายนอกในโครงการโอเพนซอร์สได้อย่างไร
เมื่อมีคนเขียนโปรเจ็กต์โอเพนซอร์ซและใช้ Google Code หรือ GitHub และต้องการใช้ไลบรารี่อย่าง Lua ควรทำอย่างไร ควรพึ่งพารวมอยู่ในที่เก็บ? ควรพึ่งพาสร้างจากภายในสคริปต์สร้างเดียวกันกับส่วนที่เหลือของโครงการหรือจากสคริปต์สร้างแยกต่างหาก ระบุว่าไลบรารีไม่จำเป็นต้องติดตั้งก่อนการรวบรวม

7
O ใน Big O คืออะไร
Big และ O ในสัญลักษณ์ Big O คืออะไร ฉันอ่านคำจำกัดความแล้วและไม่ได้บอกว่าOออกเสียงว่า 'oh' อย่างไร ตัวอย่างเช่น - ฉันเข้าใจว่าO (n) เป็นความซับซ้อนของอัลกอริทึมเชิงเส้นโดยที่ n อาจเป็นจำนวนการดำเนินการ แต่Oคืออะไร
23 complexity  big-o 

4
วิธีที่จะกระทำการ refactoring ในความคืบหน้า?
ดังนั้นฉันจึงมีโครงการขนาดใหญ่นี้ซึ่งอยู่ในกระบวนการของการปรับโครงสร้างใหม่โดยฉัน ฉันกำลังเปลี่ยนแปลงสิ่งต่าง ๆ มากมายดังนั้นจึงไม่มีโอกาสที่จะรวบรวมมันในไม่ช้า ฉันอาศัยอยู่ในสาขา git พิเศษที่ฉันตั้งชื่อcleanup(ซึ่งจะถูกรวมเข้าmasterในที่สุดแน่นอน) ปัญหาคือว่าฉัน / เรามีนโยบายที่จะไม่คอมไพล์โค้ดที่ไม่คอมไพล์ (โดยหลักแล้วมันควรจะทำงานได้ แต่มันต้องคอมไพล์และลิงค์อย่างน้อยที่สุด) ดังนั้นจนกว่าฉันจะเสร็จงานใหญ่นี้ฉันไม่สามารถกระทำอะไรได้ (สำหรับการตรวจสอบหรือการทำบัญชี) นี่ไม่ใช่วิธีที่ฉันชอบทำงาน (ฉันเชื่อว่าคนส่วนใหญ่กระทำอย่างน้อยวันละครั้งหรือมากกว่านั้น) คุณคิดอย่างไร? มีวิธีแก้ปัญหาที่ฉันมองเห็นหรือไม่? ฉันจะบอก git ให้คอมมิชชันรวมหรืออะไรก็ได้ในภายหลัง? ฉันสามารถมีชีวิตอยู่ได้ด้วยความมุ่งมั่นที่ไม่ได้รวบรวมตราบใดที่พวกเขาอยู่ในcleanupสาขา แก้ไข ในเรื่องของการผลัก / กระทำ: ฉันรู้ว่ามันแตกต่างกันมาก แต่ต่อมาจะมีการแก้ไขที่ไม่สมบูรณ์เมื่อฉันรวมเนื้อหาของฉันเข้าmasterด้วยกัน ดังนั้นหากคุณเรียกดูประวัติ (หรือgit bisect... ) การแก้ไข "ท้องถิ่น" จะสามารถเข้าถึงได้ทั่วโลก ดังนั้นการกระทำในพื้นที่และไม่ผลักดันไม่ใช่ทางออกที่ดีที่สุดเพราะจะทำให้คุณเดือดร้อนในภายหลัง (เมื่อเรื่องถูกปิดและลืมไปสักระยะหนึ่ง) ในระยะสั้น: ความมุ่งมั่นของท้องถิ่นจะถูกผลักในที่สุด ประวัติศาสตร์โลกไม่ควรแสดงคอมมิทที่ไม่ได้คอมไพล์
23 git  refactoring 

9
มอบหมาย vs อินเทอร์เฟซ - มีคำชี้แจงเพิ่มเติมอีกหรือไม่
หลังจากอ่านบทความ - เมื่อใดควรใช้ผู้ได้รับมอบหมายแทนการเชื่อมต่อ (คู่มือการเขียนโปรแกรม C #)ฉันต้องการความช่วยเหลือในการทำความเข้าใจจุดที่กำหนดด้านล่างซึ่งฉันพบว่าไม่ชัดเจน (สำหรับฉัน) ตัวอย่างหรือคำอธิบายโดยละเอียดสำหรับสิ่งเหล่านี้? ใช้ผู้รับมอบสิทธิ์เมื่อ: ใช้รูปแบบการออกแบบเหตุการณ์ มันเป็นที่พึงปรารถนาที่จะแค็ปซูลวิธีการคงที่ ต้องการองค์ประกอบที่ง่าย คลาสอาจต้องการการใช้งานมากกว่าหนึ่งวิธี ใช้อินเทอร์เฟซเมื่อ: มีกลุ่มของวิธีการที่เกี่ยวข้องที่อาจถูกเรียกว่าเป็น คลาสต้องการเพียงหนึ่งการใช้งานเมธอด คำถามของฉันคือ พวกเขาหมายถึงรูปแบบการออกแบบ eventing หรือไม่ วิธีการจัดองค์ประกอบจะง่ายถ้าใช้ผู้รับมอบสิทธิ์ หากมีกลุ่มของวิธีการที่เกี่ยวข้องที่อาจถูกเรียกใช้อินเทอร์เฟซ - มันมีประโยชน์อะไร? ถ้าคลาสต้องการเพียงหนึ่งการใช้งานของวิธีการใช้อินเตอร์เฟซมันเป็นธรรมในแง่ของผลประโยชน์?
23 c#  design  .net 

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