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

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


4
ลองใช้ catch-blocks กันดีไหม?
ฉันมักจะพบว่าตัวเองต่อสู้กับเรื่องนี้ ... พยายามหาสมดุลระหว่างลอง / จับและรหัสไม่เป็นระเบียบลามกของแท็บวงเล็บและข้อยกเว้นถูกโยนกลับกองโทรเช่นมันฝรั่งร้อน ตัวอย่างเช่นฉันมีแอพที่ฉันกำลังพัฒนาอยู่ตอนนี้ซึ่งใช้ SQLite ฉันมีอินเทอร์เฟซฐานข้อมูลที่เป็นนามธรรมการเรียกใช้ SQLite และแบบจำลองที่ยอมรับสิ่งต่าง ๆ ที่จะเข้า / ออกจากฐานข้อมูล ... ดังนั้นหาก / เมื่อเกิดข้อยกเว้น SQLite ขึ้นมามันจะต้องถูกโยนขึ้นสู่รุ่น (ซึ่งเรียกว่า ) ใครจะต้องส่งมันให้ใครก็ตามที่เรียกว่า AddRecord / DeleteRecord / อะไรก็ตาม ... ฉันเป็นแฟนตัวยงของข้อยกเว้นซึ่งตรงกันข้ามกับการส่งคืนรหัสข้อผิดพลาดเนื่องจากรหัสข้อผิดพลาดสามารถถูกละเว้นลืม ฯลฯ ได้ในขณะที่การจัดการข้อยกเว้นเป็นหลัก (ได้รับฉันสามารถจับและย้ายได้ทันที ... ) ฉัน บางอย่างจะต้องมีวิธีที่ดีกว่าสิ่งที่ฉันเกิดขึ้นตอนนี้ แก้ไข: ฉันควรจะใช้ถ้อยคำนี้แตกต่างกันเล็กน้อย ฉันเข้าใจที่จะโยนเป็นประเภทที่แตกต่างกันและเช่นนั้นฉันพูดได้ไม่ดีและนั่นเป็นความผิดของฉันเอง คำถามของฉันคือ ... จะรักษาความสะอาดโค้ดเมื่อทำเช่นนั้นได้อย่างไร มันเริ่มรู้สึกเกะกะอย่างมากกับฉันหลังจากนั้นไม่นาน

6
องค์ประกอบที่ถูกบล็อกเทียบกับองค์ประกอบแบบอินไลน์ใน HTML: ทำไมถึงแตกต่าง?
ความแตกต่างระหว่างองค์ประกอบของบล็อกและอินไลน์ดูเหมือนจะแปลกสำหรับฉันเสมอ ความแตกต่างทั้งหมดคือองค์ประกอบบล็อกใช้ความกว้างทั้งหมดจึงบังคับให้มีการแบ่งบรรทัดก่อนและหลังองค์ประกอบและองค์ประกอบอินไลน์จะใช้เวลามากเท่าเนื้อหา ทำไมไม่เพียงแค่มีองค์ประกอบหนึ่งประเภท - องค์ประกอบแบบอินไลน์ที่คุณสามารถใช้ความสูง / ความกว้างที่กำหนดเองและใช้สิ่งนั้นได้ คุณต้องการแบ่งบรรทัดหรือไม่ แทรก<br />หรืออาจเพิ่มแท็กพิเศษใน CSS สำหรับลักษณะการทำงานนั้น วิธีที่ตอนนี้ฉันไม่เห็นมันแก้ปัญหาใด ๆ และแทนที่จะบังคับเฉพาะคุณสมบัติที่ในความเห็นของฉันควรได้รับการตัดสินโดยนักออกแบบ ทำไมทั้งสองประเภท?
15 html  css 

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

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

10
อะไรที่ทำให้นักพัฒนา C อยากรู้อยากเห็นถ้า "i ++ == ++ i"? [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน6 ปีที่ผ่านมา เพียงสังเกตแบบสุ่มดูเหมือนว่าใน StackOverflow.com มีคำถามเกี่ยวกับว่า "++ i == i ++" คำถามนั้นถูกถามตลอดเวลา แต่ฉันคิดว่าฉันเห็นมันถามประมาณ 6 หรือ 7 ครั้งใน 2 เดือนที่ผ่านมา ฉันแค่สงสัยว่าทำไมนักพัฒนา C ถึงสนใจ? มีแนวคิด / คำถามเดียวกันสำหรับ C # และ Java devs เช่นกัน แต่ฉันคิดว่าฉันเห็นคำถามที่เกี่ยวข้องกับ C # เพียงรายการเดียว เป็นเพราะตัวอย่างมากมายใช้ ++ i เป็นเพราะมีหนังสือหรือแบบฝึกหัดยอดนิยมบ้างไหม? เป็นเพราะผู้พัฒนา C รักที่จะยัดเยียดให้มากที่สุดเท่าที่จะทำได้ในบรรทัดเดียวสำหรับ 'ประสิทธิภาพ' / 'ประสิทธิภาพ' และดังนั้นจึงพบโครงสร้าง …

5
หน่วยทดสอบวิธีการโมฆะ
เพื่อแก้ไขข้อผิดพลาดในการประยุกต์ใช้ผมปรับเปลี่ยนวิธีการตั้งชื่อโดยการเพิ่มการเรียกร้องให้เป็นวิธีการที่มีอยู่ชื่อ postLogingetShoppingCart รหัส protected void postLogin() { getShoppingCart(); } อย่างไรก็ตามฉันไม่แน่ใจว่าวิธีที่ดีที่สุดในการเขียนบททดสอบpostLoginคืออะไร วิธีที่ 1 ใช้การตรวจสอบจาก Mockito เพียงตรวจสอบว่าวิธีการนั้นถูกเรียก verify(mock).getShoppingCart(); วิธีที่ 2 ทดสอบผลข้างเคียงของการเรียกใช้เมธอดโดยเรียกค่าของตะกร้าสินค้าของผู้ใช้ AssertNotNull(user.getShoppingCart()); วิธีการหนึ่งดีกว่าวิธีอื่นหรือไม่?

2
การเลิกจ้างของ CQRS ไม่ใช่หรือ
ฉันยังจำวันเก่า ๆ ของที่เก็บ แต่ที่เก็บเคยเติบโตน่าเกลียดกับเวลา จากนั้น CQRS จะเป็นกระแสหลัก พวกเขาใจดีพวกเขาสูดอากาศบริสุทธิ์ แต่เมื่อเร็ว ๆ นี้ฉันได้ถามตัวเองซ้ำแล้วซ้ำอีกว่าทำไมฉันถึงไม่รักษาตรรกะในวิธีการของตัวควบคุม (โดยเฉพาะใน Web Api ที่การกระทำเป็นตัวจัดการคำสั่ง / แบบสอบถามในตัวเอง) ก่อนหน้านี้ฉันมีคำตอบที่ชัดเจนสำหรับเรื่องนี้: ฉันทำเพื่อทดสอบเนื่องจากเป็นการยากที่จะทดสอบ Controller ด้วยซิงเกิลที่ไม่สามารถทำการล็อคได้และโครงสร้างพื้นฐาน ASP.NET ที่น่าเกลียดโดยรวม แต่เวลามีการเปลี่ยนแปลงและคลาสโครงสร้างพื้นฐาน ASP.NET นั้นมีการทดสอบหน่วยที่เป็นมิตรมากขึ้นทุกวันนี้ (โดยเฉพาะใน ASP.NET Core) ต่อไปนี้เป็นการเรียก WebApi ทั่วไป: มีการเพิ่มคำสั่งและลูกค้า SignalR จะได้รับแจ้งเกี่ยวกับมัน public void AddClient(string clientName) { using (var dataContext = new DataContext()) { var client = …

5
การสร้างเอกสารมาตรฐานการเข้ารหัส
ฉันทำงานใน บริษัท ระบบควบคุมซึ่งงานหลักคือSCADAและPLCพร้อมกับระบบควบคุมอื่น ๆ การพัฒนาซอฟต์แวร์ไม่ใช่สิ่งที่ บริษัท ทำจริงๆนอกเหนือจากที่นี่และที่นั่นจนกระทั่งมีการตัดสินใจที่จะสร้างการจัดการโครงการภายในและระบบการประเมินผล โครงการนี้ดำเนินการโดยผู้ที่มาที่นี่ในฐานะผู้ใช้ซอฟต์แวร์ แต่เดิมและเราส่วนใหญ่เป็นผู้น้อย โครงการเริ่มจากเล็กดังนั้นเราจึงบันทึกเฉพาะสิ่งต่าง ๆ เช่นการออกแบบสิ่งฐานข้อมูลเป็นต้น แต่เราไม่เคยเห็นด้วยกับรูปแบบการเข้ารหัส / อนุสัญญา เราเริ่มใช้StyleCopเพื่อให้แน่ใจว่าเรามีรหัสที่ดี แต่ฉันรู้สึกว่าเราจำเป็นต้องมีเอกสารอย่างเป็นทางการสำหรับการเข้ารหัสอนุสัญญา / การปฏิบัติเพื่อให้เราสามารถดำเนินการต่อในมาตรฐานที่ดีและหากมีงานพัฒนาที่สำคัญอีกต่อไปในอนาคต มีแผ่นฐานที่ดี ปัญหานั้นอยู่ที่ฉันไม่ทราบวิธีการร่างเอกสารสำหรับการเข้ารหัสการประชุมและมาตรฐานทั้งหมดที่ฉันคิดว่าเป็นตัวอย่างของการปฏิบัติที่ดีและไม่ดี (ตัวอย่างเช่นกรณีอูฐเมื่อตั้งชื่อตัวแปรหลีกเลี่ยงสัญกรณ์ฮังการี ฯลฯ ) เราทุกคน โปรแกรมเมอร์ที่เก่งพอสมควร (ชัด) แต่เราก็ไม่มีกฎบัตรสำหรับเนื้อหาประเภทนี้ คำถามของฉันคืออะไรประเด็นสำคัญและเนื้อหาของเอกสารมาตรฐานการเข้ารหัสที่ดีมีอะไรบ้าง

5
จะทราบได้อย่างไรว่าโครงการโอเพ่นซอร์สนั้นมีผู้ใหญ่เพียงพอที่จะใช้ในผลิตภัณฑ์หรือไม่?
มีโครงการโอเพนซอร์สบางโครงการที่ฉันต้องการรวมไว้ในผลิตภัณฑ์ในที่ทำงาน เราไม่มีแบนด์วิดท์หรือความเชี่ยวชาญในเรื่องที่จะทำเอง ฉันพบสิ่งเหล่านี้ด้วยการค้นหาใน Google ฉันไม่รู้จัก "ผู้เล่นหลัก" ที่ใช้ประโยชน์จากโครงการ แต่ฉันก็สนับสนุนโดยสิ่งที่ฉันเห็น ตอนนี้ฉันกังวลเล็กน้อยเกี่ยวกับปริมาณความเสี่ยงที่ฉันสัมผัสโดยใช้โครงการโอเพ่นซอร์สของโจ - โบล ถ้าใช้ฉันไปถึง 95% ของที่นั่นบางทีที่เหลืออีก 5% อาจเพิ่มหรือแก้ไขได้ง่าย บางทีมันอาจจะไม่สำคัญ ผู้คนจะทราบได้อย่างไรว่าโครงการโอเพ่นซอร์สนั้นมีผู้ใหญ่พอที่จะใช้ในผลิตภัณฑ์ นี่ไม่ใช่โครงการงานอดิเรกดังนั้นความเสถียรการบำรุงรักษา ฯลฯ จึงเป็นสิ่งสำคัญยิ่ง

3
ชี้แจง MVVM
เรากำลังจะเขียนแอปพลิเคชั่น WPF แรกของเราและเริ่มคุ้นเคยกับรูปแบบ MVVM เราได้สร้างแอปพลิเคชั่น Winform จำนวนมากและมีสถาปัตยกรรมที่ประสบความสำเร็จมากสำหรับเรา เรามีปัญหาเล็กน้อยในการแปลสถาปัตยกรรมนั้นหรือกำหนดว่าสถาปัตยกรรมบางอย่างของเราเหมาะสมกับรูปแบบ MVVM หรือไม่ ในอดีตเรามี Gui (exe หลัก) ที่สื่อสารกับ dll BusinessLogic BusinessLogic สื่อสารกับ DAL dll ผ่านเว็บเซอร์วิสและ DAL โต้ตอบกับ DB DAL, BusinessLogic และ GUI ล้วนอ้างถึง BusinessObjects dll เดียวกัน การเปลี่ยนแปลงไปสู่ ​​MVVM นั้นค่อนข้างตรงไปตรงมา Gui ของเราจะยังคงมีมุมมอง BusinessOjbects ของเราจะยังคงมีรูปแบบและ DAL ของเราจะยังคงมีปฏิสัมพันธ์กับฐานข้อมูล (แม้ว่าเทคโนโลยีในการใช้พวกเขาอาจเปลี่ยนแปลง) สิ่งที่เราไม่แน่ใจคือองค์ประกอบ BusinessLogic ของเรา ในอดีตนี้จะให้ฟังก์ชั่นสำหรับ GUI เพื่อเรียกไปแล้วเติมการควบคุมในมุมมอง (เช่น. …

7
วิธีที่ดีที่สุดในการสร้าง HTML ในรหัส C # คืออะไร [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน5 ปีที่ผ่านมา ฉันมีความเชื่อว่ามาร์กอัปควรอยู่ในสถานะมาร์กอัปและไม่อยู่ในโค้ดด้านหลัง ฉันมาถึงสถานการณ์ที่ฉันคิดว่าเป็นที่ยอมรับในการสร้าง HTML ในโค้ดด้านหลัง ฉันต้องการได้รับฉันทามติว่าแนวทางปฏิบัติที่ดีที่สุดควรเป็นอย่างไร เมื่อใดจึงจะสามารถสร้าง html ในโค้ดด้านหลังได้ วิธีที่ดีที่สุดในการสร้าง html นี้คืออะไร (ตัวอย่าง: สตริง, StringBuilder, HTMLWriter เป็นต้น)
15 c#  asp.net  html 

5
DDD, Saga & การจัดหากิจกรรม: การกระทำแบบชดเชยสามารถลบในร้านค้าได้หรือไม่?
ฉันรู้ว่าคำถามข้างต้นอาจทำให้เกิดอะไรขึ้นบ้าง แต่ขอให้ฉันพยายามอธิบาย: ฉันกำลังพยายามสรุปแนวคิดที่เกี่ยวข้องสองอย่างโดยทั่วไปแล้วรูปแบบ Saga ( http://www.rgoarchitects.com/Files/SOAPatterns/Saga.pdf ) ร่วมกับ Event-sourcing (แนวคิด DDD) : http://en.wikipedia.org/wiki/Domain-driven_design ) โพสต์ที่ดีที่รวมเข้าด้วยกัน: https://blog.jonathanoliver.com/cqrs-sagas-with-event-sourcing-part-ii-of-ii/ ฉันได้รับคำถามในหนึ่งนาที แต่ฉันคิดว่าฉันต้องพยายามสรุปสิ่งที่ฉันเข้าใจก่อน (ซึ่งอาจผิดพลาดได้โปรดแก้ไขให้ถูกต้องหากเป็นกรณีนี้) เนื่องจากสิ่งนี้อาจส่งผลกระทบต่อสาเหตุที่ฉัน ถามคำถามเพื่อเริ่มต้นด้วย: รูปแบบ Saga คือนายหน้าประเภทหนึ่งที่ให้การกระทำ (ผู้ใช้ปลายทางอัตโนมัติ ฯลฯ โดยพื้นฐานแล้วอะไรก็ตามที่กำลังจะเปลี่ยนข้อมูล) จะแบ่งการกระทำนั้นในกิจกรรมทางธุรกิจและส่งกิจกรรมเหล่านี้เป็นข้อความไปยัง Message Bus ซึ่ง ในทางกลับกันส่งไปยังรากรวมที่เกี่ยวข้องที่จะได้รับการดูแล รากรวมเหล่านี้สามารถทำงานได้อย่างสมบูรณ์แบบอัตโนมัติ (แยกความกังวล, ปรับขยายได้ดี ฯลฯ ) Saga-instance นั้นไม่มีตรรกะทางธุรกิจใด ๆ ที่มีอยู่ในรากรวมที่มันส่งกิจกรรมไปให้ 'ตรรกะ' เพียงอย่างเดียวที่มีอยู่ใน Saga คือ 'กระบวนการ' - ตรรกะ (มักใช้เป็น Statemachine) …

5
สลับคำสั่ง - จัดการกรณีเริ่มต้นเมื่อไม่สามารถเข้าถึงได้
ถ้าฉันใช้คำสั่ง switch เพื่อจัดการค่าจาก enum (ซึ่งเป็นของชั้นเรียนของฉัน) และฉันมีเคสสำหรับค่าที่เป็นไปได้แต่ละอัน - มันคุ้มค่าที่จะเพิ่มรหัสเพื่อจัดการกับเคส "default" หรือไม่? enum MyEnum { MyFoo, MyBar, MyBat } MyEnum myEnum = GetMyEnum(); switch (myEnum) { case MyFoo: DoFoo(); break; case MyBar: DoBar(); break; case MyBat: DoBat(); break; default: Log("Unexpected value"); throw new ArgumentException() } ฉันไม่คิดว่าเป็นเพราะรหัสนี้ไม่สามารถเข้าถึงได้ (แม้จะมีการทดสอบหน่วย) เพื่อนร่วมงานของฉันไม่เห็นด้วยและคิดว่าสิ่งนี้ปกป้องเราจากพฤติกรรมที่ไม่คาดคิดที่เกิดจากค่าใหม่ที่เพิ่มเข้ามาใน MyEnum ชุมชนพูดว่าอย่างไร

7
Agile ทำงานอย่างไรเมื่อแทนที่ระบบการทำงาน
ในโลกอุดมคติ Agile คุณจะสร้างชุดย่อยขนาดเล็ก แต่มีประโยชน์อย่างรวดเร็วของระบบปลายทางที่ต้องการและมอบให้กับผู้ใช้ พวกเขาตื่นเต้นเพราะมันมีประโยชน์พวกเขาเริ่มใช้มันและให้ข้อเสนอแนะ จากนั้นคุณจะหาว่าจะเพิ่มอะไรสร้างและทำซ้ำจนกว่าคุณจะหมดเวลา เมื่อไม่นานมานี้ฉันมีโครงการสองสามโครงการที่เกี่ยวข้องกับการแทนที่ระบบการทำงานบางประเภท โมเดลด้านบนไม่ทำงานเลย: จนกว่าคุณจะสร้างระบบที่รวมฟังก์ชันการทำงานทั้งหมดของระบบที่มีอยู่แล้วผู้ใช้ก็ไม่ได้สนใจอะไรเลย พวกเขาจะไม่ใช้มัน คุณจะใช้งาน Agile ได้อย่างไรเมื่อ "ชุดย่อยที่มีประโยชน์น้อยที่สุด" คือ "ทั้งหมด"

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