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

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

9
วิธีตั้งชื่อเมธอดที่ทั้งสองทำงานและส่งคืนบูลีนเป็นสถานะได้อย่างไร?
หากมีวิธีการ bool DoStuff() { try { // doing stuff... return true; } catch (SomeSpecificException ex) { return false; } } มันควรจะถูกเรียกว่าค่อนข้างIsStuffDone()? ผู้ใช้ทั้งสองชื่ออาจตีความผิด: หากชื่อเป็นDoStuff()สาเหตุว่าทำไมจึงส่งคืนบูลีน หากชื่อIsStuffDone()ไม่ชัดเจนว่าวิธีการทำงานหรือตรวจสอบผลของมันเท่านั้น มีแบบแผนสำหรับกรณีนี้หรือไม่? หรือวิธีการอื่นเป็นวิธีนี้ถือว่ามีข้อบกพร่อง? ยกตัวอย่างเช่นในภาษาที่มีพารามิเตอร์ที่ส่งออกเช่น C # voidตัวแปรสถานะบูลีนอาจจะส่งผ่านไปยังวิธีการที่เป็นหนึ่งและประเภทผลตอบแทนของวิธีการที่จะเป็น แก้ไข: ในการจัดการข้อยกเว้นปัญหาเฉพาะของฉันไม่สามารถมอบหมายโดยตรงไปยังผู้โทรเพราะวิธีการเป็นส่วนหนึ่งของการใช้อินเตอร์เฟซ ดังนั้นผู้เรียกไม่สามารถเรียกเก็บเงินกับการจัดการกับข้อยกเว้นทั้งหมดของการใช้งานที่แตกต่างกัน ไม่คุ้นเคยกับข้อยกเว้นเหล่านั้น แต่โทรสามารถจัดการกับข้อยกเว้นที่กำหนดเองเช่นStuffHasNotBeenDoneForSomeReasonExceptionเป็นได้รับการแนะนำในคำตอบของ npinti และแสดงความคิดเห็น

2
ความแตกต่างระหว่างรูปแบบของอะแดปเตอร์และรูปแบบพร็อกซีหรือไม่
เท่าที่เข้าใจแล้วรูปแบบของอะแดปเตอร์กำลังสร้างวัตถุห่อหุ้มสำหรับวัตถุที่น่าสนใจจริง ๆ ของเราเพียงแค่อ้อมอีกระดับหนึ่งซึ่งให้ความยืดหยุ่น ความยืดหยุ่นอยู่ที่นั้นถ้าอินเทอร์เฟซของวัตถุจริงมีการเปลี่ยนแปลงแล้วเราเปลี่ยนอินเทอร์เฟซ wrapper ที่ชี้ไปที่วัตถุจริง รูปแบบพร็อกซี่เหมือนกันมีความแตกต่างว่าทุกเสื้อคลุมพร็อกซี่ยังมีเพียงส่วนย่อยที่สอดคล้องกันของการทำงานของวัตถุที่แท้จริงของ ทำไมสิ่งนี้ถึงมีประโยชน์เมื่อเราพยายามทำให้ "หนึ่งชั้นเรียนเพื่อจุดประสงค์เดียว" นั้นอยู่เหนือฉัน ฉันได้รับสิ่งนี้ถูกต้องหรือไม่

3
สิ่งกีดขวางบนถนนเผชิญกับกระบวนการพัฒนาในการใช้ภาษามาร์กอัปข้อความธรรมดาซึ่งตรงกันข้ามกับเช่น Microsoft Word [ปิด]
ขณะนี้ฉันฝึกงานที่ผู้รับเหมาของรัฐบาลและฉันรู้สึกว่า (Word เป็นมาตรฐานจริงในกระบวนการพัฒนาซอฟต์แวร์) รูปแบบไบนารีของมันทำให้ยากมากที่จะทำงานร่วมกันในเอกสารในแบบที่ฉันคุ้นเคยกับการทำงานร่วมกันบนฐานรหัส การใช้มาร์กอัปข้อความธรรมดา (ที่มีภาษาเช่น LaTeX, Markdown, ReStructured Text ฯลฯ ) ช่วยให้เอกสารที่เป็นมิตรแตกต่างที่ทำงานได้ดีกับเวิร์กโฟลว์ปกติของนักพัฒนา ในฐานะที่เป็นสำหรับความคิดเห็นที่ภาษาไม่สนับสนุนพวกเขา (เช่น Markdown) มีโซลูชั่นที่มีอยู่มากมายที่ช่วยให้การแสดงความคิดเห็นร่วมกันบนฐานรหัส (เช่น GitHub, Bitbucket) ที่สามารถได้อย่างง่ายดายนำไปใช้กับไฟล์ข้อความธรรมดาอื่น ๆ ที่มีมาร์กอัป ฉันเข้าใจความต้องการที่จะร่วมมือกับการจัดการที่ไม่รู้หนังสือเกี่ยวกับเทคโนโลยีจำเป็นต้องมีส่วนต่อประสานกราฟิกทุกอย่าง แต่ส่วนต่อประสานดังกล่าวมีอยู่สำหรับรูปแบบเหล่านี้ส่วนใหญ่ ตัวอย่างเช่น LaTeX มี 'fork' ของการเรียงลำดับที่เรียกว่า LyX ที่ทำให้ front-end แบบกราฟิกเป็นข้อความธรรมดา, LaTeX-syntax ไฟล์นี้แม้จะเป็นกราฟิกในการแก้ไขเป็นหลัก แต่ก็ยังเป็นมิตร (นอกจากนี้ยังมีความคิดเห็นสไตล์ Word) โซลูชันเหล่านี้จำนวนมากยังไม่สามารถใช้แทน Word ได้และส่วนใหญ่เป็นฟรีหรือโอเพ่นซอร์ส อย่างไรก็ตามเราใช้ Word แม้สำหรับเอกสารภายในของเราที่ไม่มีใครเห็น เราทำงานกับข้อความเพื่อแสดงถึงอาชีพที่สำคัญของเรา --- ทำไมเอกสารถึงพิเศษมาก? นอกเหนือจากเรื่องเล็กน้อย "เราไม่รู้อะไรดีกว่าและตอนนี้เราติดอยู่ที่นี่" …

10
มันจะโอเคมั้ยถ้ามีวัตถุที่หล่อด้วยตัวเองแม้ว่ามันจะทำให้ API ของคลาสย่อยของพวกเขาสกปรก
Baseฉันได้เรียนฐาน มันมีอยู่สอง subclasses, และSub1 Sub2แต่ละคลาสย่อยมีวิธีเพิ่มเติมบางอย่าง ตัวอย่างเช่นSub1มีSandwich makeASandwich(Ingredients... ingredients)และมีSub2boolean contactAliens(Frequency onFrequency) เนื่องจากวิธีการเหล่านี้ใช้พารามิเตอร์ที่แตกต่างกันและทำสิ่งที่แตกต่างอย่างสิ้นเชิงพวกเขาไม่เข้ากันอย่างสมบูรณ์และฉันไม่สามารถใช้ความหลากหลายในการแก้ปัญหานี้ได้ Baseมอบการทำงานส่วนใหญ่และฉันมีBaseวัตถุจำนวนมาก อย่างไรก็ตามBaseวัตถุทั้งหมดเป็นแบบ a Sub1หรือ a Sub2และบางครั้งฉันจำเป็นต้องรู้ว่ามันคืออะไร ดูเหมือนจะเป็นการดีที่จะทำสิ่งต่อไปนี้: for (Base base : bases) { if (base instanceof Sub1) { ((Sub1) base).makeASandwich(getRandomIngredients()); // ... etc. } else { // must be Sub2 ((Sub2) base).contactAliens(getFrequency()); // ... etc. } } ดังนั้นฉันจึงคิดกลยุทธ์เพื่อหลีกเลี่ยงสิ่งนี้โดยไม่ต้องร่าย Baseตอนนี้มีวิธีการเหล่านี้: …

6
HTTP API ควรส่งคืนเนื้อหาเสมอหรือไม่
มีมาตรฐานบางอย่างเกี่ยวกับการตอบกลับ HTTP API หรือไม่ หลังจากอ่านหัวข้อสนทนานี้ฉันเริ่มสงสัย เรากำลังพัฒนา HTTP JSON API สาธารณะของเราในที่ทำงานของฉันและเราจะไม่ส่งคืนสิ่งใดเมื่อไม่จำเป็นอย่างเคร่งครัด (เช่น PUT to / resource / {id} เท่านั้นส่งคืน 200 เมื่อตกลงหรือรหัส 4XX หรือ 5XX ที่เกี่ยวข้อง แต่ไม่ ร่างกาย JSON) เราควรคืนค่าตัวแบบทั่วไป{"success":true}เช่นที่พวกเขาพูดคุยเกี่ยวกับลิงก์ข้างต้นหรือไม่มันก็โอเคที่จะคืนค่าส่วน "โมฆะ" และจัดการทุกอย่างด้วยรหัสตอบกลับ http?
33 rest  api-design  http 

5
อัลกอริทึมการแบ่งและพิชิต - ทำไมไม่แยกส่วนมากกว่าสอง
ในขั้นตอนวิธีแบ่งแยกและเอาชนะเช่น quicksort และ mergesort ใส่มักจะ (อย่างน้อยในตำราเบื้องต้น) แยกเป็นสองและทั้งสองมีขนาดเล็กชุดข้อมูลจะได้รับไพ่แล้วด้วยซ้ำ มันสมเหตุสมผลสำหรับฉันว่าสิ่งนี้ทำให้การแก้ไขปัญหาได้เร็วขึ้นหากทั้งสองส่วนใช้เวลาน้อยกว่าครึ่งในการจัดการกับชุดข้อมูลทั้งหมด แต่ทำไมไม่แยกชุดข้อมูลออกเป็นสามส่วน? สี่? n ? ฉันเดาว่างานของการแบ่งข้อมูลในชุดย่อยหลายชุดทำให้ไม่คุ้มค่า แต่ฉันขาดสัญชาตญาณเพื่อดูว่าควรหยุดที่สองชุดย่อย ฉันยังได้เห็นการอ้างอิงจำนวนมากถึง QuickSort 3 ทาง เมื่อไหร่จะเร็วกว่านี้? สิ่งที่ใช้ในการปฏิบัติ?

3
มีค่าจริงในการทดสอบหน่วยควบคุมใน ASP.NET MVC หรือไม่?
ฉันหวังว่าคำถามนี้จะให้คำตอบที่น่าสนใจเพราะเป็นคำถามที่ทำให้ฉันอึดใจ มีค่าจริงในการทดสอบหน่วยควบคุมใน ASP.NET MVC หรือไม่? สิ่งที่ฉันหมายถึงโดยส่วนใหญ่แล้ว (และฉันไม่มีอัจฉริยะ) วิธีการควบคุมของฉันคือแม้สิ่งที่ซับซ้อนที่สุดของพวกเขาเช่นนี้: public ActionResult Create(MyModel model) { // start error list var errors = new List<string>(); // check model state based on data annotations if(ModelState.IsValid) { // call a service method if(this._myService.CreateNew(model, Request.UserHostAddress, ref errors)) { // all is well, data is saved, // …

8
เรื่องราวของผู้ใช้กับความต้องการ
เรื่องราวของผู้ใช้รวบรวมสิ่งที่ผู้ใช้ต้องการจะทำกับระบบในระดับสูง ฉันเข้าใจว่าเรื่องราวของผู้ใช้จะช่วยผลักดันข้อกำหนดระดับต่ำให้มากขึ้น เรื่องราวของผู้ใช้เหมือนกับข้อกำหนดระดับสูงสำหรับระบบหรือไม่

3
RPC-ish ใกล้จะเหมาะสมกว่า REST เมื่อใด
หลังจากดูการพูดคุยนี้ใน REST แล้ว Reuse and Serendipityโดย Steve Vinoski ฉันสงสัยว่ามีกรณีธุรกิจในโครงการกรีนฟิลด์สำหรับ (XML-) การตั้งค่า RPC-ish ที่ REST ไม่สามารถแก้ไขได้ในทางที่ดีขึ้น ปัญหา RPC สองสามอย่างที่เขากล่าวถึง: มุ่งเน้นที่ภาษา (จัดระบบให้เหมาะสมกับภาษาไม่ใช่วิธีอื่น ๆ ) "ทำให้ดูเป็นท้องถิ่น" (และรับมือกับความล้มเหลวและความหน่วงแฝงเป็นข้อยกเว้นมากกว่ากฎ) ตั้งใจที่จะเป็นภาษาที่เป็นอิสระ แต่ยังคงมี "การเรียกใช้ฟังก์ชัน" ข้ามภาษาเป็นส่วนผสมหลัก IDLสำเร็จรูป ภาพลวงตาของความปลอดภัยประเภท และอีกไม่กี่ ... เพียงเพิ่มบทละครลงเล็กน้อยผลการค้นหาทันใจของ Google สำหรับ RPC และ REST:

7
ทำไมคอนสตรัคเตอร์ถึงไม่ได้รับมรดก
ฉันสับสนว่าปัญหาจะเกิดขึ้นได้อย่างไรหากคอนสตรัคเตอร์ได้รับมรดกจากคลาสฐาน Cpp Primer Plus กล่าวว่า ก่อสร้างจะแตกต่างจากวิธีการเรียนอื่น ๆ ในการที่พวกเขาสร้างวัตถุใหม่ในขณะที่วิธีการอื่น ๆ จะเรียกโดยวัตถุที่มีอยู่ นี่คือเหตุผลหนึ่งการก่อสร้างยังไม่ได้รับการถ่ายทอด การสืบทอดหมายความว่าวัตถุที่ได้มาสามารถใช้วิธีการระดับฐาน แต่ในกรณีของการก่อสร้างวัตถุที่ไม่มีอยู่จนกว่าหลังจากที่ผู้สร้างได้ทำงานของมัน ฉันเข้าใจว่าตัวสร้างถูกเรียกก่อนการสร้างวัตถุจะเสร็จสมบูรณ์ มันจะนำไปสู่ปัญหาได้อย่างไรถ้าคลาสเด็กสืบทอด ( โดยการสืบทอดฉันหมายความว่าคลาสเด็กสามารถแทนที่เมธอดคลาสพาเรนต์เป็นต้นไม่เพียง แต่เข้าถึงเมธอดคลาสคลาสหลัก ) คอนสตรัคเตอร์หลัก ฉันเข้าใจว่าไม่มีความจำเป็นที่จะต้องเรียกคอนสตรัคเตอร์อย่างชัดเจนจากภายในโค้ด [ไม่ใช่สิ่งที่ฉันรู้ขณะนี้] ยกเว้นขณะสร้างวัตถุ แม้ว่าคุณจะสามารถใช้กลไกบางอย่างในการเรียก const constor ของ parent [ใน cpp, การใช้::หรือการใช้member initialiser list, In java using super] ใน Java มีการบังคับให้เรียกมันในบรรทัดที่ 1 ฉันเข้าใจว่าเพื่อให้แน่ใจว่าวัตถุแม่ถูกสร้างขึ้นก่อนแล้วจึงสร้างการสร้างวัตถุลูก มันสามารถแทนที่มัน แต่ฉันไม่สามารถคิดสถานการณ์ที่ทำให้เกิดปัญหาได้ หากเด็กได้สืบทอดคอนสตรัคเตอร์หลักสิ่งที่สามารถผิดพลาดได้? ดังนั้นนี่คือเพื่อหลีกเลี่ยงการสืบทอดฟังก์ชันที่ไม่จำเป็น หรือมีมากไปไหม
33 c++  inheritance 

6
เหตุใดลูปที่ซ้อนกันจึงถือว่าไม่เหมาะสม
อาจารย์ของฉันพูดถึงวันนี้ว่าเป็นไปได้ที่จะ "ลูป" ลูปใน Java เพื่อให้คุณสามารถอ้างถึงพวกเขาเมื่อจัดการกับลูปซ้อนกัน ดังนั้นฉันจึงค้นหาคุณสมบัติตามที่ฉันไม่ทราบเกี่ยวกับมันและหลาย ๆ สถานที่ซึ่งคุณสมบัตินี้ได้รับการอธิบายแล้วตามด้วยคำเตือน ฉันไม่เข้าใจว่าทำไม เป็นเพราะมันมีผลต่อความสามารถในการอ่านของรหัสหรือไม่ หรือเป็น "เทคนิค" มากกว่านี้หรือไม่

6
ฉันต้องการเขียนอัลกอริทึม "ultimate shuffle" เพื่อเรียงลำดับคอลเลกชัน mp3 ของฉัน
ฉันกำลังมองหาข้อเสนอแนะ pseudocode สำหรับจัดเรียงไฟล์ mp3 ของฉันในทางที่หลีกเลี่ยงชื่อและศิลปินซ้ำ ฉันฟัง crooners - Frank Sinatra, Tony Bennett, Ella Fitzgerald ฯลฯ ร้องเพลงมาตรฐานเก่า ศิลปินแต่ละคนบันทึกเพลงเดียวกันหลายเพลง - Fly Me To The Moon, The Way You Look Tonight, Stardust ฯลฯ เป้าหมายของฉันคือการจัดเรียงเพลง (หรือสั่งซื้อเพลย์ลิสต์) ด้วยพื้นที่สูงสุดระหว่างศิลปินและชื่อเพลง ดังนั้นถ้าฉันมี 2,000 เพลงและ 20 เพลงเป็นโดยเอลล่าฉันอยากจะได้ยินเธอเพียงครั้งเดียวในทุก ๆ 100 เพลง หากศิลปิน 10 คนร้องเพลง Fly Me To The Moon ฉันอยากได้ยินทุก …

3
Java ฟรี / โอเพนซอร์สหรือไม่?
เมื่อวันที่ 13 พฤศจิกายน 2549 Sun ได้ปล่อย Java เป็นซอฟต์แวร์เสรีและโอเพ่นซอร์สส่วนใหญ่ (FOSS) ภายใต้เงื่อนไขของ GNU General Public License (GPL) เมื่อวันที่ 8 พฤษภาคม 2550 Sun ได้เสร็จสิ้นกระบวนการทำให้แกนประมวลผลหลักของ Java ทั้งหมดอยู่ภายใต้เงื่อนไขการแจกจ่ายซอฟต์แวร์ฟรี / โอเพ่นซอร์สนอกเหนือจากรหัสขนาดเล็กที่ Sun ไม่ได้ถือลิขสิทธิ์ OpenJDK (Open Java Development Kit) เป็นการใช้งานฟรีและโอเพ่นซอร์สของภาษาการเขียนโปรแกรม Java เป็นผลมาจากความพยายามของ Sun Microsystems ที่เริ่มขึ้นในปี 2549 การดำเนินงานนี้ได้รับอนุญาตภายใต้ GNU General Public License (GNU GPL) โดยมีข้อยกเว้นในการเชื่อมโยง ทำไมยังมีคนที่พูดว่า Java ไม่ได้เป็นโอเพ่นซอร์สหรือเป็นอิสระในการพูดฟรี? …

2
แนวทางปฏิบัติที่ดีที่สุดสำหรับการออกแบบฐานข้อมูล NoSQL
ฉันเพิ่งเริ่มใช้ฐานข้อมูลที่ใช้เอกสาร NoSQL (MongoDB) และฉันอยากรู้เกี่ยวกับแนวทางปฏิบัติที่ดีที่สุดสำหรับการออกแบบฐานข้อมูล ฉันคิดว่าสถาปัตยกรรมควรแตกต่างจากฐานข้อมูลเชิงสัมพันธ์หรือไม่ ฉันควรยังคงมุ่งมั่นสำหรับฐานข้อมูลปกติ ตัวอย่างเช่นฉันมีกรณีการใช้งานเฉพาะ; ฉันมีผู้ใช้ที่มีประวัติการเช่า (อาร์เรย์ที่อยู่) ควรอาร์เรย์นั้นเป็นอาร์เรย์ของผู้ใช้หรือเป็นคอลเลกชันแยกต่างหากด้วยรหัสที่ใช้ร่วมกันหรือไม่
33 design  nosql 

3
คอมพิวเตอร์ควอนตัมจะเปลี่ยนการเขียนโปรแกรมอย่างไร [ปิด]
การเขียนโปรแกรมอัลกอริทึมควอนตัมแตกต่างกันอย่างไร? ภาษาเช่น C จะเป็นอย่างไรถ้ามันถูกออกแบบมาสำหรับ qubits ประเภทจะเปลี่ยนหรือไม่

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