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

รูปแบบการออกแบบเป็นโซลูชันที่ใช้ซ้ำได้ทั่วไปสำหรับปัญหาที่เกิดขึ้นทั่วไปในการออกแบบซอฟต์แวร์

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

3
โครงสร้างที่ไม่เปลี่ยนรูปและลำดับชั้นขององค์ประกอบลึก
ฉันกำลังพัฒนาแอพพลิเคชั่น GUI ทำงานหนักกับกราฟิก - คุณสามารถคิดได้ว่ามันเป็นตัวแก้ไขเวกเตอร์เพื่อประโยชน์ของตัวอย่าง การดึงดูดให้โครงสร้างข้อมูลทั้งหมดไม่สามารถเปลี่ยนแปลงได้ - ดังนั้นฉันสามารถเลิกทำ / ทำซ้ำคัดลอก / วางและอื่น ๆ อีกมากมายโดยไม่ต้องใช้ความพยายาม สำหรับประโยชน์ของความเรียบง่ายฉันจะใช้ตัวอย่างต่อไปนี้ - แอปพลิเคชันใช้ในการแก้ไขรูปหลายเหลี่ยมดังนั้นฉันจึงมีวัตถุ "รูปหลายเหลี่ยม" ซึ่งเป็นเพียงรายการของจุดที่ไม่เปลี่ยนรูป: Scene -> Polygon -> Point ดังนั้นฉันจึงมีตัวแปรที่เปลี่ยนแปลงไม่ได้เพียงตัวเดียวในโปรแกรมของฉัน - ตัวแปรที่เก็บวัตถุฉากปัจจุบัน ปัญหาที่ฉันเริ่มเมื่อฉันพยายามใช้การลากจุด - ในเวอร์ชันที่ไม่แน่นอนฉันก็คว้าPointวัตถุและเริ่มแก้ไขพิกัดของมัน ในเวอร์ชันที่ไม่เปลี่ยนรูป - ฉันติดอยู่ ฉันสามารถเก็บดัชนีของPolygonปัจจุบันSceneดัชนีจุดลากPolygonเข้ามาและแทนที่ทุกครั้ง แต่วิธีการนี้ไม่ได้ปรับขนาด - เมื่อระดับการเขียนเรียงกันถึง 5 และไกลออกไปแผ่นกันความร้อนก็จะทนไม่ได้ ฉันแน่ใจว่าปัญหานี้สามารถแก้ไขได้ - หลังจากทั้งหมดมี Haskell ที่มีโครงสร้างที่ไม่เปลี่ยนแปลงอย่างสมบูรณ์และ IO monad แต่ฉันไม่สามารถหาวิธีได้ คุณสามารถให้คำแนะนำแก่ฉันได้ไหม

2
รูปแบบการสังเกตการณ์ผ่าน HTTP และ TCP / IP (เซิร์ฟเวอร์ - ไคลเอ็นต์)
ฉันมีเซิร์ฟเวอร์และไคลเอนต์จำนวนมาก (ประมาณ 50 ไคลเอนต์) ที่เชื่อมต่อกับเซิร์ฟเวอร์นั้นขึ้นอยู่กับแอปพลิเคชันเว็บซึ่งแน่นอนว่าใช้โปรโตคอล HTTP ซึ่งใช้ TCP / IP ในทางกลับกัน (แก้ไขฉันหากฉันผิดเพราะฉัน เครือข่ายไม่เก่งจริงๆ) ปัญหาคือว่าฉันควรพัฒนากลไกการแจ้งเตือนซึ่งเมื่อใครบางคนส่งแบบฟอร์มที่มีค่าอันตรายผู้จัดการ (ผู้ที่เชื่อมต่อผ่านเว็บแอปพลิเคชันเดียวกัน) ควรได้รับป๊อปอัปแจ้งเตือนบนหน้าจอของเขาเกือบจะเป็นจริง - เวลา (ทันที) อย่างไรก็ตามเนื่องจากโปรโตคอล HTTP นั้นไร้สัญชาติฉันจึงสับสนเล็กน้อยที่นี่ ฉันไม่รู้ว่าฉันจะใช้สิ่งนี้ได้อย่างไร หนึ่งในวิธีแก้ปัญหาคือการใช้ JavaScript ข้างsetInterval()ฟังก์ชั่นเพื่อดึงข้อมูลในแต่ละวินาทีจากเซิร์ฟเวอร์ แต่ดูเหมือนว่าสกปรกเล็กน้อยสำหรับฉันและไม่เป็นมืออาชีพ พวกคุณมีความคิดที่จะนำโซลูชันอื่นมาใช้หรือไม่?

4
การสมัครมีบทคัดย่อชั้นเรียนจำนวนมากในใบสมัครของคุณหรือไม่?
เริ่มแรกเราต้องการใช้รูปแบบกลยุทธ์ด้วยการนำไปใช้งานที่แตกต่างกันของวิธีการในอินเทอร์เฟซ Commmon สิ่งเหล่านี้จะถูกเลือกที่รันไทม์ตามอินพุตของผู้ใช้ เมื่อมันปรากฏออกมาเรามีคลาสนามธรรมที่ใช้วิธีการทั่วไป 3 - 5 วิธีและเหลือเพียงวิธีเดียวสำหรับการใช้งานที่แตกต่างนั่นคือกลยุทธ์ อัปเดต: จากคลาสนามธรรมจำนวนมากฉันหมายถึงมีฟังก์ชันระดับสูงที่แตกต่างกัน 6 อย่างคือ 6 แพ็คเกจและแต่ละชุดมีอินเตอร์เฟส + AbstractImpl + (ชุดของ Actual Impl) นี่เป็นการออกแบบที่ไม่ดี แต่อย่างใด? มุมมองเชิงลบใด ๆ ในแง่ของการเพิ่มความสามารถในภายหลัง - ฉันเตรียมความพร้อมสำหรับการตรวจสอบรหัส / การออกแบบกับผู้สูงอายุ

1
สิทธิ์ / รูปแบบ / รูปแบบที่ถูกต้องสำหรับ. NET application
ฉันจำเป็นต้องใช้ความยืดหยุ่นและเรียบง่าย (ถ้ามีอยู่) และในเวลาเดียวกันก็ใช้วิธีการที่เป็นไปได้ จนถึงตอนนี้ฉันได้นำ MembershipProvider และ RoleProviders มาใช้ นี่เจ๋ง แต่ฉันจะไปไหนต่อ ฉันรู้สึกว่าฉันต้องการเพิ่มคำว่า "Priviledge" และมากกว่า hardcode ที่อยู่ในแอปพลิเคชัน ผู้ใช้จะกำหนดค่าบทบาทเพื่อเพิ่มสิทธิ์ให้กับบทบาทและกำหนดบทบาทให้กับผู้ใช้ เสียงนั้นเป็นแบบอย่างที่ดีหรือไม่? ฉันควรคิดถึงการเพิ่มสิทธิพิเศษระดับผู้ใช้ด้านบนของการเพิ่มพวกเขาลงในบทบาทหรือไม่ ฉันอาจ แต่ฉันนึกภาพปัญหาเกี่ยวกับการตั้งค่า (ทำให้สับสน) และการติดตามต่อไป หากฉันไม่ทำเช่นนั้นและผู้ใช้บางรายจะต้องมีสิทธิ์น้อยกว่า - ผู้ดูแลระบบจะต้องสร้างบทบาทอื่นเป็นต้น กระสุนเงินสำหรับระบบเช่นนี้? และทำไม Microsoft ไม่ไปไกลกว่านี้เพียงแค่ผู้ให้บริการสมาชิกและบทบาท? ความคิดอื่น: ปล่อยให้บทบาทเป็นผู้ถือ "priviledge" และ hardcode พวกเขา จากนั้นฉันสามารถโค้ดไปยังบทบาทเหล่านั้นภายในแอปโดยใช้มาร์กอัพ / คุณลักษณะที่มีอยู่ทั้งหมด - Microsoft ทั้งหมด เพิ่มเอนทิตีใหม่ "กลุ่ม" และสร้างความสัมพันธ์เช่นนี้ ผู้ใช้ กลุ่มผู้ใช้ กลุ่ม RoleGroups บทบาท วิธีนี้ฉันสามารถรวบรวมบทบาทเป็นกลุ่มและกำหนดกลุ่มเหล่านั้นให้กับผู้ใช้ …

1
หลักฐานปัจจุบันสนับสนุนการยอมรับบริบทผ่านแบบจำลองข้อมูลของแคนนอนหรือไม่
แนวคิด "บัญญัติ" นั้นแพร่หลายในซอฟต์แวร์ รูปแบบเช่นCanonical Model , Canonical Schema , Canonical Data Modelเป็นต้นดูเหมือนจะเกิดขึ้นซ้ำแล้วซ้ำอีกในการพัฒนา เช่นเดียวกับนักพัฒนาหลายคนฉันมักจะติดตามอย่างไม่ถี่ถ้วนภูมิปัญญาดั้งเดิมที่คุณต้องการแบบจำลองที่เป็นที่ยอมรับมิฉะนั้นคุณจะต้องเผชิญกับการระเบิดของนักทำแผนที่และนักแปล หรืออย่างน้อยฉันก็เคยทำเช่นนั้นจนกระทั่งสองสามปีที่ผ่านมาเมื่อฉันอ่านEF Vote of No Confidence เป็นครั้งแรก: สมมติฐานที่ครั้งหนึ่งเคยสนับสนุนการแสวงหารูปแบบข้อมูลที่ยอมรับไม่ได้และไม่สามารถรวมปัจจัยที่จะค้นพบได้เมื่อแนวคิดถูกนำไปใช้จริง เราพบว่าผ่านการลองผิดลองถูกมาหลายปีว่าการใช้แบบจำลองแยกต่างหากสำหรับแต่ละบริบทซึ่งอาจใช้แบบจำลองข้อมูลแคนนอนเป็นวิธีที่ซับซ้อนน้อยที่สุดเป็นวิธีที่มีค่าใช้จ่ายน้อยที่สุดและเป็นวิธีหนึ่งที่นำไปสู่ ของแอพพลิเคชั่นและอุปกรณ์ปลายทางโดยใช้แบบจำลองตามบริบทและเป็นวิธีการที่ไม่สนับสนุนให้เอนโทรปีของซอฟต์แวร์ที่เป็นแบบจำลองมาตรฐานยอมรับ บทความนี้ไม่มีหลักฐานใด ๆ ที่สนับสนุนข้อเรียกร้องของมัน แต่ทำให้ฉันสงสัยว่าวิธีการ CDM นั้นนานพอที่จะลองใช้ทางเลือกอื่นและซอฟต์แวร์ที่ได้นั้นไม่ได้ระเบิดอย่างแท้จริงหรือเป็นรูปเป็นร่าง แต่นั่นไม่ได้แปลว่าโดดเดี่ยวทั้งหมด ฉันเพิ่งจะโชคดี ดังนั้นฉันจึงสงสัยว่ามีการวิจัยอย่างจริงจังในเรื่องของผลกระทบระยะยาวในทางปฏิบัติของการมีแบบจำลองมาตรฐานและแบบจำลองเชิงบริบทในระบบซอฟต์แวร์หรือสถาปัตยกรรมหรือไม่? หรือถ้ามันยังเร็วเกินไปที่จะถามว่ามีนักพัฒนา / สถาปนิกคนใดเขียนเกี่ยวกับประสบการณ์ส่วนตัวที่เปลี่ยนจาก CDM เป็นแบบจำลองตามบริบทอิสระหรือในทางกลับกันและสิ่งที่เกิดขึ้นจริงในเรื่องการผลิตความซับซ้อนหรือความน่าเชื่อถือ แล้วความแตกต่างในระดับต่าง ๆ คือการใช้แบบจำลองเดียวกันในแอพพลิเคชั่นเดียวกับการใช้ข้ามระบบของแอพพลิเคชั่นหรือทั้งองค์กร (โปรดข้อเท็จจริงเท่านั้นยินดีต้อนรับเรื่องราวสงคราม แต่ไม่มีการเก็งกำไร)

6
ให้การนำเสนอเกี่ยวกับ "รูปแบบโค้ดและรูปแบบการออกแบบ" [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน5 ปีที่ผ่านมา บริษัท ของฉัน (เล็กประมาณ 40 คนใน 3 สำนักงาน) เป็นครั้งคราว "นักพัฒนาเวิร์คช็อป" ออนไลน์โดยที่ devs คนหนึ่งเป็นเจ้าภาพการนำเสนอเกี่ยวกับหัวข้อเทคโนโลยีบางอย่าง มันไม่จำเป็นต้องเกี่ยวกับงานของเรา แต่เพียงเพื่อช่วยให้ทุกคนพัฒนาทักษะและความเข้าใจของพวกเขา ฉันถูกขอให้โฮสต์รายการถัดไปและหัวข้อ (เลือกจากรายการที่ฉันให้ไว้) คือรูปแบบโค้ดและรูปแบบการออกแบบ ฉันรู้ว่าสิ่งเหล่านั้นไม่ได้เกี่ยวข้องอย่างใกล้ชิด แต่อดทนกับฉัน ฉันเคยเห็นสถานที่ต่างๆในฐานรหัสของเราที่สามารถปรับปรุงได้ซึ่งบางแห่งอาจมีคุณสมบัติตรงกับ DailyWTF ดังนั้นฉันจึงต้องการให้งานนำเสนอนี้มีประสิทธิภาพมากที่สุด ปัญหาคือฉันไม่รู้ว่าจะครอบคลุมอะไรในหนึ่งชั่วโมง ความคิดแรกของฉันคือการใช้รหัสของเราเป็นตัวอย่างในการผลักดันจุดที่ "โปรดนำสิ่งนี้ไปใช้กับงานของคุณ" แต่หัวข้อนั้นกว้างมาก มีบางอย่างผิดปกติกับรหัสของเรา (PHP) รวมถึง: OO น้อยที่สุด มันได้รับการปรับปรุงเมื่อเร็ว ๆ นี้ แต่ยังมีฟังก์ชั่นระดับโลกมากมาย ฉันใช้เวลาสักครู่เพื่อค้นหาสิ่งต่าง ๆ กำหนดค่าทั่วโลก (ความคิดเห็นที่ฉันเดา) คุณสามารถค้นหา $ GLOBALS ['blah'] …

3
รูปแบบการออกแบบสำหรับการจัดการหน้าต่างในแอพ Java Swing
ฉันเพิ่งเริ่มสร้างแอป Java Swing เล็ก ๆ น้อย ๆ ของฉัน เมื่อโปรแกรมเปิดขึ้นมันจะเปิดหน้าต่างเดียวที่เรียบง่ายพร้อมป้ายชื่อและปุ่มคู่ การคลิกปุ่มใดปุ่มหนึ่งเหล่านั้นควรจะล้างหน้าจอต้อนรับและแทนที่ด้วยแผงที่แตกต่างกันโดยสิ้นเชิง ฉันไม่แน่ใจว่าวิธีที่ดีที่สุดในการสร้างฟังก์ชั่นนั้นคืออะไร วิธีหนึ่งก็คือการส่งผ่านJFrameข้อโต้แย้งของฉันไปสู่ ​​... เพียงเกี่ยวกับองค์ประกอบอื่น ๆ ทั้งหมด แต่นั่นทำให้ฉันรู้สึกแฮ็ค หรือมีการทำให้แต่ละพาเนลเป็นสองเท่าเป็นผู้ฟังการกระทำ แต่ก็ดูไม่ถูกต้องเช่นกัน มีรูปแบบการออกแบบที่ฉันควรใช้ที่นี่หรือไม่? "แทนที่เนื้อหาของหน้าต่างหลักและหน้าต่างเดียว" จะต้องเป็นการดำเนินการทั่วไปที่สมเหตุสมผล ชื่อรูปแบบจะเพียงพอ ฉันสามารถใช้ Google ด้วยตัวเองได้จากที่นั่น (ฉันจะไม่ปฏิเสธคำอธิบายใด ๆ อีกต่อไป)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.