คุณควรอธิบายถึงรูปแบบการออกแบบสำหรับคนที่อยู่นอก Software World อย่างไร


10

ฉันต้องการอธิบายรูปแบบการออกแบบให้หลานสาวของฉัน แต่มักจะพยายามทำเช่นนั้น ส่วนใหญ่เป็นเพราะการที่ฉันไม่เข้าใจรูปแบบการออกแบบที่ชัดเจน คุณแนะนำให้อธิบายรูปแบบเช่น MVC, Singleton, Factory, Repository และอื่น ๆ ในแง่ง่าย ๆ ที่แม้แต่เด็กอายุ 10 ขวบก็สามารถเข้าใจได้

ฉันกำลังมองหาตัวอย่างที่สามารถช่วยให้เข้าใจรูปแบบได้ง่ายขึ้น ตัวอย่างที่มีของเล่นภาพยนตร์เพลง ฯลฯ


2
รูปแบบการออกแบบคือการพัฒนาซอฟต์แวร์ทฤษฎีหมวดหมู่คือคณิตศาสตร์ . . อย่างน้อยนั่นเป็นวิธีที่ฉันจะอธิบายให้นักคณิตศาสตร์
Eric Wilson

มันเหมือนกับการอ่านส่วนคำตอบของหนังสือปริศนา คุณจะไม่ทราบคำตอบของปริศนาทุกชิ้น แต่คุณจะทำมากที่สุดและคุณจะรู้ว่าจะเริ่มจากปริศนาที่คุณยังไม่เคยเห็นคำตอบ
StuperUser

คำตอบ:


7

ฉันคิดว่าจุดเริ่มต้นของบทความ Wikipediaน่าจะเป็นการเริ่มต้นที่ดี:

A design pattern is a general reusable solution to a commonly occurring problem.

หรือคุณต้องการอธิบายรายละเอียดของรูปแบบเฉพาะเหล่านั้นหรือไม่


กำลังมองหาเฉพาะ
gizgok

1
นอกจากนี้ยังมีวิกิพีเดียเรียบง่ายsecure.wikimedia.org/wikipedia/simple/wiki/Design_pattern
Jeff Welling

2
@gizgok: "เฉพาะ" หรือไม่ นั่นไร้สาระ ระบุรายละเอียดเพิ่มเติมที่คุณอาจต้องการ ต้องการ "เฉพาะ" จะคลุมเครือ
S.Lott

5

ขึ้นอยู่กับเหตุผลที่คุณต้องการอธิบาย หากคุณเพียงต้องการอธิบายแนวคิดของรูปแบบฉันจะวาดตัวอย่างจากสถาปัตยกรรมในภาษารูปแบบ นักวิจัยเหล่านี้พบว่าบางแง่มุมของอาคารหรือห้องทำให้ผู้คนเพลิดเพลินกับการอยู่อาศัยหรือทำงานในอาคารหรือห้องนั้น - ทั่วโลกในวัฒนธรรมที่แตกต่างกันด้วยวัสดุก่อสร้างที่แตกต่างกันและในละแวกใกล้เคียงประเภทต่างๆ เช่น "Light on Two Sides" ห้องที่มีหน้าต่างบนผนังทั้งสองนั้นมีลักษณะที่ดีกว่าห้องที่มีเพียงหน้าต่างเดียว (หรือไม่มีเลย) มีรูปแบบเช่นนี้ในซอฟต์แวร์เช่นกัน - แม้จะใช้ภาษาการเขียนโปรแกรมที่แตกต่างกัน และแม้แต่ในซอฟต์แวร์ที่แตกต่างกันมาก - เกมบางอย่างสำหรับการคำนวณทางการเงินเอ็นจิ้นภายใน Facebook และอื่น ๆ

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


1
เด็กอายุ 10 ปีต้องการเป็นแฮ็คเกอร์
gizgok

2

รูปแบบการออกแบบมีอยู่เพราะบางคนตระหนักว่ามีวิธีที่จะทำให้บิตของซอฟต์แวร์ทำงานร่วมกันได้ดีและต้องการแบ่งปันข้อมูลเชิงลึก

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

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

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

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


1

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


1

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


1
รูปแบบการออกแบบส่วนใหญ่เป็นคำแนะนำเกี่ยวกับวิธีการใช้ abstractions ที่เหมาะสมเพื่อแก้ปัญหาเฉพาะ มันไม่ได้เป็นส่วนหนึ่งของการออกแบบเชิงวัตถุต่อการพูด
Pemdas

@Pemdas: ยกตัวอย่างเช่น มันมีความหมายอะไรนอก OOP?
vartec

OOP เป็นที่พูดถึงรูปแบบส่วนใหญ่ แต่ภาษาอื่น ๆ และมีชุดรูปแบบของตนเอง ตัวอย่างเช่น Monads (มักพบในภาษาที่ใช้งานได้ใน OOP บางครั้ง) เป็นรูปแบบของตัวเองและเปิดใช้งานรูปแบบอื่น ๆ นอกจากนี้ดังที่ได้กล่าวไว้ที่นี่รูปแบบการออกแบบมาจากการเขียนโปรแกรมจากสถาปัตยกรรม
Charlie

รูปแบบการออกแบบไม่เกี่ยวข้องกับ OOP รูปแบบการออกแบบเกี่ยวกับปัญหาที่เกิดขึ้นซ้ำแล้วซ้ำอีกและกลยุทธ์ที่ได้รับการพัฒนาเพื่อจัดการกับปัญหา หากมีการพัฒนากลยุทธ์ซ้ำแล้วคุณจะมีรูปแบบ หากกลยุทธ์ใช้งานได้หลายครั้งคุณจะเรียกว่ารูปแบบการออกแบบหากล้มเหลวซ้ำ ๆ คุณจะเรียกว่ารูปแบบการต่อต้าน การเรียนรู้เกี่ยวกับรูปแบบการออกแบบหมายถึงกลยุทธ์การเรียนรู้ที่เคยทำงานซ้ำแล้วซ้ำอีก ดูว่าฉันไม่ได้พูดถึงการเขียนโปรแกรมเลยแม้แต่น้อย OOP?
gnasher729

0

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

สนทนาสิ่งต่าง ๆ รอบห้อง วางเก้าอี้ไว้หน้าประตู มันจะสมเหตุสมผลไหมที่จะย้ายหน้าต่างหรือประตูไปที่อื่น ทำไมหรือทำไมไม่?

ลองทำอะไรบางอย่างเช่นจัดวางโต๊ะ ลองจัดเรียงสิ่งต่าง ๆ ตามขนาดที่คุณไป ไม่ใช่รูปแบบปกติและทำงานหนักด้วย ตั้งค่าตามปกติ นี่เป็นรูปแบบที่เหมาะสมสำหรับการดื่มน้ำผลไม้อย่างรวดเร็วหรือไม่ รูปแบบไม่เหมาะสมเสมอไป

เราอยู่กับรูปแบบตลอดเวลา ใช้หนังสือสามหรือสี่เล่มและเริ่มต้นเพจจิ้ง มีรูปแบบที่ชัดเจนในการจัดวาง; หน้าชื่อเรื่องสารบัญเนื้อหาและดัชนี ไม่จำเป็นต้องใช้ส่วนประกอบทั้งหมด แต่จะทำให้สับสนในการมองเห็นนอกสถานที่


0

รูปแบบการออกแบบคือการพัฒนาซอฟต์แวร์สิ่งที่จิ๊กต่องานไม้ มันเป็นเครื่องมือที่คุณสามารถสร้าง 'บาดแผล' ที่รู้จักกันดีเพื่อใช้ในโครงการขนาดใหญ่

โปรดทราบว่าคุณไม่จำเป็นต้องใช้จิ๊กในการตัดมันง่ายกว่าในบางสถานการณ์


0

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

ซิงเกิล

รูปแบบนี้ใช้เมื่อเราต้องการรับประกันว่ามีเพียงสิ่งเดียวเท่านั้น รูปแบบสามารถทำได้โดยการป้องกันไม่ให้ผู้อื่นสร้างวัตถุของเรา

วิกิพีเดีย

MVC

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

นอกจากนี้ด้วยการแยกความกังวลที่กำหนดไว้อย่างดีนี้การเปลี่ยนแปลงในหนึ่ง (นึกคิด) ไม่จำเป็นต้องมีการเปลี่ยนแปลงในอีก ตัวอย่างที่เป็นรูปธรรมถ้าฉันต้องการสนับสนุนการอ่าน / เขียนฐานข้อมูล MySQL แทนที่จะเป็นฐานข้อมูล Oracle ฉันจะต้องเปลี่ยนแบบจำลองของฉันเท่านั้นและมุมมอง / ตัวควบคุมของฉันจะไม่เปลี่ยนแปลง

วิกิพีเดีย

โรงงาน

ต้องระวังที่นี่เนื่องจากมีรูปแบบที่คล้ายกันหลายอย่างที่เรียกว่า Factory ... ฉันจะพูดถึงAbstract Factoryแต่คุณควรรู้ว่ายังมีรูปแบบวิธีการของโรงงานด้วยเช่นกัน

โดยพื้นฐานแล้วฉันจะใช้ Abstract Factory เมื่อฉันรู้ว่าขั้นตอนใดที่ฉันต้องการดำเนินการ แต่ขั้นตอนในการทำตามขั้นตอนเหล่านี้อาจแตกต่างกันไป ตัวอย่างเช่นฉันสามารถสร้างแอปพลิเคชันที่ฉันต้องการสร้างกล่องโต้ตอบด้วยปุ่มบน โดยการใช้รหัสของฉันใช้โรงงาน UI สมมุติถ้าฉันต้องการรหัสของฉันบน Mac หรือ Linux แทน Windows ฉันเพียงแค่ให้โรงงานที่แตกต่างกันและส่วนที่เหลือของรหัสของฉันไม่เปลี่ยนแปลง สำหรับตัวอย่างที่อาจเกิดขึ้นฉันอาจมีโรงงานเว็บและทันใดนั้นรหัสส่วนใหญ่ที่สนับสนุนแอปพลิเคชันเดสก์ท็อปของฉันก็เปิดใช้งานเว็บไซต์ที่สมบูรณ์แล้ว :) (ตกลงไม่ได้เพราะเหตุผลอื่น แต่ในทางทฤษฎี :))


0

สำหรับเด็กอายุ 10 ปีที่ต้องการเป็นแฮ็กเกอร์ฉันอยากจะบอกว่า

ลองนึกภาพถ้าคุณมีแฮ็กเกอร์ที่ดีที่สุดในโลกที่นั่งถัดจากคุณเมื่อคุณแฮ็คออกไป .. และทุก ๆ ครั้งจากนั้นพวกเขาก็จะพูดว่า .. "คุณรู้หรือไม่ว่าคุณทำแบบนี้ ... [insert pattern] ... จากนั้นโค้ดของคุณจะเป็น [เร็วกว่า / ปลอดภัยกว่า / สามารถดูแลได้มากกว่า / และอื่น ๆ ] "จะเจ๋งขนาดไหน

ตอนนี้ฉันคิดว่าเธอกระตือรือร้นที่จะคิด - ฉันจะไม่เสียเวลาอธิบายแต่ละรูปแบบฉันจะตั้ง "งานแฮ็ค" ของเธอแล้ว .. จากนั้นโพสต์ใช้รูปแบบการออกแบบและอธิบายค่า ... แล้วเพียงชี้ไปที่ แหล่งข้อมูลที่ดีและดูว่าจะไปที่ไหน

แต่ส่วนใหญ่เธอจะต้องเรียนรู้ผ่านการให้คำปรึกษา

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