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

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

30
การฉีดพึ่งพาคืออะไร?
มีคำถามมากมายที่โพสต์ไว้แล้วพร้อมคำถามเฉพาะเกี่ยวกับการฉีดพึ่งพาเช่นเมื่อไรที่จะใช้มันและกรอบใดบ้างที่มีให้ อย่างไรก็ตาม การฉีดพึ่งพาคืออะไรและเมื่อใด / ทำไมควรหรือไม่ควรใช้?

24
MVP และ MVC คืออะไรและแตกต่างกันอย่างไร
ต้องการปรับปรุงโพสต์นี้หรือไม่? ให้คำตอบโดยละเอียดสำหรับคำถามนี้รวมถึงการอ้างอิงและคำอธิบายว่าทำไมคำตอบของคุณถึงถูกต้อง คำตอบที่ไม่มีรายละเอียดเพียงพออาจแก้ไขหรือลบออกได้ เมื่อมองไปไกลกว่าRAD (ลากวางและกำหนดค่า) วิธีการสร้างส่วนติดต่อผู้ใช้ที่เครื่องมือมากมายขอแนะนำให้คุณมีแนวโน้มที่จะเจอสามรูปแบบการออกแบบที่เรียกว่าModel-View-Controller , Model-View-PresenterและModel-View-ViewModel คำถามของฉันมีสามส่วน: รูปแบบเหล่านี้แก้ไขปัญหาใด พวกเขาคล้ายกันอย่างไร แตกต่างกันอย่างไร

30
อะไรคือสิ่งที่ไม่ดีเกี่ยวกับซิงเกิลตัน? [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว รูปแบบเดี่ยวเป็นสมาชิกชำระเต็มของGoF 's หนังสือรูปแบบแต่มันดูเหมือนว่าเมื่อเร็ว ๆ นี้ค่อนข้างกำพร้าโลกนักพัฒนา ฉันยังคงใช้ singletons ค่อนข้างมากโดยเฉพาะอย่างยิ่งสำหรับคลาสโรงงานและในขณะที่คุณต้องระวังเล็กน้อยเกี่ยวกับปัญหามัลติเธรด Stack Overflow โดยเฉพาะดูเหมือนว่าจะถือว่าทุกคนยอมรับว่าซิงเกิลตันนั้นชั่วร้าย ทำไม? โปรดสนับสนุนคำตอบของคุณด้วย " ข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญเฉพาะด้าน "

30
ความแตกต่างระหว่างรูปแบบคงที่และรูปแบบซิงเกิล?
อะไรคือความแตกต่างที่แท้จริง (เช่นในทางปฏิบัติ) ที่มีอยู่ระหว่างคลาสแบบสแตติกและรูปแบบซิงเกิล? ทั้งสองสามารถถูกเรียกใช้โดยไม่มีการสร้างอินสแตนซ์ทั้งสองมีเพียง "อินสแตนซ์" หนึ่งรายการเท่านั้นและทั้งคู่ไม่มีความปลอดภัยต่อเธรด มีความแตกต่างอื่น ๆ อีกไหม?

25
MVC กับ MVVM ต่างกันอย่างไร? [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน6 เดือนที่ผ่านมา มีความแตกต่างระหว่างรูปแบบ "Model View Controller" มาตรฐานและรูปแบบ Model / View / ViewModel ของ Microsoft หรือไม่

13
การตั้งชื่อคลาส - วิธีหลีกเลี่ยงการเรียกทุกอย่างว่า“ <WhatEver> Manager” ได้อย่างไร [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม &amp; คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจเรียกร้องให้มีการอภิปรายโต้แย้งโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน7 ปีที่ผ่านมา นานมาแล้วฉันได้อ่านบทความ (ฉันเชื่อว่ารายการบล็อก) ซึ่งทำให้ฉัน "ติดตาม" ขวาบนวัตถุการตั้งชื่อ: ระมัดระวังมากเกี่ยวกับการตั้งชื่อสิ่งต่าง ๆ ในโปรแกรมของคุณ ตัวอย่างเช่นหากแอปพลิเคชันของฉัน (เป็นแอปทางธุรกิจทั่วไป) ที่จัดการผู้ใช้ บริษัท และที่อยู่ที่ฉันมีคลาสUsera Companyและa Addressโดเมนและอาจเป็นที่ไหนสักแห่งUserManagera CompanyManagerและa AddressManagerจะปรากฏขึ้นเพื่อจัดการกับสิ่งเหล่านั้น ดังนั้นคุณสามารถบอกบรรดาสิ่งUserManager, CompanyManagerและAddressManagerทำอย่างไร ไม่เพราะผู้จัดการเป็นคำทั่วไปที่เหมาะกับทุกสิ่งที่คุณสามารถทำได้กับวัตถุโดเมนของคุณ บทความที่ฉันอ่านแนะนำโดยใช้ชื่อเฉพาะมาก ถ้ามันเป็นแอพพลิเคชั่น C ++ และUserManagerงานของมันถูกจัดสรรและปลดปล่อยผู้ใช้จากฮีปมันจะไม่จัดการผู้ใช้ แต่ปกป้องการเกิดและความตาย อืมเราอาจเรียกมันUserShepherdว่า หรืออาจจะUserManagerเป็นหน้าที่ของการตรวจสอบข้อมูลของวัตถุผู้ใช้แต่ละคนและลงนามในข้อมูลการเข้ารหัส UserRecordsClerkแล้วเราต้องการมี ตอนนี้ความคิดนี้ติดอยู่กับฉันฉันพยายามที่จะใช้มัน และพบว่าความคิดที่เรียบง่ายนี้ยากอย่างน่าอัศจรรย์ ฉันสามารถอธิบายสิ่งที่เรียนทำและ (ตราบเท่าที่ฉันไม่ได้แอบเข้าไปอย่างรวดเร็วและสกปรกเข้ารหัส) เรียนที่ผมเขียนทำสิ่งหนึ่งสิ่ง สิ่งที่ฉันพลาดไปจากคำอธิบายนั้นไปยังชื่อเป็นประเภทของชื่อคำศัพท์ที่แมปแนวคิดกับชื่อ ในที่สุดฉันต้องการมีแคตตาล็อกรูปแบบในใจของฉัน (บ่อยครั้งที่รูปแบบการออกแบบให้ชื่อวัตถุได้ง่ายเช่นโรงงาน ) โรงงาน - สร้างวัตถุอื่น ๆ …

28
ฟังก์ชั่นโปรแกรมแทนรูปแบบการออกแบบของ GoF หรือไม่?
ตั้งแต่ฉันเริ่มเรียนรู้F #และOCamlเมื่อปีที่แล้วฉันได้อ่านบทความจำนวนมากที่ยืนยันว่ารูปแบบการออกแบบ (โดยเฉพาะใน Java) เป็นวิธีแก้ปัญหาสำหรับคุณสมบัติที่ขาดหายไปในภาษาที่จำเป็น บทความหนึ่งที่ฉันพบมีการอ้างสิทธิ์ค่อนข้างแรง : คนส่วนใหญ่ที่ฉันพบเจอได้อ่าน หนังสือรูปแบบการออกแบบโดย Gang of Four (GoF) โปรแกรมเมอร์ที่เคารพตนเองจะบอกคุณว่าหนังสือเล่มนี้เป็นผู้ไม่เชื่อเรื่องภาษาและรูปแบบที่ใช้กับวิศวกรรมซอฟต์แวร์โดยทั่วไปไม่ว่าคุณจะใช้ภาษาใด นี่คือการเรียกร้องอันสูงส่ง น่าเสียดายที่มันห่างไกลจากความจริง ภาษาหน้าที่มีความหมายอย่างมาก ในภาษาที่ใช้งานได้เราไม่จำเป็นต้องมีรูปแบบการออกแบบเพราะภาษานั้นมีระดับสูงมากดังนั้นคุณจึงต้องเขียนโปรแกรมในแนวคิดที่กำจัดรูปแบบการออกแบบทั้งหมดเข้าด้วยกัน คุณสมบัติหลักของ functional programming (FP) รวมถึงฟังก์ชั่นเป็นค่าชั้นหนึ่ง, currying, ค่าที่ไม่เปลี่ยนรูปแบบ ฯลฯ ฉันไม่เห็นว่ารูปแบบการออกแบบ OO ใกล้เคียงกับคุณลักษณะใด ๆ เหล่านั้น นอกจากนี้ในภาษาที่ใช้งานได้ซึ่งสนับสนุน OOP (เช่น F # และ OCaml) ดูเหมือนว่าสำหรับฉันแล้วโปรแกรมเมอร์ที่ใช้ภาษาเหล่านี้จะใช้รูปแบบการออกแบบเดียวกันกับภาษา OOP อื่น ๆ อันที่จริงตอนนี้ฉันใช้ F # และ OCaml ทุกวันและไม่มีความแตกต่างที่โดดเด่นระหว่างรูปแบบที่ฉันใช้ในภาษาเหล่านี้กับรูปแบบที่ฉันใช้เมื่อฉันเขียนด้วย Java มีความจริงใด …

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

20
รูปแบบการออกแบบ C ++ Singleton
เมื่อเร็ว ๆ นี้ฉันได้พบกับการตระหนักถึง / การใช้รูปแบบการออกแบบซิงเกิลตันสำหรับ C ++ มันมีลักษณะเช่นนี้ (ฉันยอมรับมันจากตัวอย่างในชีวิตจริง): // a lot of methods are omitted here class Singleton { public: static Singleton* getInstance( ); ~Singleton( ); private: Singleton( ); static Singleton* instance; }; จากการประกาศนี้ฉันสามารถอนุมานได้ว่ามีการเริ่มต้นฟิลด์อินสแตนซ์บนฮีป นั่นหมายความว่ามีการจัดสรรหน่วยความจำ สิ่งที่ไม่ชัดเจนสำหรับฉันคือเมื่อหน่วยความจำจะถูกจัดสรรคืนหรือไม่ หรือมีข้อบกพร่องและหน่วยความจำรั่ว? ดูเหมือนว่ามีปัญหาในการใช้งาน คำถามหลักของฉันคือฉันจะใช้มันอย่างถูกวิธีได้อย่างไร

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

26
รูปแบบของตัวออกแบบการสร้างและรูปแบบการออกแบบจากโรงงานแตกต่างกันอย่างไร
รูปแบบการออกแบบของ Builder และรูปแบบการออกแบบของโรงงานแตกต่างกันอย่างไร ข้อใดที่ได้เปรียบกว่าและทำไม ฉันจะแสดงสิ่งที่ค้นพบของฉันเป็นกราฟได้อย่างไรหากฉันต้องการทดสอบและเปรียบเทียบ / เปรียบต่างรูปแบบเหล่านี้

18
ทำไม __init __ () ถูกเรียกหลังจาก __new __ () เสมอ?
ฉันแค่พยายามที่จะปรับปรุงการหนึ่งในชั้นเรียนของฉันและได้แนะนำฟังก์ชันการทำงานบางอย่างในรูปแบบเดียวกับรูปแบบการออกแบบฟลายเวท แต่ฉันบิตสับสนว่าทำไมถึงอยู่เสมอเรียกว่าหลังจาก__init__ __new__ฉันไม่ได้คาดหวังสิ่งนี้ ทุกคนสามารถบอกฉันได้ว่าทำไมสิ่งนี้ถึงเกิดขึ้นและฉันจะใช้ฟังก์ชันนี้ได้อย่างไร? (นอกเหนือจากการนำการติดตั้งไปใช้__new__ซึ่งรู้สึกแฮ็คค่อนข้างมาก) นี่คือตัวอย่าง: class A(object): _dict = dict() def __new__(cls): if 'key' in A._dict: print "EXISTS" return A._dict['key'] else: print "NEW" return super(A, cls).__new__(cls) def __init__(self): print "INIT" A._dict['key'] = self print "" a1 = A() a2 = A() a3 = A() ขาออก: NEW INIT EXISTS INIT …

28
แนวทางปฏิบัติที่เป็นที่ยอมรับทั่วไปเกี่ยวกับการจัดระเบียบโค้ดใน JavaScript [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน5 ปีที่ผ่านมา เนื่องจากเฟรมเวิร์ก JavaScript อย่าง jQuery ทำให้เว็บแอปพลิเคชั่นฝั่งไคลเอ็นต์สมบูรณ์ยิ่งขึ้นและทำงานได้มากขึ้นฉันเริ่มสังเกตเห็นปัญหาหนึ่ง ... คุณจัดการเรื่องนี้เป็นอย่างไรในโลก ใส่เครื่องมือจัดการทั้งหมดของคุณไว้ในที่เดียวและเขียนฟังก์ชั่นสำหรับกิจกรรมทั้งหมดได้หรือไม่ สร้างฟังก์ชั่น / คลาสเพื่อห่อฟังก์ชั่นทั้งหมดของคุณ? เขียนอย่างบ้าคลั่งและหวังว่ามันจะออกมาดีที่สุด? ยอมแพ้และรับอาชีพใหม่? ฉันพูดถึง jQuery แต่จริงๆแล้วรหัส JavaScript ใด ๆ โดยทั่วไป ฉันพบว่าเมื่อบรรทัดต่อบรรทัดเริ่มกองพะเนินมันก็ยากที่จะจัดการไฟล์สคริปต์หรือค้นหาสิ่งที่คุณกำลังมองหา อาจเป็นสัญลักษณ์ที่ยิ่งใหญ่ที่สุดที่ฉันเคยพบมีหลายวิธีในการทำสิ่งเดียวกันมันยากที่จะรู้ว่าอันไหนเป็นแนวทางปฏิบัติที่ดีที่สุดในปัจจุบันที่ยอมรับกันโดยทั่วไป มีคำแนะนำทั่วไปเกี่ยวกับวิธีที่ดีที่สุดในการรักษาไฟล์. jsของคุณให้สวยงามและเรียบร้อยเหมือนกับแอพพลิเคชั่นอื่น ๆ ของคุณหรือไม่? หรือนี่เป็นเพียงเรื่องของ IDE หรือไม่? มีตัวเลือกที่ดีกว่าอยู่ที่นั่นไหม? แก้ไข คำถามนี้มีวัตถุประสงค์เพื่อเพิ่มเติมเกี่ยวกับการจัดระเบียบโค้ดไม่ใช่การจัดระเบียบไฟล์ มีบางตัวอย่างที่ดีของการรวมไฟล์หรือแยกเนื้อหา คำถามของฉันคืออะไรวิธีปฏิบัติที่ดีที่สุดในปัจจุบันที่ยอมรับกันทั่วไปในการจัดระเบียบรหัสจริงของคุณคืออะไร? คุณมีวิธีอะไรหรือแม้กระทั่งวิธีที่แนะนำในการโต้ตอบกับองค์ประกอบของหน้าและสร้างโค้ดที่สามารถนำมาใช้ซ้ำได้ซึ่งไม่ขัดแย้งกัน บางคนมีการระบุnamespacesซึ่งเป็นความคิดที่ดี มีวิธีอื่นใดอีกที่เกี่ยวข้องกับองค์ประกอบต่างๆในหน้าเว็บและรักษารหัสให้เป็นระเบียบและเรียบร้อย?

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

28
การพึ่งพาการฉีดกับรูปแบบโรงงาน
ตัวอย่างส่วนใหญ่ที่ยกมาสำหรับการใช้งานของการพึ่งพาการฉีดเราสามารถแก้ปัญหาโดยใช้รูปแบบโรงงานเช่นกัน ดูเหมือนว่าเมื่อมันมาถึงการใช้งาน / ออกแบบความแตกต่างระหว่างการฉีดพึ่งพาและโรงงานเบลอหรือบาง เมื่อมีคนบอกฉันว่ามันเป็นวิธีที่คุณใช้มันสร้างความแตกต่าง! ฉันเคยใช้StructureMap a DI container เพื่อแก้ปัญหาหลังจากนั้นฉันออกแบบมันขึ้นมาใหม่เพื่อทำงานกับโรงงานที่เรียบง่ายและลบการอ้างอิงไปที่ StructureMap ใครสามารถบอกฉันได้ว่าอะไรคือความแตกต่างระหว่างพวกเขากับที่จะใช้อะไรแนวปฏิบัติที่ดีที่สุดที่นี่คืออะไร

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