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

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

4
วิธีใช้ Dependency Injection ร่วมกับรูปแบบ Factory
พิจารณาโมดูลที่รับผิดชอบการแยกวิเคราะห์ไฟล์ประเภทที่กำหนด ฉันกำลังคิดของการใช้รูปแบบกลยุทธ์เพื่อรับมือกับปัญหานี้ที่ผมได้อธิบายไปแล้วกว่าที่นี่ โปรดอ้างอิงโพสต์ที่เชื่อมโยงก่อนที่จะดำเนินการกับคำถามนี้ พิจารณาคลาส B ที่ต้องการเนื้อหาของไฟล์ product.xml คลาสนี้จะต้องสร้างอินสแตนซ์ที่เป็นรูปธรรมที่เหมาะสมของตัวแยกวิเคราะห์ Parser เพื่อแยกไฟล์ XML ฉันสามารถมอบอินสแตนซ์ของผู้ใช้งานคอนกรีตที่เหมาะสมให้กับโรงงานเช่นคลาส B "มี" โรงงาน " อย่างไรก็ตามคลาส B จะ "พึ่งพา" ในโรงงานเพื่อสร้างอินสแตนซ์ให้กับผู้ใช้งานที่เป็นรูปธรรม ซึ่งหมายความว่าตัวสร้างหรือวิธีการตั้งค่าในคลาส B จะต้องผ่านโรงงาน ดังนั้นโรงงานและคลาส B ที่ต้องแยกวิเคราะห์ไฟล์จะถูกผนวกเข้าด้วยกันอย่างแน่นหนา ฉันเข้าใจว่าฉันอาจผิดอย่างสมบูรณ์เกี่ยวกับสิ่งที่ฉันได้อธิบายไปแล้ว ฉันต้องการทราบว่าฉันสามารถใช้การฉีดพึ่งพาในสถานการณ์ที่การพึ่งพาที่จะฉีดเป็นโรงงานหรือไม่และเป็นวิธีที่เหมาะสมในการดำเนินการนี้เพื่อให้ฉันสามารถใช้ประโยชน์จากพื้นที่เช่นการเยาะเย้ยโรงงานในการทดสอบหน่วยของฉัน

1
กระดาษของ Peter Norvig อ้างโดย Brendan Eich
ฉันกำลังอ่าน Coders at Work และ Brendan Eich อ้างอิงบทความจาก Norvig ตั้งแต่ตอนที่เขาอยู่ที่ Harlequin ว่า "รูปแบบการออกแบบเป็นเพียงแค่ข้อบกพร่องในภาษาการเขียนโปรแกรมของคุณ" ทุกคนสามารถให้ลิงก์ไปยังบทความนี้ได้หรือไม่

1
ตัวตรวจสอบความเข้ากันได้ของใบอนุญาตโอเพนซอร์ส
มีเครื่องมือสำหรับตรวจสอบหรือไม่ว่ามีใบอนุญาตโอเพ่นซอร์สหลายแบบที่เข้ากันได้หรือไม่? ฉันวางแผนที่จะสร้างเครื่องมือต่าง ๆ ที่ใช้ใบอนุญาต Apache เพื่อแจกจ่ายเนื่องจากใบอนุญาตของ Apache ดูเหมือนจะทำให้เกิดความสมดุลระหว่างการอนุญาตและการบังคับใช้ตามกฎหมาย อย่างไรก็ตามฉันต้องการรวมส่วนประกอบจากโครงการโอเพ่นซอร์สอื่น ๆ ในฐานรหัสของฉันหรือทำให้อะแดปเตอร์พร้อมใช้งานเพื่อให้ผู้ใช้สามารถรวมส่วนประกอบดังกล่าวเข้ากับฐานรหัสของฉันได้ ตัวอย่างเช่นฉันต้องการรวมเครื่องมือแก้ไข HTML ที่หลากหลายเช่น CKEditor หรือ TinyMCE ในแพ็คเกจ แต่การทำเช่นนั้นเป็นการละเมิดสัญญาอนุญาตของโครงการใดโครงการหนึ่งหรือไม่ ฉันค่อนข้างแน่ใจว่าถ้าฉันใช้รหัส GPL มันจะบังคับให้ฉันทำโครงการ GPL ของฉันด้วยและฉันไม่ต้องการทำเช่นนั้น แต่แล้ว MPL, LGPL และอื่น ๆ ล่ะ? ฉันอยากจะตัดสินใจเรื่องนี้อย่างถี่ถ้วนในเรื่องทางเทคนิค แต่ถ้าคุณกำลังทำโอเพนซอร์สมันคงโง่มากที่จะเพิกเฉยต่อความปรารถนาของโครงการโอเพ่นซอร์สอื่น ๆ ฉันได้ลองค้นหาเครื่องมือเพื่อช่วยในการตัดสินใจว่าไลเซนส์ X นั้นเข้ากันได้กับไลเซนส์ Y หรือไม่หากทิศทางนั้นเข้ากันได้ใน (X สามารถรวม Y ได้โดยไม่มีปัญหา แต่ถ้า Y รวม X อาจมีปัญหา ฯลฯ ) และผลที่ตามมาของข้อกำหนดสิทธิการใช้งานของคุณคืออะไรหากคุณใส่รหัสที่มีข้อกำหนดสิทธิ์ใช้งานอื่น …

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

2
คำแนะนำที่ดีเกี่ยวกับการเลือกขนาดจุดที่จะใช้กับ Agile / SCRUM?
เรากำลังใช้ Pivotal Tracker สำหรับโครงการของเราซึ่งให้เราเลือกจากเครื่องชั่งสามจุดเหล่านี้: 0,1,2,3 0,2,4,8 0,1,3,5,8 และฉันกำลังมองหาแหล่งข้อมูลเพื่อช่วยเป็นแนวทางในการตัดสินใจของเรา (หลังจากใช้ 0,1,2,3 สำหรับการทำซ้ำสองครั้งเราจะเห็นว่าหนึ่งในนั้นจะมีประโยชน์มากขึ้นหรือมีความหมายมากขึ้น)
10 agile  scrum 

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

5
หาก - อื่น ๆ บันไดที่ควรจะจับเงื่อนไขทั้งหมด - ควรเพิ่มประโยคสุดท้ายซ้ำซ้อน?
นี่คือสิ่งที่ฉันทำมากเมื่อเร็ว ๆ นี้ ตัวอย่าง: setCircle(circle, i, { current }) { if (i == current) { circle.src = 'images/25CE.svg' circle.alt = 'Now picking' } else if (i < current) { circle.src = 'images/25C9.svg' circle.alt = 'Pick failed' } else if (i > current) { circle.src = 'images/25CB.svg' circle.alt = 'Pick chance' …

5
คุณมีการทดสอบอัตโนมัติเพียงพอที่จะมั่นใจในขั้นตอนการรวมระบบอย่างต่อเนื่องของคุณเมื่อใด
การรวมอย่างต่อเนื่องกับการทดสอบมีประโยชน์สำหรับการตรวจสอบให้แน่ใจว่าคุณได้ตรวจสอบรหัส "shippable" ตลอดเวลา อย่างไรก็ตามมันเป็นเรื่องยากที่จะติดตามชุดการทดสอบที่ครอบคลุมและบ่อยครั้งที่รู้สึกว่างานสร้างนั้นจะต้องมีค่ามาก คุณควรรู้สึกมั่นใจในการทดสอบ CI ของคุณมากแค่ไหน คุณใช้การวัดบางประเภทในการตัดสินใจเมื่อมีการทดสอบเพียงพอหรือไม่

5
เราสามารถแทนที่การสืบทอดโดยใช้รูปแบบกลยุทธ์และการฉีดการพึ่งพาได้หรือไม่
ตัวอย่างเช่น: var duckBehaviors = new Duckbehavior(); duckBehaviors.quackBehavior = new Quack(); duckBehaviors.flyBehavior = new FlyWithWings(); Duck mallardDuck = new Duck(DuckTypes.MallardDuck, duckBehaviors) เนื่องจากคลาส Duck มีพฤติกรรมทั้งหมด (นามธรรม) การสร้างคลาสใหม่MallardDuck(ซึ่งขยายDuck) จึงไม่จำเป็นต้องมี การอ้างอิง: รูปแบบการออกแบบส่วนหัวแรกบทที่ 1

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

5
ฉันต้องการทริกเกอร์สำหรับฐานข้อมูลเชิงสัมพันธ์เช่น PostgreSQL หรือไม่
ฉันรู้ว่าสามารถใช้ทริกเกอร์เพื่อตรวจสอบข้อมูลที่เก็บไว้เพื่อให้ฐานข้อมูลสอดคล้องกัน อย่างไรก็ตามทำไมไม่ทำการตรวจสอบความถูกต้องของข้อมูลทางด้านแอปพลิเคชันก่อนที่จะจัดเก็บลงในฐานข้อมูล ตัวอย่างเช่นเราเก็บลูกค้าและเราต้องการทำการตรวจสอบบางอย่างที่ไม่สามารถทำได้ในระดับ DDL https://severalnines.com/blog/postgresql-triggers-and-stored-function-basics อีกตัวอย่างหนึ่งคือการตรวจสอบ ปรับปรุง ทริกเกอร์และธุรกรรมฐานข้อมูลทำงานร่วมกันอย่างไร ตัวอย่างเช่นหากฉันต้องการทำการตรวจสอบความถูกต้องของข้อมูลที่ถูกแทรก มันทำภายในการทำธุรกรรม จะเกิดอะไรขึ้นก่อนหน้านี้: การทำธุรกรรมเกิดขึ้นหรือมีการดำเนินการทริกเกอร์

4
วิธีนี้ในการเรียกฟังก์ชั่นเป็นการฝึกที่ไม่ดีหรือไม่?
ฉันมีรหัสต่อไปนี้: public void moveCameraTo(Location location){ moveCameraTo(location.getLatitude(), location.getLongitude()); } public void moveCameraTo(double latitude, double longitude){ LatLng latLng = new LatLng(latitude, longitude); moveCameraTo(latLng); } public void moveCameraTo(LatLng latLng){ GoogleMap googleMap = getGoogleMap(); cameraUpdate = CameraUpdateFactory.newLatLngZoom(latLng, INITIAL_MAP_ZOOM_LEVEL); googleMap.moveCamera(cameraUpdate); } ฉันคิดว่าด้วยวิธีนี้ฉันกำจัดความรับผิดชอบในการรู้ว่าสิ่งที่อยู่LatLngในชั้นเรียนอื่นเช่น และคุณไม่จำเป็นต้องเตรียมข้อมูลก่อนเรียกฟังก์ชั่น คุณคิดอย่างไร? วิธีนี้มีชื่อหรือไม่? เป็นการฝึกที่ไม่ดีจริง ๆ หรือ?

6
คำจำกัดความที่ดีที่สุดสำหรับการพึ่งพาการฉีดคืออะไร?
ทุกครั้งที่มีคนมาถึงฉันและขอให้ฉันกำหนด Dependency Injection ตามแนวคิดและอธิบายข้อดีข้อเสียของการใช้ DI ในการออกแบบซอฟต์แวร์ ฉันยอมรับว่าฉันมีปัญหาในการอธิบายแนวคิดของ DI ทุกครั้งที่ฉันต้องบอกพวกเขาเกี่ยวกับประวัติศาสตร์เกี่ยวกับหลักการความรับผิดชอบเดียวองค์ประกอบการสืบทอด ฯลฯ ใครสามารถช่วยฉันอธิบายวิธีที่ดีที่สุดในการอธิบาย DI สำหรับนักพัฒนา

4
"นามธรรมก่อนวัยอันควร" คืออะไร?
ฉันได้ยินวลีที่ถูกโยนและฉันมีข้อโต้แย้งที่ฟังดูบ้าอย่างสมบูรณ์ (ขออภัยถ้าฉันกำลังทำฟางอยู่ที่นี่ไม่ใช่ความตั้งใจของฉัน) โดยทั่วไปจะมีบางอย่างตาม: คุณไม่ต้องการสร้างสิ่งที่เป็นนามธรรมก่อนที่คุณจะรู้ว่ากรณีทั่วไปคืออะไรมิฉะนั้น (1) คุณอาจวางสิ่งต่าง ๆ ในสิ่งที่เป็นนามธรรมของคุณหรือ (2) ไม่สนใจสิ่งที่มีความสำคัญ (1) สำหรับฉันนี่ดูเหมือนว่าโปรแกรมเมอร์ไม่ได้ใช้งานได้จริงพวกเขาได้ตั้งสมมติฐานว่าสิ่งต่าง ๆ จะมีอยู่ในโปรแกรมสุดท้ายที่ไม่ได้ทำงานดังนั้นพวกเขาจึงทำงานร่วมกับสิ่งที่เป็นนามธรรมในระดับต่ำปัญหาไม่ใช่ สิ่งที่เป็นนามธรรมก่อนวัยอันควร (2) การทิ้งสิ่งที่มีความสำคัญเป็นสิ่งหนึ่งอาจเป็นไปได้อย่างสิ้นเชิงที่บางสิ่งจะถูกตัดออกจากข้อมูลจำเพาะที่ในภายหลังกลายเป็นเรื่องสำคัญทางออกสำหรับสิ่งนี้ไม่ได้เกิดขึ้นกับการตัดสินใจของคุณและทรัพยากรเสียเปล่า เดาผิดก็เพื่อให้ได้ข้อมูลเพิ่มเติมจากลูกค้า เราควรทำงานจากนามธรรมลงไปถึงข้อตกลงเพราะนี่เป็นวิธีที่จริงจังที่สุดในการทำสิ่งต่าง ๆ และไม่ใช่วิธีอื่น ๆ ถ้าเราไม่ทำเช่นนั้นเราก็เสี่ยงต่อการเข้าใจผิดของลูกค้าและการสร้างสิ่งต่าง ๆ ที่จำเป็นต้องเปลี่ยน แต่ถ้าเราสร้างเพียงนามธรรมที่ลูกค้าได้กำหนดไว้ในภาษาของพวกเขาเองเราก็ไม่เคยตกอยู่ในความเสี่ยงนี้ ภาพหนึ่งในที่มืดโดยมีการสรุปบางอย่าง) ใช่เป็นไปได้ที่ลูกค้าจะเปลี่ยนใจเกี่ยวกับรายละเอียด แต่สิ่งที่พวกเขาเคยใช้ในการสื่อสารสิ่งที่พวกเขาต้องการมักจะยังคงใช้ได้ ต่อไปนี้เป็นตัวอย่างสมมติว่าลูกค้าต้องการให้คุณสร้างหุ่นยนต์ที่บรรจุถุง: public abstract class BaggingRobot() { private Collection<Item> items; public abstract void bag(Item item); } เรากำลังสร้างบางสิ่งจากนามธรรมที่ลูกค้าใช้โดยไม่ต้องลงรายละเอียดเพิ่มเติมกับสิ่งที่เราไม่รู้ นี่คือความยืดหยุ่นอย่างยิ่งฉันเห็นสิ่งนี้ถูกเรียกว่า "นามธรรมก่อนวัยอันควร" เมื่อในความเป็นจริงมันจะเร็วกว่าที่จะคิดว่าวิธีการบรรจุถุงถูกนำไปใช้อย่างไรพูดหลังจากพูดคุยกับลูกค้าที่พวกเขาต้องการ . เพื่ออัปเดตชั้นเรียนของฉันทั้งหมดที่ฉันต้องทำคือเปลี่ยนลายเซ็น …

2
ความปลอดภัยของเธรดสามารถให้บริการได้อย่างไรโดยภาษาการเขียนโปรแกรมคล้ายกับวิธีที่ความปลอดภัยของหน่วยความจำมีให้โดย Java และ C #
Java และ C # ให้ความปลอดภัยของหน่วยความจำโดยการตรวจสอบขอบเขตของอาเรย์และตัวชี้ dereferences กลไกใดที่สามารถนำไปใช้กับภาษาโปรแกรมเพื่อป้องกันความเป็นไปได้ของสภาพการแข่งขันและการหยุดชะงัก

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