คำถามติดแท็ก patterns-and-practices

รูปแบบการออกแบบ (โซลูชันที่สามารถทำซ้ำได้สำหรับปัญหาที่เกิดขึ้นทั่วไป) และแนวทางปฏิบัติที่ดีที่สุดในวิศวกรรมซอฟต์แวร์

2
RESTful API ควรจะสามารถส่งคืนไฟล์หรือเพียงแค่ตำแหน่ง
นี่ทำให้ฉันงุนงงมาระยะหนึ่งแล้ว ตัวอย่างเช่นเรามี REST API ที่ให้เนื้อหาพื้นฐานไปยังระบบการบริโภคและการผลิต JSON ที่จุดสิ้นสุดนี้จะสร้าง URL ให้กับรูปภาพและคำอธิบายและพบได้ดังนี้: // localhost / myApi / pictures / 1 { id: 1, description: "This is a pretty picture of a daisy", URL: <OUR URL> } ตอนนี้ OUR_URL ควรชี้ไปที่ตำแหน่งบน API เช่น // localhost / myApi / files / pictures / 1 ซึ่งส่งคืน JPG …

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

3
เมื่อใดที่ Efferent / Afferent coupling ดีหรือไม่ดี
ฉันมีการสอบรูปแบบซอฟต์แวร์ในสัปดาห์นี้และหนึ่งในหัวข้อที่เราต้องศึกษาคือการมีเพศสัมพันธ์แบบ Efferent และ Afferent ฉันเข้าใจแพคเกจที่มี Ce สูง (ข้อต่อที่มีประสิทธิภาพ) ถ้ามันขึ้นอยู่กับประเภทอื่น ๆ ตัวอย่างเช่น: class Car{ Engine engine; Wheel wheel; Body body; } คลาสนี้จะมีคัปปลิ้งที่มีประสิทธิภาพสูงขึ้นอยู่กับประเภทเครื่องยนต์ล้อและตัวถัง ในขณะที่ประเภท "ล้อ" จะมี Ca สูง (การเชื่อมต่อแบบ afferent) ถ้ามีแพ็คเกจอื่น ๆ หลายอย่างขึ้นอยู่กับมัน (รถยนต์, เครื่องบิน, จักรยาน) หนึ่งในคำถามที่เป็นไปได้ในการสอบของเราคือเมื่อใดที่เอฟเฟนท์ / เอฟเฟอเรนท์มีเพศสัมพันธ์ดีหรือไม่ดี? สิ่งนี้ดูแปลกสำหรับฉันเพราะเหตุผลโปรแกรมจะต้องมีแพ็คเกจ / คลาสที่มีทั้งคู่ Efferent / Afferent สูง ไม่มีใครมีตัวอย่างของเมื่อ / ที่สูงออกหรือมีเพศสัมพันธ์ afferent ดี / …

4
การลดสำเร็จรูปในชั้นเรียนที่ใช้ส่วนต่อประสานผ่านองค์ประกอบ
ฉันได้เรียน: Aว่าเป็นคอมโพสิตของจำนวนของชั้นเรียนขนาดเล็กB, และCD B, CและDใช้อินเตอร์เฟซIB, ICและIDตามลำดับ ตั้งแต่AรองรับทุกการทำงานของB, CและD, AการดำเนินการIB, ICและIDเช่นกัน แต่นี้โชคไม่ดีที่นำไปสู่การเป็นจำนวนมากเส้นทางใหม่ในการดำเนินการA ชอบมาก interface IB { int Foo {get;} } public class B : IB { public int Foo {get {return 5;}} } interface IC { void Bar(); } public class C : IC { public void Bar() { } } …

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

4
ทุกคลาสที่ฉันเขียนติดกับอินเตอร์เฟสหรือไม่?
ฉันกำลังเขียนเกมใน typescript และตัดสินใจว่าจะลองทำตามแนวคิดของ " การเขียนโปรแกรมด้วยอินเตอร์เฟส " ซึ่งคุณเขียนโค้ดตามอินเตอร์เฟสแทนการใช้งานของวัตถุ ฉันเขียนอินเทอร์เฟซจำนวนมากและคลาสที่ใช้งานพวกเขาจากนั้นถอยกลับและตระหนักว่าคลาสนั้นง่ายพอที่ฉันจะไม่ต้องเปลี่ยนการใช้งานเนื่องจากมีวิธีเดียวที่จะทำสิ่งที่ คลาสทำ (เคลื่อนที่Phaser.Spriteในลักษณะที่ จำกัด เพื่อทำตัวเหมือนรถถัง) จากนั้นฉันจำได้ว่าได้อ่านเมื่อไม่กี่ปีที่ผ่านมาเกี่ยวกับแนวคิดของYAGNIซึ่งโดยพื้นฐานแล้วคุณไม่ควรสร้างรหัสของคุณมากเกินไปเพื่อรวมสิ่งที่คุณไม่เคยใช้ การปฏิบัติตามแนวทางปฏิบัติที่ดีที่สุดทุกคลาสควรใช้อินเทอร์เฟซหรือคุณควร จำกัด เฉพาะคลาสที่คุณคาดว่าจะมีการแลกเปลี่ยนในอนาคต

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

5
การออกแบบสถาปัตยกรรมที่แข็งแกร่งสำหรับการส่งออกหลายประเภท?
ฉันกำลังมองหารูปแบบหรือคำแนะนำทางสถาปัตยกรรมสำหรับคุณสมบัติที่กำลังจะมาถึงฉันกำลังออกแบบ โดยพื้นฐานแล้วมันเป็นคุณสมบัติการส่งออกที่มีเป้าหมายการส่งออกหลายรายการและฉันกำลังมองหาวิธีที่จะทำให้เป็นเรื่องง่ายพอที่การเสียบเป้าหมายการส่งออกใหม่ไม่ต้องการการเปลี่ยนแปลงหลักมากมาย ตามเป้าหมายการส่งออกฉันเพียงแค่อ้างถึงประเภทต่างๆของการส่งออกไม่ว่าจะเป็น PDF, งานนำเสนอ PowerPoint, เอกสาร Word, RSS, ฯลฯ ฉันมีชุดฐานของข้อมูลซึ่งแสดงใน JSON และ XML ข้อมูลนี้ใช้ในการสร้างภาพ (โดยใช้หมายเลขหรือประเภทการส่งออกใด ๆ [เช่น PNG, JPG, GIF, ฯลฯ ), กราฟ, การแสดงข้อความ, ตารางและอื่น ๆ ฉันพยายามหาวิธีทำให้นามธรรมการเรนเดอร์และเลย์เอาต์ลงในการเรนเดอร์หรือเอ็นจิ้นเลย์เอาต์ที่รองรับการเพิ่มเป้าหมายการส่งออกเพิ่มเติม ความช่วยเหลือ / คำแนะนำ / แหล่งข้อมูลเกี่ยวกับวิธีการเข้าถึงสิ่งนี้จะได้รับการชื่นชมอย่างมาก ขอบคุณล่วงหน้า. สำหรับการแสดงรูปภาพของสิ่งที่ฉันพยายามทำ

8
การออกแบบและการปฏิบัติเพื่อป้องกันรายการ null ที่ผิดพลาดจากฐานข้อมูล
ส่วนหนึ่งของโปรแกรมของฉันดึงข้อมูลจากหลาย ๆ ตารางและคอลัมน์ในฐานข้อมูลของฉันเพื่อการประมวลผล บางคอลัมน์อาจเป็นnullแต่ในบริบทการประมวลผลปัจจุบันที่เป็นข้อผิดพลาด สิ่งนี้จะ "เกิดขึ้นตามหลักวิชา" ไม่ควรเกิดขึ้นดังนั้นหากมันชี้ไปที่ข้อมูลที่ไม่ดี ข้อผิดพลาดที่มีความรุนแรงแตกต่างกันขึ้นซึ่งข้อมูลคือnull; เช่นสำหรับบางฟิลด์การประมวลผลควรจะหยุดและบางคนได้รับแจ้งสำหรับคนอื่น ๆ การประมวลผลควรได้รับอนุญาตให้ดำเนินการต่อและเพียงแค่แจ้งใครบางคน มีสถาปัตยกรรมที่ดีหรือหลักการออกแบบเพื่อจัดการกับรายการที่หายาก แต่เป็นไปได้nullหรือไม่? โซลูชันควรเป็นไปได้ที่จะนำไปใช้กับ Java แต่ฉันไม่ได้ใช้แท็กเพราะฉันคิดว่าปัญหาค่อนข้างไม่เชื่อเรื่องภาษา ความคิดบางอย่างที่ฉันมี: ใช้ NOT NULL ที่ง่ายที่สุดคือการใช้ข้อ จำกัด NOT NULL ในฐานข้อมูล แต่ถ้าหากการแทรกข้อมูลดั้งเดิมมีความสำคัญมากกว่านั้นขั้นตอนการประมวลผลในภายหลังจะเป็นอย่างไร ดังนั้นในกรณีที่ส่วนแทรกจะใส่nullลงในตาราง (อาจเป็นเพราะข้อบกพร่องหรืออาจเป็นเหตุผลที่ถูกต้อง) ฉันไม่ต้องการให้ส่วนแทรกล้มเหลว สมมติว่าส่วนต่าง ๆ ของโปรแกรมขึ้นอยู่กับข้อมูลที่ใส่เข้าไป แต่ไม่ได้อยู่ในคอลัมน์นี้ ดังนั้นฉันจึงค่อนข้างเสี่ยงข้อผิดพลาดในขั้นตอนการประมวลผลปัจจุบันแทนขั้นตอนการแทรก นั่นเป็นเหตุผลที่ฉันไม่ต้องการใช้ข้อ จำกัด NOT NULL อย่างไร้เดียงสาขึ้นอยู่กับ NullPointerException ฉันสามารถใช้ข้อมูลราวกับว่าฉันคาดหวังว่ามันจะอยู่ที่นั่นเสมอ (และนั่นควรจะเป็นอย่างนั้นจริง ๆ ) และจับ NPE ที่ได้ในระดับที่เหมาะสม (เช่นเพื่อให้การประมวลผลของรายการปัจจุบันหยุดลง แต่ไม่ใช่ความคืบหน้าการประมวลผลทั้งหมด ) …

8
'การเพิ่มประสิทธิภาพโค้ด' เมื่อใด == 'โครงสร้างข้อมูล' เมื่อใด
บทความล่าสุดโดย ycombinatorแสดงความคิดเห็นด้วยหลักการของโปรแกรมเมอร์ที่ยอดเยี่ยม #7. โปรแกรมเมอร์ที่ดี: ฉันเพิ่มประสิทธิภาพรหัส โปรแกรมเมอร์ที่ดีกว่า: ฉันจัดโครงสร้างข้อมูล โปรแกรมเมอร์ที่ดีที่สุด: ความแตกต่างคืออะไร? การยอมรับแนวคิดที่เป็นอัตนัยและเป็นที่ถกเถียงกัน - ไม่มีใครมีตำแหน่งในสิ่งนี้หมายความว่าอะไร? ฉันทำ แต่ฉันต้องการแก้ไขคำถามนี้ในภายหลังด้วยความคิดของฉันเพื่อไม่ให้คำตอบที่จูงใจ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.