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

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

4
ควรทำการฉีดแบบพึ่งพาได้ใน ctor หรือต่อวิธี?
พิจารณา: public class CtorInjectionExample { public CtorInjectionExample(ISomeRepository SomeRepositoryIn, IOtherRepository OtherRepositoryIn) { this._someRepository = SomeRepositoryIn; this._otherRepository = OtherRepositoryIn; } public void SomeMethod() { //use this._someRepository } public void OtherMethod() { //use this._otherRepository } } ต่อต้าน: public class MethodInjectionExample { public MethodInjectionExample() { } public void SomeMethod(ISomeRepository SomeRepositoryIn) { //use SomeRepositoryIn } …

5
ความแตกต่างระหว่าง DevOps และการจัดการการกำหนดค่าซอฟต์แวร์
ความแตกต่างระหว่างการดำเนินการพัฒนาและการจัดการการกำหนดค่าซอฟต์แวร์คืออะไร? สำหรับฉันดูเหมือนว่าจะเหมือนกันตราบใดที่ทั้ง DevOps และ Software Configuration Management มุ่งเน้นไปที่: การสร้างโครงสร้างพื้นฐานการพัฒนา - รับผิดชอบการควบคุมเวอร์ชันการจัดการการสร้างการจัดการการปรับใช้การจัดการการพึ่งพาการรวมอย่างต่อเนื่องและการจัดส่งฯลฯ โดยใช้วิธีปฏิบัติที่ดีที่สุดสำหรับการจัดสภาพแวดล้อมการพัฒนา การประกันคุณภาพของกระบวนการพัฒนา - รวบรวมตัวชี้วัดประสิทธิภาพการพัฒนาการทำงานเพื่อกำจัดคอขวดของกระบวนการพัฒนา (การทดสอบหน่วยการทำงานการประเมินความครอบคลุมการทดสอบหน่วย การจัดการโครงสร้างพื้นฐาน - แพลตฟอร์มเป้าหมายและข้อมูลเฉพาะ การจัดการการปล่อย - ทำให้แน่ใจว่ามีการส่งมอบการปล่อยให้กับลูกค้า / ลูกค้าตรงเวลา บางทีฉันอาจจะหายไปบางอย่าง ลิงค์นี้แสดงให้เห็นว่าการใช้คำว่า 'การจัดการการกำหนดค่าซอฟต์แวร์' มีผลบังคับใช้ แต่ถึงอย่างนั้นคุณจะใช้การรวมคำแบบใดในการอธิบายกิจกรรมที่ระบุไว้: การดำเนินการพัฒนาหรือซอฟแวร์การบริหารจัดการการกำหนดค่า ?

2
IETF ต่างจาก W3C อย่างไร
ฉันติดตามองค์กรเหล่านี้ (สถาบันหน่วยงานหรืออะไรก็ตาม) มาเกือบ 3 เดือนแล้วและทั้งคู่อ้างว่าพวกเขากำลังพยายามทำให้อินเทอร์เน็ตดีขึ้น พวกเขากำลังสร้างเอกสารภายใต้ชื่อ RFC (สำหรับ IETF) และคำแนะนำ (สำหรับ W3C) เพื่อเป็นแนวทางให้ผู้อื่น องค์กรอื่นที่ชื่อว่า WHATWG ได้เริ่มต้นเส้นทางใหม่ในการพัฒนาเว็บและชุมชนอื่นดำเนินการภายใต้ชื่อ Internet Society ฉันไม่รู้ทำไมองค์กรจำนวนมาก ฉันหมายถึงพวกเขาไม่สามารถถูกรวมเข้าด้วยกันได้ใช่ไหม พวกเขาแตกต่างกันจริง ๆ ? อย่างไร?

19
โปรแกรมเมอร์ต้องการหน่วยความจำที่ดีหรือไม่? [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจเรียกร้องให้มีการถกเถียงอภิปรายโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน7 ปีที่ผ่านมา ดูเหมือนว่าเราต้องจำไวยากรณ์ทุกประเภทเพื่อให้สามารถเขียนโปรแกรมได้ หากไม่มีหน่วยความจำที่ดีในการจดจำชื่อจะเป็นการยากที่จะเรียนรู้การเขียนโปรแกรม?
16 learning 

7
เหตุใด SSL / TLS จึงไม่รวมอยู่ในระบบปฏิบัติการสมัยใหม่
โปรโตคอลเครือข่ายพื้นฐานจำนวนมากที่ประกอบขึ้นเป็นโครงสร้างพื้นฐานของอินเทอร์เน็ตถูกสร้างขึ้นในระบบปฏิบัติการส่วนใหญ่ ตัวอย่างเช่น TCP, UDP และ DNS ทั้งหมดมีอยู่ใน Linux, UNIX และ Windows และให้บริการแก่โปรแกรมเมอร์ผ่าน API ระบบระดับต่ำ แต่เมื่อพูดถึง SSL หรือ TLS เราต้องเปลี่ยนไปใช้ห้องสมุดบุคคลที่สามเช่น OpenSSL หรือ Mozilla NSS SSL เป็นโปรโตคอลที่ค่อนข้างเก่าและโดยทั่วไปจะเป็นมาตรฐานอุตสาหกรรมที่แพร่หลายเหมือนกับ TCP / IP ดังนั้นทำไมมันไม่สร้างในระบบปฏิบัติการส่วนใหญ่

7
การวางแผนระยะยาวและความคล่องตัว?
ทีมของฉันเพิ่งผ่านขั้นตอนการวางแผนเกือบหนึ่งปีสำหรับงานของเรา เราแยกแผนออกเป็นสามขั้นตอน แต่ละเฟสจะมีการเปิดตัวสองสามครั้ง ฉันสงสัยว่าจากจุดที่เปรียวของคุณผิดหรือเปล่า? ฉันคิดว่ามันไม่ใช่ความคิดที่ไม่ดีเพราะเราไม่ได้ใช้เวลามากเกินไปในการออกแบบอะไรนอกจากขั้นตอนแรก ๆ เป็นไปได้ที่เราจะเปลี่ยนทิศทาง ในขณะเดียวกันก็เป็นเรื่องดีที่เราไม่ได้ทำอะไรในระยะเวลาอันใกล้เท่านั้น

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

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

22
คุณควรเริ่มคิดถึงการแสดง ณ จุดใด
ขณะที่ฉันกำลังสร้างแอปพลิเคชันฉันพบว่าตัวเองถามอยู่ตลอดเวลาว่านี่เป็นวิธีที่ดีที่สุดในการดำเนินการหรือใช้งานฟังก์ชั่นบางอย่าง บ่อยครั้งที่ฉันจะโพสต์คำถามใน stackoverflow หรือฟอรัมอื่นที่ต้องการความคิดเห็นเฉพาะเพื่อรับความคิดเห็นเกี่ยวกับวิธีที่จะไม่ "นำรถเข็นมาก่อนม้า" เกี่ยวกับประสิทธิภาพ โปรแกรมเมอร์ส่วนใหญ่ไม่คิดเกี่ยวกับประสิทธิภาพจนกว่าแอปพลิเคชันจะเสร็จสิ้นหรือประสิทธิภาพไม่เป็นที่ยอมรับอย่างแน่นอนหรือไม่? ฉันหมายถึงฉันเข้าใจว่าสภาพแวดล้อมการพัฒนาแตกต่างจากสภาพแวดล้อมการผลิตและคุณไม่ควรพึ่งพาผลลัพธ์จากแล็ปท็อป dev ของคุณอย่างสมบูรณ์ ... แต่มีวิธีปฏิบัติและเทคนิคที่ให้ประสิทธิภาพที่ดีกว่าคนอื่น ๆ การปฏิบัติที่ไม่ถูกต้องในการพิจารณาประสิทธิภาพตลอดกระบวนการพัฒนาหรือไม่ ฉันควรผลักดันข้อควรพิจารณาเหล่านี้ออกไปจนกว่าการปฏิบัติจริงจะเป็นแท็งก์น้ำหรือไม่? ปรับปรุง เพื่อความชัดเจนฉันกำลังพูดถึงสถานการณ์ที่คุณกำลังพิจารณาหรือกำลังจะทำงานกับฟังก์ชั่นบางอย่าง คุณรู้ว่ามีหลายวิธีในการปรับใช้ แต่คุณไม่แน่ใจว่าการปรับใช้แต่ละอย่างจะดีขึ้นอย่างไร อาจมีหลายเทคนิคที่คุณไม่คุ้นเคยด้วยซ้ำ ในระดับเล็ก ๆ วิธีการใด ๆ ที่อาจจะเพียงพอ แต่ในระดับขนาดใหญ่บางคนจะติดตามและบางคนจะไม่ บ่อยครั้งที่ฉันถามความคิดเห็นหรือคำแนะนำการตอบสนองคือ: กังวลกับมันในภายหลัง ...

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

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

3
ประโยชน์ที่ได้รับจากแบบจำลอง POCO ล้วนคืออะไร
ประโยชน์หลักของการมีโมเดล POCO บริสุทธิ์คืออะไร ฉันได้รับแบบจำลองที่ควรจะสะอาดและเรียบง่าย แต่ฉันมักจะชอบที่จะให้การดูแลรักษาวัตถุเด็กในชั้นเรียนรูปแบบ ตัวอย่างเช่นถ้าฉันมีClassAและClassBกำหนดดังนี้ public class ClassA { public string MyProp { get; set; } public IEnumerable<ClassB> Children { get; } public void AddChild(ClassB newChild) { /*... */ } public void RemoveChild(ClassB child) { /* ... */ } } public class ClassB { public string SomeProp { get; …
16 c#  .net  poco 

2
Microsoft ท้อใจใช้ 'var' ใน C # หรือไม่ (VS2017)
ฉันกำลังมองหาที่จะเกิดขึ้นในVisual Studio 2017 ภายใต้ส่วนชื่อเพิ่มประสิทธิภาพการผลิตจะมีภาพของ Visual Studio ที่ใช้ในการแทนที่var ที่เกิดขึ้นทั้งหมดด้วยประเภทที่ชัดเจน เห็นได้ชัดว่ารหัสมีปัญหาหลายอย่างที่ Visual Studio ระบุว่า 'ต้องการแก้ไข' ฉันต้องการที่จะตรวจสอบความเข้าใจของฉันใช้varใน C # ดังนั้นผมอ่านบทความจากปี 2011 โดยเอริค Lippert เรียกว่าการใช้ประโยชน์และ misuses ของการพิมพ์โดยปริยาย Eric พูดว่า: ใช้ var เมื่อคุณต้อง; เมื่อคุณใช้ประเภทที่ไม่ระบุชื่อ ใช้ var เมื่อชนิดของการประกาศชัดเจนจาก initializer โดยเฉพาะอย่างยิ่งถ้าเป็นการสร้างวัตถุ สิ่งนี้ช่วยลดความซ้ำซ้อน พิจารณาใช้ var หากรหัสเน้นความหมายของ "จุดประสงค์ทางธุรกิจ" ของตัวแปรและอธิบายรายละเอียด "กลไก" ของที่เก็บข้อมูล ใช้ประเภทที่ชัดเจนหากจำเป็นเพื่อให้เข้าใจและบำรุงรักษารหัสได้อย่างถูกต้อง ใช้ชื่อตัวแปรอธิบายโดยไม่คำนึงว่าคุณใช้“ var” ชื่อตัวแปรควรแสดงถึงความหมายของตัวแปรไม่ใช่รายละเอียดของที่เก็บ “ เลขฐานสิบ” ไม่ดี; “ …

5
ประโยชน์ของการมี "ไม่มีข้อยกเว้นรันไทม์" เช่น Elm เรียกร้องคืออะไร?
บางภาษาอ้างว่ามี "ไม่มีข้อยกเว้นสำหรับรันไทม์" เพื่อเป็นข้อได้เปรียบที่ชัดเจนกว่าภาษาอื่น ๆ ที่มี ฉันสับสนในเรื่องนี้ ข้อยกเว้นรันไทม์เป็นเพียงเครื่องมือเท่าที่ฉันรู้และเมื่อใช้กัน: คุณสามารถสื่อสารสถานะ "สกปรก" (ขว้างที่ข้อมูลที่ไม่คาดคิด) การเพิ่มสแต็กคุณสามารถชี้ไปที่ห่วงโซ่ของข้อผิดพลาด คุณสามารถแยกแยะระหว่างความยุ่งเหยิง (เช่นคืนค่าว่างในการป้อนข้อมูลที่ไม่ถูกต้อง) และการใช้งานที่ไม่ปลอดภัยที่ต้องการความสนใจจากนักพัฒนา (เช่นการโยนข้อยกเว้นในการป้อนข้อมูลที่ไม่ถูกต้อง) คุณสามารถเพิ่มรายละเอียดลงในข้อผิดพลาดของคุณด้วยข้อความข้อยกเว้นที่ให้รายละเอียดที่เป็นประโยชน์เพิ่มเติมช่วยแก้จุดบกพร่อง (ในทางทฤษฎี) ในทางกลับกันฉันพบว่ายากที่จะดีบักซอฟต์แวร์ที่ "กลืน" ข้อยกเว้น เช่น try { myFailingCode(); } catch { // no logs, no crashes, just a dirty state } ดังนั้นคำถามก็คืออะไรคือความได้เปรียบเชิงทฤษฎีที่แข็งแกร่งของการมี "ไม่มีข้อยกเว้นรันไทม์"? ตัวอย่าง https://guide.elm-lang.org/ ไม่มีข้อผิดพลาดรันไทม์ในทางปฏิบัติ ไม่มีค่าว่าง ไม่มีการกำหนดไม่ได้เป็นฟังก์ชั่น

2
DDD: ถูกต้องหรือไม่สำหรับการรวมรูทเพื่อระงับการอ้างอิงถึงการรวมรูทอื่น?
เมื่อติดตามการออกแบบที่ขับเคลื่อนด้วยโดเมน (DDD) จะถูกต้องหรือไม่สำหรับการรวมของรูทเพื่อเก็บการอ้างอิงไปยังเอนทิตีภายในที่เกิดขึ้นเป็นเอนทิตีรูทของการรวมแยกต่างหาก ฉันเชื่อว่านี่ไม่ถูกต้องส่วนใหญ่เป็นเพราะกฎนี้ในหนังสือสีฟ้า : ไม่มีสิ่งใดนอกขอบเขต AGGREGATE ที่สามารถเก็บการอ้างอิงถึงสิ่งใด ๆ ภายในยกเว้นราก ENTITY ENTITY รูทสามารถส่งการอ้างอิงไปยัง ENTITIES ภายในกับวัตถุอื่น ๆ ได้ แต่วัตถุเหล่านั้นสามารถใช้งานได้ชั่วคราวเท่านั้นและอาจไม่สามารถใช้อ้างอิงได้ รูทอาจส่งมอบค่าของวัตถุประสงค์ให้แก่วัตถุอื่นและไม่สำคัญว่าจะเกิดอะไรขึ้นกับมันเนื่องจากเป็นเพียงค่าและจะไม่มีการเชื่อมโยงกับ AGGREGATE อีกต่อไป หากการรวมรากถือการอ้างอิงไปยังการรวมรากอื่นขอบเขตของอดีตถูกละเมิดและแนวคิดทั้งหมดของการรวมเสียหายดังนั้นฉันเชื่อว่าถ้าการรวมรากดูเหมือนว่าจำเป็นต้องระงับการอ้างอิงถึงการรวมรากอื่นแล้วฉันต้อง เพื่อสร้างเอนทิตีที่แตกต่างกันซึ่งอาจจะแบ่งสมาชิกบางส่วนเหมือนกับเอนทิตีรูทอื่น แต่จะไม่มีข้อมูลประจำตัวทั่วโลกเช่นกฎอื่น ๆ ในรัฐหนังสือ: รูต ENTITIES มีตัวตนระดับโลก ENTITIES ภายในขอบเขตมีเอกลักษณ์เฉพาะที่ไม่ซ้ำกันภายใน AGGREGATE ฉันเชื่อว่านี่จะเป็นวิธีที่ถูกต้อง แต่เนื่องจากมันให้ความรู้สึกซ้ำซากและซ้ำซ้อน (เมื่อนำออกจากบริบทของ DDD ด้วย OOP บริสุทธิ์) ฉันกำลังขอคำติชม

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