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

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

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

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

7
การสร้างแบบจำลองชื่อและนามสกุลแยกกัน
ข้อโต้แย้งใดที่ควรพิจารณาเมื่อออกแบบระบบใหม่และต้องเก็บชื่อของบุคคลเป็นฟิลด์เดียวหรือแยกเป็นชื่อ / นามสกุล? ข้อดีสำหรับฟิลด์เดียว: UI ที่เรียบง่าย ไม่มีความกำกวมเมื่อพยายามป้อนชื่อของบุคคลที่มีชื่อยาวมาก (มักไม่ชัดเจนซึ่งเป็นนามสกุล / ชื่อ .. ) ความซับซ้อนน้อยลงเมื่อจัดการหัวเรื่อง (เช่นไม่จำเป็นต้องแยกฟิลด์เพื่อป้อน "MD" หรือ "Dr. ") ข้อดีสำหรับฟิลด์แยก: การสื่อสารส่วนบุคคลเป็นไปได้ "Dear Mr X" หรือ "Dear Julie" หากบริการเว็บที่ใช้งานต้องการชื่อ / นามสกุลแยกกันสามารถให้บริการได้อย่างง่ายดาย ทางเลือกที่ดีกว่าสำหรับอุตสาหกรรมใด ๆ ที่มีข้อกำหนดการระบุที่เข้มงวด (เช่นการแพทย์รัฐบาล ฯลฯ ) ตัวเลือกที่ปลอดภัยยิ่งขึ้นเนื่องจากคุณสามารถกลับไปใช้ทางเลือกเขตข้อมูลเดียวได้ตลอดเวลา คุณเห็นอาร์กิวเมนต์เพิ่มเติมที่ไม่ได้ระบุไว้ข้างต้นหรือไม่ อัปเดต: คำถามคืออะไรข้อโต้แย้งเพิ่มเติม (= ไม่ได้ระบุไว้ในคำถาม) สามารถแสดงรายการได้สำหรับแต่ละโซลูชัน ฉันคิดว่าการให้ความคิดเห็นแทนข้อดีและข้อเสียที่เป็นไปได้ผลักดันการอภิปรายในทางที่ผิด ผู้พัฒนาแต่ละคนจะต้องทำการตัดสินใจของเขา / เธอเกี่ยวกับปัญหานี้เป้าหมายของคำถามนี้คือการรวบรวมรายการของการขัดแย้งที่ไม่สำคัญที่สามารถประเมินได้หากจำเป็น

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

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

5
ฉันควรตรวจสอบว่ามีบางสิ่งบางอย่างใน db และล้มเหลวอย่างรวดเร็วหรือรอข้อยกเว้น db
มีสองคลาส: public class Parent { public int Id { get; set; } public int ChildId { get; set; } } public class Child { ... } เมื่อกำหนดChildIdให้Parentฉันควรตรวจสอบก่อนว่ามันมีอยู่ในฐานข้อมูลหรือรอให้ฐานข้อมูลเกิดข้อยกเว้นหรือไม่ ตัวอย่างเช่น (ใช้ Entity Framework Core): หมายเหตุการตรวจสอบประเภทนี้มีอยู่ทั่วอินเทอร์เน็ตแม้ในเอกสารอย่างเป็นทางการของ Microsoft: https://docs.microsoft.com/en-us/aspnet/mvc/overview/getting-started/getting-started-with-ef-using- mvc / handling-concurrency-with-the-entity-framework-in-an-asp-net-mvc-application # modified-the-department-controllerแต่มีการจัดการข้อยกเว้นเพิ่มเติมสำหรับSaveChanges นอกจากนี้โปรดทราบว่าจุดประสงค์หลักของการตรวจสอบนี้คือการส่งคืนข้อความที่เป็นมิตรและสถานะ HTTP ที่เป็นที่รู้จักแก่ผู้ใช้ API และไม่ละเว้นข้อยกเว้นฐานข้อมูลอย่างสมบูรณ์ และยกเว้นสถานที่เดียวที่จะถูกโยนอยู่ภายในSaveChangesหรือSaveChangesAsyncโทร ... ดังนั้นจะไม่มีข้อยกเว้นใด ๆ เมื่อคุณโทรหรือFindAsync …

8
“ ตัวแปรควรอยู่ในขอบเขตที่เล็กที่สุดเท่าที่จะเป็นไปได้” หรือไม่รวมถึง“ ตัวแปรที่ไม่ควรมีอยู่หากเป็นไปได้”?
ตามคำตอบที่ยอมรับได้ใน " เหตุผลที่ต้องการตัวแปรท้องถิ่นมากกว่าตัวแปรอินสแตนซ์? " ตัวแปรควรอยู่ในขอบเขตที่เล็กที่สุดเท่าที่จะเป็นไปได้ ลดความซับซ้อนของปัญหาในการตีความของฉันซึ่งหมายความว่าเราควรปรับโครงสร้างโค้ดประเภทนี้อีกครั้ง: public class Main { private A a; private B b; public ABResult getResult() { getA(); getB(); return ABFactory.mix(a, b); } private getA() { a = SomeFactory.getA(); } private getB() { b = SomeFactory.getB(); } } เป็นอะไรเช่นนี้: public class Main { public ABResult getResult() { …

4
กลยุทธ์การผสานการพัฒนา 1 ปีใน Visual Studio
ฉันมีลูกค้าที่ยืนยันว่าเราแยกการพัฒนาใหม่ออกจากสาขาหลักตลอดทั้งปี 2559 พวกเขามีทีมอื่นอีก 3-4 ทีมที่ทำงานในแอปพลิเคชั่นในความสามารถที่หลากหลาย มีการเปลี่ยนแปลงขนาดใหญ่จำนวนมาก (การสลับวิธีการฉีดการพึ่งพาการทำความสะอาดโค้ดด้วย ReSharper ฯลฯ ) ตอนนี้ฉันตกหลุมรักที่จะรวมหลักในสาขาการพัฒนาใหม่ของเราเพื่อเตรียมที่จะผลักดันการเปลี่ยนแปลงของเราขึ้นโซ่ เมื่อดึงจดหมายเวียนครั้งแรกของฉัน TFS รายงานไฟล์ ~ 6500 ด้วยการแก้ไขข้อขัดแย้ง บางส่วนจะง่าย แต่บางตัวก็ยากกว่า (โดยเฉพาะบางตัวของจาวาสคริปต์ตัวควบคุม api และบริการที่สนับสนุนตัวควบคุมเหล่านี้) มีวิธีที่ฉันสามารถทำได้ซึ่งจะทำให้เรื่องนี้ง่ายขึ้นสำหรับฉันหรือไม่ เพื่อชี้แจงฉันแสดงความกังวลอย่างมากกับวิธีนี้หลายครั้งตลอดทาง ลูกค้าคือและตระหนักถึงปัญหานี้ เนื่องจากพวกเขาเลือกที่จะย่อพนักงาน QA (1 ผู้ทดสอบสำหรับ 4 devs, ไม่มีการทดสอบอัตโนมัติ, การทดสอบการถดถอยเล็กน้อย) พวกเขายืนยันว่าเราแยกสาขาของเราออกจากการเปลี่ยนแปลงในสาขาหลักภายใต้ข้ออ้างว่าสิ่งนี้จะลดความต้องการของเรา ผู้ทดสอบเพื่อทราบเกี่ยวกับการเปลี่ยนแปลงที่เกิดขึ้นที่อื่น หนึ่งในปัญหาที่ใหญ่กว่าที่นี่คือการอัปเกรดเป็นรุ่นแองกูลาร์และซอฟต์แวร์อื่น ๆ ของบุคคลที่สาม - โชคไม่ดีที่เราไม่มีวิธีการที่ดีในการสร้างโซลูชันนี้จนกว่าจะนำชิ้นส่วนทั้งหมดกลับเข้าที่

7
ข้อความนี้เกี่ยวกับ C # และ Java ที่เป็นครึ่งหนึ่งของภาษาหมายถึงอะไร [ปิด]
ในบทความ: ทำไม POCOมีประโยคนี้: Maciej Sobczak ทำให้มันดี:“ ฉันไม่ชอบเมื่อมีคนให้ภาษาครึ่งหนึ่งกับฉันและบอกฉันว่ามันเป็นของฉันเอง” ฉันไม่เข้าใจสิ่งที่เขาหมายถึงแม้ว่าC # เป็นเจ้าของโดย Microsoft & Java เป็นของ Oracleแต่ก็ไม่ได้หมายความว่าพวกเขามีภาษาอยู่ครึ่งภาษาใช่หรือไม่ ฉันไม่พบหลักฐานใด ๆ ที่จะพิสูจน์ประโยคนั้นและฉันอยากรู้จริงๆเกี่ยวกับเรื่องนี้ และยิ่งอยากรู้มากขึ้นเกี่ยวกับส่วน 'สำหรับการป้องกันของฉันเอง'
32 java  c#  microsoft  oracle 

5
ทำไมเราต้องใช้ enums ในภาษาที่พิมพ์แบบไดนามิก?
ฉันอ่านรหัสที่นี่และเห็นว่ามีการใช้ enum เพื่อจัดเก็บชื่อของแท็ก html ทำไมเราต้องทำเช่นนี้? ฉันจะได้รับประโยชน์อะไรจากการใช้กลยุทธ์นี้ ฉันรู้ว่า enums มีประโยชน์อย่างไรในการรวบรวมหรือพิมพ์ภาษาแบบคงที่ แต่เมื่อฉันเห็น enums ในภาษาที่พิมพ์แบบไดนามิกฉันอยากรู้อยากเห็นเช่นรหัสตัวอย่างที่ฉันแสดงด้านบน ดังนั้นคำถามโดยทั่วไปแล้วทำไมเราถึงต้องการ enums ในภาษาที่พิมพ์แบบไดนามิกหรือเราต้องการมันทั้งหมด?

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

10
“ Parent x = new Child ();” แทนที่จะเป็น“ Child x = new Child ();” เป็นการปฏิบัติที่ไม่ดีถ้าเราสามารถใช้อันหลังได้หรือไม่?
ตัวอย่างเช่นฉันเคยเห็นรหัสบางอย่างที่สร้างชิ้นส่วนเช่นนี้: Fragment myFragment=new MyFragment(); ซึ่งประกาศตัวแปรเป็นชิ้นส่วนแทน MyFragment ซึ่ง MyFragment เป็นคลาสย่อยของ Fragment ฉันไม่พอใจรหัสบรรทัดนี้เพราะฉันคิดว่ารหัสนี้ควรเป็น: MyFragment myFragment=new MyFragment(); ข้อไหนเจาะจงกว่ากันจริงหรือ? หรือโดยทั่วไปของคำถามเป็นการใช้งานไม่ถูกต้อง: Parent x=new Child(); แทน Child x=new Child(); หากเราสามารถเปลี่ยนคนที่เคยเป็นคนหลังได้โดยไม่ผิดพลาด

5
การปฏิบัติที่ไม่ดี - สลับกรณีเพื่อตั้งค่าสภาพแวดล้อม
ในช่วงสามปีที่ผ่านมาที่ฉันทำงานเป็นนักพัฒนาฉันได้เห็นตัวอย่างมากมายที่ผู้คนใช้คำสั่งสวิตช์เพื่อกำหนดเส้นทาง (ทั้งในส่วนหลังและส่วนหน้า) สำหรับ URL ด้านล่างเป็นตัวอย่างของสิ่งนี้: ตัวอย่างด้านหลัง (C #): public static string getHost(EnvironmentEnum environment){ var path = String.Empty; switch (environment) { case EnvironmentEnum.dev: path = "http://localhost:55793/"; break; case EnvironmentEnum.uat: path = "http://dev.yourpath.com/"; break; case EnvironmentEnum.production: path = "http://yourpath.com/"; break; } return path; } ตัวอย่างหน้า (JavaScript): (function () { if (window.location.host.indexOf("localhost") !== …

8
ลักษณะใดที่ดีกว่า (ตัวแปรอินสแตนซ์กับค่าตอบแทน) ใน Java
ฉันมักจะพบว่าตัวเองกำลังดิ้นรนเพื่อตัดสินใจว่าจะใช้วิธีใดในสองวิธีนี้เมื่อฉันต้องการใช้ข้อมูลทั่วไปในบางวิธีในชั้นเรียนของฉัน อะไรจะเป็นทางเลือกที่ดีกว่า ในตัวเลือกนี้ฉันสามารถสร้างตัวแปรอินสแตนซ์เพื่อหลีกเลี่ยงความต้องการที่จะต้องประกาศตัวแปรเพิ่มเติมและเพื่อหลีกเลี่ยงการกำหนดพารามิเตอร์เมธอด public class MyClass { private int var1; MyClass(){ doSomething(); doSomethingElse(); doMoreStuff(); } private void doSomething(){ var1 = 2; } private void doSomethingElse(){ int var2 = var1 + 1; } private void doMoreStuff(){ int var3 = var1 - 1; } } หรือเพียงแค่สร้างตัวแปรท้องถิ่นและส่งให้พวกเขาเป็นอาร์กิวเมนต์? public class MyClass { MyClass(){ int …

8
เป็นวิธีปฏิบัติที่ดีที่จะใช้ List of Enums หรือไม่
ฉันกำลังทำงานบนระบบที่มีผู้ใช้และผู้ใช้แต่ละคนมีหนึ่งหรือหลายบทบาท เป็นวิธีปฏิบัติที่ดีที่จะใช้ค่า List of Enum กับผู้ใช้หรือไม่ ฉันไม่สามารถคิดอะไรได้ดีไปกว่านี้ แต่มันก็ไม่เป็นไร enum Role{ Admin = 1, User = 2, } class User{ ... List<Role> Roles {get;set;} }

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