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

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

4
ทางเลือกแทนมรดกหลายอย่างสำหรับสถาปัตยกรรมของฉัน (NPC ในเกมกลยุทธ์เรียลไทม์)?
การเข้ารหัสไม่ว่าหนักจริง ส่วนที่ยากคือการเขียนโค้ดที่อ่านเข้าใจง่าย ดังนั้นฉันต้องการได้นักพัฒนาที่ดีขึ้นและสร้างสถาปัตยกรรมที่มั่นคง ดังนั้นฉันต้องการสร้างสถาปัตยกรรมสำหรับNPCในวิดีโอเกม มันเป็นเกม Realtime Strategy เช่น Starcraft, Age of Empires, Command & Conquers ฯลฯ ดังนั้นฉันจะมี NPC หลายแบบ NPC สามารถมีความสามารถจำนวนมาก (วิธีการ) ของเหล่านี้: Build(), และFarm()Attack() ตัวอย่าง: คนทำงานสามารถBuild()และFarm() นักรบสามารถAttack() CitizenสามารถBuild(), Farm()และAttack() ชาวประมงสามารถFarm()และAttack() ฉันหวังว่าทุกอย่างจะชัดเจน ดังนั้นตอนนี้ฉันมีประเภท NPC และความสามารถของพวกเขา แต่ลองมาที่ด้านเทคนิค / โปรแกรมด้านเทคนิค สถาปัตยกรรมการเขียนโปรแกรมที่ดีสำหรับ NPC ชนิดต่าง ๆ ของฉันจะเป็นอย่างไร โอเคฉันสามารถมีคลาสพื้นฐานได้ จริงๆแล้วฉันคิดว่านี่เป็นวิธีที่ดีในการยึดมั่นในหลักการของDRY ดังนั้นฉันสามารถมีวิธีการเหมือนWalkTo(x,y)ในคลาสพื้นฐานของฉันเนื่องจาก NPC ทุกคนจะสามารถเคลื่อนไหวได้ แต่ตอนนี้มาถึงปัญหาที่แท้จริง ฉันจะใช้ความสามารถของฉันได้ที่ไหน …

2
วิธีจัดการกับการเติบโตของโครงการโอเพ่นซอร์ส
ฉันมีส่วนร่วมในการช่วยสนับสนุนโครงการโอเพนซอร์ซเป็นเวลาหนึ่งหรือสองปีและโครงการได้รับความนิยมอย่างมากตั้งแต่ฉันเริ่ม โปรแกรมดังกล่าวมีการดาวน์โหลดมากกว่า 100,000 ครั้งต่อสัปดาห์และมีผู้ใช้งานมากกว่า 60% ในสาขาหลักดังนั้นเราจึงดีใจอย่างยิ่งที่ผู้ใช้เพลิดเพลินกับการใช้มันมาก อย่างไรก็ตามปัญหาคือการพัฒนาและฐานสนับสนุนยังไม่เติบโตอย่างรวดเร็วและเราเริ่มมีอาการปวดมากขึ้น นักพัฒนาขนาดเล็กจำนวนหนึ่ง (โดยเฉพาะผู้พัฒนาหลัก) กำลังขยายตัวค่อนข้างผอมและอาสาสมัครฝ่ายสนับสนุนด้านเทคนิคเริ่มเริ่มไหม้แล้ว ป่านนี้มันเป็นเพียงแค่กลุ่ม dudes ที่แขวนอยู่บน IRC เขียนโปรแกรมนี้และช่วยเหลือผู้ใช้ ไม่มีองค์กร 501 (c) (3) หรือ LLC หรืออะไรทำนองนั้น ตอนนี้เราไม่มีตัวติดตามบั๊กที่เป็นทางการหรือฐานข้อมูลปัญหา (เรามีฟอรัมที่มีหมวดหมู่เฉพาะสำหรับรายงานบั๊ก) ซึ่งฉันยอมรับว่าเป็นสิ่งที่เราสามารถปรับปรุงเพื่อให้นักพัฒนาจำนวนมากขึ้นบนกระดาน แต่ฉันคิดว่าคำถามที่แท้จริงของฉันคือหนึ่งจะเปลี่ยนจากโครงการส่วนบุคคลขนาดเล็กเพื่อสิ่ง ... จริงหรือไม่ หนุ่มใหญ่อย่าง GIMP, FFmpeg, Blender และอื่น ๆ จัดการกับการเปลี่ยนแปลงนี้ได้อย่างไร? และเหนือสิ่งนี้มีวิธีเสนอค่าชดเชยกับโครงการ FOSS หรือไม่? ฉันคิดว่าการบริจาคช่วย แต่มันไปไกลแค่ไหน ... มันดูแปลกที่การทำมาหากินของซอฟต์แวร์ฟรี แต่ถ้าโปรแกรมกำลังจะดีขึ้นต่อไปฉันจะไม่เห็นว่าเราสามารถดำเนินการต่อไปได้โดยไม่ชดเชยผู้คน สำหรับการทำงานเต็มเวลา โดยพื้นฐานแล้วเรากำลังมีความเจ็บปวดเพิ่มขึ้นและรู้สึกว่า "ใหญ่เกินไปสำหรับผู้หญิงของเรา" เราสามารถทำอะไรได้บ้างเพื่อจัดการช่วงการเปลี่ยนภาพนี้และไม่เหนื่อยหน่ายกับการทำหลายอย่างพร้อมกัน?

2
เหตุใด F # Core จึงกำหนดประเภทอาร์เรย์ทั่วไป
ฉันเพิ่งสังเกตเห็นว่าเนมสเปซ FSharp.Core มีประเภทอาเรย์ทั่วไปที่มีขนาดสูงสุด 4 มิติคือCore [] <'T> , Core. [,] <' T> ฯลฯ C # และ VB ดูเหมือนจะทำได้ดี ด้วย System.Array - แม้ว่ามันจะไม่ชัดเจนสำหรับฉันว่าพวกเขาจัดการเพื่อสนับสนุนประเภทอาเรย์พิเศษที่พิมพ์อย่างรุนแรงเช่น int [], string [] ฉันเดาว่านี่เป็นคำถามสองข้อแล้ว: C # สนับสนุนประเภทอาเรย์พิเศษที่พิมพ์อย่างรุนแรงเช่น int [] โดยใช้ System.Array ที่ไม่ใช่แบบทั่วไปอย่างไร เนื่องจาก C # จัดการเพื่อทำสิ่งนี้เหตุใด F # จึงกำหนดประเภทอาร์เรย์ทั่วไป
11 c#  .net  f# 

4
“ OOP ซ่อนรัฐ” หมายความว่าอย่างไร [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน5 ปีที่ผ่านมา ในหนึ่งในเสียงต่อต้านโอโอพีหลายเรื่องที่ cat-v.orgฉันพบข้อความโดยโจอาร์มสตรองยกการคัดค้านหลายรูปแบบกับ OOP ซึ่งหนึ่งในนั้นคือ: คัดค้าน 4 - วัตถุมีสถานะส่วนตัว รัฐเป็นรากฐานของความชั่วร้ายทั้งหมด ในฟังก์ชั่นเฉพาะที่มีผลข้างเคียงควรหลีกเลี่ยง ในขณะที่สถานะในการเขียนโปรแกรมภาษาไม่พึงประสงค์ในรัฐโลกแห่งความจริงมากมาย ฉันสนใจสถานะบัญชีธนาคารของฉันเป็นอย่างมากและเมื่อฉันฝากหรือถอนเงินจากธนาคารฉันคาดว่าสถานะบัญชีธนาคารของฉันจะได้รับการอัปเดตอย่างถูกต้อง เมื่อพิจารณาจากสถานะที่มีอยู่ในโลกแห่งความเป็นจริงสิ่งอำนวยความสะดวกที่ควรใช้ภาษาโปรแกรมสำหรับการจัดการกับรัฐ? OOPL พูดว่า "ซ่อนสถานะจากโปรแกรมเมอร์" สถานะถูกซ่อนและมองเห็นได้ผ่านฟังก์ชั่นการเข้าถึงเท่านั้น ภาษาโปรแกรมทั่วไป (C, Pascal) บอกว่าการมองเห็นของตัวแปรสถานะถูกควบคุมโดยกฎขอบเขตของภาษา ภาษาที่ประกาศอย่างบริสุทธิ์บอกว่าไม่มีรัฐ สถานะโกลบอลของระบบนั้นจะถูกนำไปใช้กับทุกฟังก์ชั่น กลไกเช่น monads (สำหรับ FPLs) และ DCGs (ภาษาลอจิก) ถูกใช้เพื่อซ่อนสถานะจากโปรแกรมเมอร์ดังนั้นพวกเขาจึงสามารถเขียนโปรแกรม“ ราวกับว่ารัฐไม่สำคัญ” แต่มีการเข้าถึงสถานะของระบบได้อย่างเต็มที่หากจำเป็น ตัวเลือก“ ซ่อนสถานะจากโปรแกรมเมอร์” ที่เลือกโดย OOPL เป็นตัวเลือกที่แย่ที่สุด แทนที่จะเปิดเผยสถานะและพยายามหาวิธีที่จะลดความน่ารำคาญของรัฐพวกเขาก็ซ่อนมันออกไป นี่หมายถึงอะไรกันแน่? ฉันมีประสบการณ์น้อยในขั้นตอนหรือขั้นตอนที่น้อยมากซึ่งส่วนใหญ่เป็น OOP ดังนั้นอาจอธิบายได้ว่าฉันไม่คุ้นเคยกับเรื่องนี้อย่างไร …

4
การจัดทำดัชนีตัวชี้
ฉันกำลังอ่านหนังสือชื่อ "Numerical Recipes in C" ในหนังสือเล่มนี้ผู้เขียนให้รายละเอียดว่าอัลกอริทึมบางอย่างทำงานได้ดีกว่าโดยธรรมชาติถ้าเรามีดัชนีที่ขึ้นต้นด้วย 1 (ฉันไม่ได้ทำตามอาร์กิวเมนต์ทั้งหมดของเขาและนั่นไม่ใช่จุดของโพสต์นี้) แต่ C จะทำดัชนีอาร์เรย์ของมันเสมอ เพื่อหลีกเลี่ยงสิ่งนี้เขาแนะนำให้ลดทอนพอยน์เตอร์หลังจากการจัดสรรเช่น: float *a = malloc(size); a--; เขาบอกว่าสิ่งนี้จะให้ตัวชี้ที่มีดัชนีเริ่มต้นด้วย 1 อย่างมีประสิทธิภาพซึ่งจะทำให้คุณเป็นอิสระด้วย: free(a + 1); เท่าที่ฉันรู้ว่านี่เป็นพฤติกรรมที่ไม่ได้กำหนดโดยมาตรฐาน C เห็นได้ชัดว่านี่เป็นหนังสือที่มีชื่อเสียงอย่างมากในชุมชน HPC ดังนั้นฉันไม่ต้องการเพียงแค่เพิกเฉยต่อสิ่งที่เขาพูด แต่เพียงการลดตัวชี้นอกช่วงที่จัดสรรนั้น นี่เป็นพฤติกรรม "อนุญาต" ใน C หรือไม่ ฉันได้ทำการทดสอบโดยใช้ทั้ง gcc และ icc และผลลัพธ์ทั้งสองนั้นปรากฏขึ้นเพื่อระบุว่าฉันไม่ต้องกังวลอะไร แต่ฉันต้องการที่จะเป็นบวกอย่างแน่นอน
11 c  pointers 

1
ผู้จัดการการจ้างงานมีช่วงเวลาที่ยากลำบากในการยอมรับนักพัฒนาที่มีแอพส่วนบุคคลที่มีลักษณะ“ เหมือนธุรกิจ” แต่ไม่ใช่ผู้ประกอบการหรือไม่? [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน5 ปีที่ผ่านมา หลังจบการศึกษาโดยตรงจากมหาวิทยาลัยฉันตัดสินใจสร้างเว็บแอพของฉันเอง ( Ease My Day ) ในขณะที่รองานเป็นวิศวกรซอฟต์แวร์ เหตุผลในการสร้างแอปนี้: รับประสบการณ์ซอฟต์แวร์อย่างถ่องแท้ก่อนเข้าฉากงาน การจัดหาวิธีแก้ไขปัญหาทั่วไป ไม่นั่งทำอะไรขณะค้นหางาน แอปนี้ไม่ใช่การทดลองของผู้ประกอบการหรือธุรกิจที่จะขาย ยังคงตลอดการสัมภาษณ์ฉันสังเกตเห็นว่าในอัตรา 4 ของการสัมภาษณ์แต่ละ 5 ฉันผ่านแอปสับสนกับธุรกิจและฉันถูกถามคำถามเดียวกัน: ทำไมคุณถึงสร้างธุรกิจ ทำไมคุณต้องการหยุดแอพ คุณต้องการขายแอพไหม รู้ว่าฉันไม่ได้สร้างธุรกิจหรือสร้างรายได้จากแอปพลิเคชันนี้ ผู้สมัครที่มีความคิดริเริ่มและต้องการสร้างแอพของตัวเองที่ด้านข้างทำให้เกิดธงสีแดงบนเรดาร์ของผู้จัดการการจ้างงานหรือไม่? UPDATE ร้องขอโดย @Kate Gregory นี่คือวิธีที่ฉันอธิบายไว้ในประวัติย่อของฉัน: โครงการส่วนบุคคล: ผู้พัฒนาแอพพลิเคชั่น "Ease My Day" SaaS, Montreal, Qc Link: http://www.easemyday.com Facebook: http://www.facebook.com/EaseMyDay "Ease My Day" วัตถุประสงค์หลักของ …

2
ไฟล์วัตถุ (C) ถูกสร้างด้วยคอมไพเลอร์ที่เข้ากันได้กับไบนารีต่างกันหรือไม่?
ฉันเข้าใจว่าคอมไพเลอร์ C ++ ไม่สามารถทำงานร่วมกันได้ อย่างไรก็ตามฉันไม่พบสิ่งใดในหัวข้อนี้สำหรับ C โดยเฉพาะ ฉันรู้ว่ามาตรฐาน C ออกจากห้องมากมายสำหรับคอมไพเลอร์ที่จะใช้สิ่งต่าง ๆ แต่พวกเขาเห็นว่าเหมาะสม: ตัวอย่างเช่นขนาดและการจัดแนวของชนิดข้อมูลส่วนใหญ่ (ทั้งหมด?) คือการบันทึกที่ใช้งาน ดังนั้นคอมไพเลอร์สองตัว (หรือคอมไพเลอร์เดียวกันสองเวอร์ชั่น) อาจไม่เห็นด้วยกับรายละเอียดมากมาย ฉันถูกต้องโดยคิดว่าไม่มีการรับประกันว่าไฟล์ออบเจ็กต์สองไฟล์ที่คอมไพล์ด้วยคอมไพเลอร์ที่ต่างกันจะเชื่อมโยงอย่างถูกต้องจริงหรือ ตัวอย่างเช่นขนาดของพอยน์เตอร์อาจเป็น 32 บิตในหนึ่งอ็อบเจ็กต์ไฟล์และ 64 บิตในอีกอัน แต่ถ้าเป็นเช่นนั้นเหตุใดบางครั้ง C ไลบรารีจึงกระจายในรูปแบบที่คอมไพล์แล้ว? มีความคาดหวังหรือไม่ว่าฉันจะใช้คอมไพเลอร์แบบเดียวกับที่พวกเขาทำ (เช่น gcc) หรือมาตรฐานตามความเป็นจริงบางอย่างที่ใช้ในการรับรองความเข้ากันได้ของไบนารี และภาษาอื่น ๆ ที่มีส่วนต่อประสานกับภาษาต่างประเทศช่วยให้แน่ใจได้อย่างไรว่าสิ่งต่าง ๆ จะเข้าแถวอย่างถูกต้องเมื่อเชื่อมโยงกับไฟล์วัตถุ C?
11 c  compiler 

2
การทดสอบอัลกอริธึม (แบบกำหนดค่าได้) ที่มีหลายหรือยากที่จะพิสูจน์คำตอบที่ถูกต้อง
ผมอยากจะเขียนคำนำที่นี้คำถามจะคล้ายกัน แต่คำถามของฉันไม่ได้เกี่ยวข้องกับการสุ่มเพียง determinism จู้จี้จุกจิกดังนั้นคำตอบของ "ใช้เมล็ดพันธุ์ที่รู้จักกัน" ไม่ได้จริงๆใช้ ในทำนองเดียวกันนี้เป็นคำถามที่คล้ายกันอีกครั้ง แต่ผมไม่ได้คาดหวังว่าอัลกอริทึมที่เคยล้มเหลว - ผมก็ไม่ทราบว่าวิธีที่มันจะถูกต้อง คำถามนี้เกิดขึ้นขณะทดสอบอัลกอริธึมกราฟ แต่ไม่มีข้อ จำกัด สำหรับพวกเขา อัลกอริทึมบางอย่างเช่น A * สามารถมีคำตอบที่ถูกต้องได้หลายคำตอบ คุณอาจได้รับคำตอบอย่างใดอย่างหนึ่งซึ่งขึ้นอยู่กับการใช้งานจริงของคุณ สิ่งนี้สามารถทำให้พวกเขาทดสอบได้ยากเพราะคุณไม่รู้ว่ามันกำลังคายแบบไหนก่อนและใช้เวลานานมากในการคำนวณคำตอบด้วยมือ ในกรณีเฉพาะของฉันฉันได้รับมันโดยการปรับเปลี่ยน Floyd-Warshall เพื่อคายเส้นทางที่สั้นที่สุดเท่าที่จะทำได้และใช้เวลาทดสอบมือ มันมีประโยชน์ในการเป็นคุณสมบัติที่ดีในสิทธิของตนเอง จากนั้นฉันสามารถทดสอบฟังก์ชั่นอื่น ๆ ในแง่ของเส้นทางที่ถูกต้องที่ทราบจาก FW (หากเส้นทางที่ถูกส่งคืนเป็นเส้นทางใดเส้นทางหนึ่งที่ส่งคืนโดย FW สำหรับคู่เริ่มต้น / สิ้นสุดนั้นถูกต้อง) แน่นอนว่าใช้งานได้กับกราฟที่มีความหนาแน่นสูงเท่านั้นเนื่องจาก FW ทำงานอย่างไร แต่ก็ยังดีอยู่ อย่างไรก็ตามอาจไม่สามารถใช้ได้กับอัลกอริทึมทั้งหมดที่มีคุณสมบัตินี้ จนถึงตอนนี้คำตอบที่ดีที่สุดที่ฉันพบคือการทดสอบลักษณะของคำตอบที่ถูกต้องมากกว่าคำตอบที่ถูกต้อง หากต้องการย้อนกลับไปยังอัลกอริธึมพา ธ ที่สั้นที่สุดคุณสามารถตรวจสอบค่าใช้จ่ายของเส้นทางที่ส่งคืนเทียบกับต้นทุนที่ถูกต้องที่ทราบและตรวจสอบให้แน่ใจว่าเส้นทางนั้นถูกต้อง งานนี้ แต่ก็สามารถใช้ความเสี่ยงของการไม่ตรวจสอบทุกอย่างอย่างถูกต้องตามเกณฑ์ที่มากขึ้นสำหรับความถูกต้องมีโดยเฉพาะอย่างยิ่งถ้าการตรวจสอบเป็นตัวเองที่ซับซ้อน (เช่นในขณะที่ขั้นตอนวิธีการที่ถูกต้องมีอยู่การตรวจสอบขั้นต่ำต้นไม้ทอดเป็นปัญหาหนักที่รู้จักกัน; อาจจะหนักกว่า การสร้าง MST เอง) ซึ่งในกรณีนี้คุณต้องทดสอบรหัสการทดสอบของคุณอย่างกว้างขวาง …

2
IOC เวลารวบรวม
มีใครเริ่มโครงการที่จะทำ IOC ในเวลารวบรวม (อาจจะใช้ Roslyn หรือ Linq MethodInfo ปล่อย)? ประสบการณ์ของฉันกับคอนเทนเนอร์ของ IOC นั้นยอดเยี่ยมมากโดยมีปัญหาเล็ก ๆ น้อย ๆ คอนเทนเนอร์ IOC จำนวนมากเริ่มทำงานช้าลงเนื่องจากตรรกะการแก้ปัญหาส่วนใหญ่เกิดขึ้นที่นี่ บ่อยครั้งที่ยากที่จะตรวจสอบให้แน่ใจว่าการแก้ปัญหาเป็นไปได้เนื่องจากการรวบรวมไม่ทำให้แน่ใจได้ว่าตัวสร้างสามารถเรียกได้อีกต่อไป บ่อยครั้งที่คอนเทนเนอร์ของ IOC เพิ่มโอเวอร์เฮดขนาดเล็กให้กับรันไทม์ (บางอันไม่ได้เล็กแม้แต่บางอันที่เริ่มทำงานเร็วขึ้นอย่างรวดเร็ว) สำหรับฉันแล้วดูเหมือนว่าทางออกที่ดีที่สุดคือการเพิ่มขั้นตอนการคอมไพล์ให้กับ build chain ที่เพิ่มคลาส Factory แทน IOC มีใครทำแบบนี้มาก่อนหรือไม่ ถ้าไม่ทำไมล่ะ

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

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

5
ฉันควรแค็ปซูลโครงสร้างข้อมูลภายในทั้งหมดหรือไม่
โปรดพิจารณาคลาสนี้: class ClassA{ private Thing[] things; // stores data // stuff omitted public Thing[] getThings(){ return things; } } คลาสนี้จะเปิดเผยอาร์เรย์ที่ใช้ในการจัดเก็บข้อมูลรหัสลูกค้าใด ๆ ที่สนใจ ฉันทำสิ่งนี้ในแอปที่ฉันทำงานอยู่ ฉันมีChordProgressionคลาสที่เก็บลำดับของChords (และทำสิ่งอื่น) มันมีChord[] getChords()วิธีที่คืนค่าอาร์เรย์ของคอร์ด เมื่อโครงสร้างข้อมูลต้องเปลี่ยน (จากอาร์เรย์เป็น ArrayList) รหัสไคลเอ็นต์ทั้งหมดจะพัง นี่ทำให้ฉันคิดว่า - วิธีต่อไปนี้อาจจะดีกว่า: class ClassA{ private Thing[] things; // stores data // stuff omitted public Thing[] getThing(int index){ return …

4
ในฐานะโปรแกรมเมอร์คุณจำเป็นต้องให้การสนับสนุนอย่างต่อเนื่องหลังจากออกจาก บริษัท หรือไม่? [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Software Engineering Stack Exchange ปิดให้บริการใน6 ปีที่ผ่านมา ฉันเคยมีงานเขียนโปรแกรมสองสามครั้งในอดีตที่ฉันเป็นนักพัฒนาเพียงคนเดียวที่ทำงานในโครงการ หลังจากฉันออกไปโดยทั่วไปฉันจะได้รับอีเมลหลายฉบับต่อสัปดาห์จาก บริษัท เหล่านี้ซึ่งโดยปกติจะมาจากนักพัฒนาซอฟต์แวร์ที่มาแทนที่ฉันที่นั่น โดยปกติแล้วอีเมลเหล่านี้จะขอรายละเอียดเกี่ยวกับวิธีการทำงานของสิ่งต่าง ๆ และวิธีที่ฉันควรจะปรับใช้ฟีเจอร์ x ตามระบบที่มีอยู่ ปกติแล้วฉันจะสุภาพและให้ความช่วยเหลือ แต่การสื่อสารแบบนี้จริง ๆ แล้วเริ่มกินในเวลาของฉันทำให้งานทุกอย่างที่ฉันทำงานอีกรอบข้อเท้าของฉัน ไม่พูดถึงพวกเขาเป็นโครงการที่ฉันเลือกที่จะทิ้งไว้ข้างหลังฉันด้วยเหตุผลที่ดี คำถามของฉันคือจะเป็นมืออาชีพที่จะบอกพวกเขาว่าฉันจะไม่ให้การสนับสนุนอีกต่อไปแล้วปฏิเสธและตอบคำถาม? NB บริษัท เหล่านี้ไม่จ่ายเงินตอบแทนให้ฉันทุกประเภทและคำถามมักจะเป็นคำถามที่ไม่เป็นทางการจากนักพัฒนาและไม่ใช่ผู้บริหาร

2
แนวคิดและแนวปฏิบัติที่ดีที่สุดสำหรับคลาสและสมาชิกแบบคงที่ [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน6 ปีที่ผ่านมา ฉันอยากรู้มากเกี่ยวกับความคิดและแนวปฏิบัติที่ดีที่สุดในอุตสาหกรรมเกี่ยวกับสมาชิกแบบสแตติกหรือคลาสแบบคงที่ทั้งหมด มีข้อเสียหรือไม่หรือมีส่วนร่วมในรูปแบบการต่อต้านใด ๆ ฉันเห็นเอนทิตีเหล่านี้เป็น "คลาส / สมาชิกยูทิลิตี้" ในแง่ที่ว่าพวกเขาไม่ต้องการหรือต้องการอินสแตนซ์ชั้นเรียนเพื่อให้การทำงาน อะไรคือความคิดทั่วไปและแนวปฏิบัติที่ดีที่สุดในอุตสาหกรรมเกี่ยวกับเรื่องนี้ ดูตัวอย่างชั้นเรียนและสมาชิกด้านล่างเพื่อแสดงสิ่งที่ฉันกำลังอ้างอิง // non-static class with static members // public class Class1 { // ... other non-static members ... public static string GetSomeString() { // do something } } // static class // public static …
11 c#  class-design 

1
วิธีจัดการคำสั่งเพิ่ม / สร้าง * ในสถาปัตยกรรม CQRS + การจัดหากิจกรรม
ฉันต้องการใช้แอปพลิเคชันแรกของฉันโดยใช้รูปแบบ CQRS พร้อมกับการจัดหากิจกรรม ฉันสงสัยว่าการสร้างรากรวมควรได้รับการจัดการอย่างเหมาะสมอย่างไร สมมติว่ามีคนส่งคำสั่ง CreateItem ควรจัดการอย่างไร? รายการเหตุการณ์ที่สร้างขึ้นควรเก็บไว้ที่ไหน เป็นกิจกรรมแรกของรายการใหม่หรือไม่ หรือฉันควรจะมีรายการ ItemList บางอย่างที่รวมรายการทั้งหมดและรายการเหตุการณ์ประกอบด้วยรายการของ ItemCreated เท่านั้น Udi Dahan ไม่แนะนำให้สร้างรากรวมและมักจะใช้วิธีดึงข้อมูลบางอย่างแทน แต่วิธีที่ฉันสามารถดึงข้อมูลบางอย่างที่ใหม่และแน่นอนไม่มี ID ใด ๆ ที่ได้รับมอบหมาย ฉันเข้าใจความคิดที่อยู่เบื้องหลังและมันค่อนข้างสมเหตุสมผลที่จะคิดว่าวัตถุใหม่เป็นวัตถุที่มีสถานะเป็นศูนย์ซึ่งประกอบด้วยเหตุการณ์ที่ตอบกลับเป็นศูนย์ แต่ฉันจะใช้มันได้อย่างไร ฉันควรจะมีวิธีการที่แตกต่างกันในพื้นที่เก็บข้อมูลของฉันเช่นgetNewItem()หรือทำให้get(id)วิธีการของฉันยอมรับOptional<ItemId>แทน? แก้ไข: หลังจากการขุดสักพักฉันพบว่าการใช้รูปแบบดังกล่าวน่าสนใจจริง ๆโดยใช้นักแสดง ผู้เขียนแทนที่จะสร้างผลรวมดึงข้อมูลจากที่เก็บบางประเภทด้วย UUID ที่สร้างขึ้นใหม่ ข้อเสียเปรียบของวิธีนี้คือเขาอนุญาตให้มีสถานะที่ไม่สอดคล้องกันชั่วคราว ฉันยังสงสัยว่าฉันสามารถใช้deleteวิธีการด้วยวิธีดังกล่าวได้อย่างไร เพียงเพิ่มเหตุการณ์ที่ถูกลบไปยังรายการกิจกรรมของการรวมหรือไม่

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