ความแตกต่างระหว่างรูปแบบและหลักการ


20

รูปแบบการออกแบบเชิงวัตถุและหลักการต่างกันอย่างไร พวกเขาต่างกันไหม? เท่าที่ฉันเข้าใจพวกเขาทั้งสองพยายามบรรลุเป้าหมายร่วมกัน (เช่นความยืดหยุ่น) ดังนั้นฉันสามารถพูดได้ว่ารูปแบบเป็นหลักการและในทางกลับกัน?

หลักการออกแบบ = SOLID (เช่นหลักการผกผันของการพึ่งพา)

รูปแบบการออกแบบ = Gof (เช่นรูปแบบนามธรรมของโรงงาน)

คำตอบ:


24

ไม่พวกเขาไม่เหมือนกัน

รูปแบบการแก้ปัญหาร่วมกันในการเชิงวัตถุปัญหาการเขียนโปรแกรม (ฉันไม่ได้ตระหนักถึงหนังสือที่คล้ายกันใด ๆ สำหรับการเขียนโปรแกรมการทำงานหรือการประกาศ) ความคิดนั้นตกผลึกในหนังสือ "รูปแบบการออกแบบ" ที่มีชื่อเสียงโดย Gang of Four ในปี 1995

ในฐานะที่เป็น Andre ชี้ให้เห็นรูปแบบเป็นเรื่องธรรมดาในทุกกระบวนทัศน์ ฉันจะย้ำคำแถลงก่อนหน้าของฉัน: ฉันไม่ทราบหนังสือที่คล้ายกันใด ๆ สำหรับการทำงานหรือการเขียนโปรแกรมประกาศ แต่ Andre ได้แก้ไขความไม่รู้ของฉันด้วยลิงก์ที่เขาให้ไว้ด้านล่าง (ขอบคุณ Andre)

หลักการมีน้อยเกี่ยวกับภาษาเฉพาะหรือกระบวนทัศน์ทั่วไปมากขึ้น "อย่าทำซ้ำตัวเอง" - หลักการของ DRY - เป็นจริงสำหรับการเขียนโปรแกรมทั้งหมด


4
รูปแบบที่มีอยู่ในทุกกระบวนทัศน์ Jeremy Gibbonsกำลังเขียนหนังสือชื่อว่าPatterns in Functional Programming (และบล็อกเกี่ยวกับที่นี่ ) รูปแบบเป็นสิ่งที่ชื่อพูด - การออกแบบซ้ำ ๆ เพื่อแก้ปัญหาที่คล้ายกัน พวกเขาอยู่ทุกหนทุกแห่ง 'แม้ว่าคุณอาจจำไม่ได้
AndréParamés

@ AndréParamésการอ่านอย่างรวดเร็วทำให้ฉันเชื่อว่า Jeremy Gibbons กำลังพูดถึงสำนวนภาษาไม่ใช่รูปแบบการออกแบบ
Izkata


19

แนวคิดเหล่านี้ไม่เหมือนกัน:

* หลักการออกแบบ: *หลักการออกแบบซอฟต์แวร์เป็นชุดของแนวทางที่ช่วยให้เราหลีกเลี่ยงการออกแบบที่ไม่ดี like: Open Close Principle

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


7

แบบแผนคือหลักการสิ่งที่นำไปใช้เป็นแบบแผน

หลักการคือ "อ้อม" ซึ่งสามารถทำได้โดยรูปแบบ "โรงงาน" ซึ่งได้รับการดำเนินการเป็นคลาสที่มีวิธีการโรงงานในท้ายที่สุด


3

หลักการเป็นกฎในขณะที่รูปแบบเป็นตัวอย่างที่เป็นรูปธรรมของพวกเขา


1
คุณยกตัวอย่างได้บ้าง

โปรดบอกเราถึงหลักการที่เรียกร้องให้โรงงานหรือเครือข่ายความรับผิดชอบหรือฟลายเวท
duffymo

2
@duffymo Well Factory เช่นเป็นไปตามหลักการผกผันของการพึ่งพา (ไม่ใช่การฉีด) ทั้งไคลเอนต์และอินสแตนซ์ขึ้นอยู่กับสิ่งที่เป็นนามธรรม - ส่วนต่อประสาน เครือข่ายความรับผิดชอบขึ้นอยู่กับหลักการของการมีเพศสัมพันธ์อย่างหลวม ๆ และการแยกการควบคุม ฉันเชื่อว่า Flyweight มีประสิทธิภาพเพิ่มขึ้นเท่านั้น
m3th0dman

3

รูปแบบเป็นสิ่งระดับสูงกว่าหลักการ รูปแบบการแก้ไขปัญหาเฉพาะ สามารถนำหลักการไปใช้ได้ทุกที่โดยไม่คำนึงถึงบริบท รูปแบบจริงตามหลักการ (SRP, DRY, ฯลฯ )

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

  • SRP - คุณกำหนดรหัสซึ่งรับผิดชอบอัลกอริธึมและแยกมันออกมาจากรหัสอื่น
  • OCP - คุณกำหนดสิ่งที่เป็นนามธรรมซึ่งแสดงถึงอัลกอริธึมที่แตกต่างกันทั้งหมดและใช้มัน
  • LSP - คุณไม่ได้ใช้คลาสอัลกอริทึมที่เป็นรูปธรรมในรหัสลูกค้าเพียงนามธรรม

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

@ Jarkko ดูตัวอย่างของฉัน เมื่อฉันพูดถึงระดับฉันหมายถึงรูปแบบนั้นขึ้นอยู่กับหลักการไม่ใช่ในทางกลับกัน อิฐไม่ใช่สิ่งระดับสูงกว่าการสร้าง

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

1
"รูปแบบเป็นสิ่งระดับสูงกว่าหลักการ" ฉันขอแตกต่าง ==> รูปแบบใกล้เคียงกับการรับรู้ (เช่นระดับต่ำ) ในขณะที่หลักการคือกฎระดับสูง
Raúl

2

รูปแบบที่มีการบันทึกไว้สำหรับ Architecture ในสถาปัตยกรรมนำไปใช้กับสิ่งต่าง ๆ ตั้งแต่ตำแหน่งของประตูในห้องไปจนถึงเค้าโครงของหมู่บ้าน

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

หลักการไม่ครอบคลุมถึงการใช้งานแม้ว่าอาจมีวิธีการใช้มาตรฐาน หลักการเกี่ยวกับการครอบคลุมปัญหาทั่วไปมากกว่าปัญหาเฉพาะ สำหรับการควบคุมแบบผกผันฉันรู้วิธีการใช้งานอย่างน้อยสามวิธี สำหรับ DRY (อย่าทำซ้ำตัวเอง) ฉันไม่รู้จักวิธีการใช้งานแบบเจาะจงเจาะจงแม้ว่าฉันจะใช้หลายวิธีก็ตาม

พิจารณา

  • คุณได้รับการร้องขอให้ใช้รูปแบบเช่น Abstract Factory Pattern เป็นแนวทางเดียวในการพัฒนาโปรแกรม สิ่งนี้จะเหมาะสมหรือไม่ ไม่มันเป็นแบบแผนมากกว่า
  • คุณได้รับคำขอให้ใช้ DRY กับส่วนประกอบทั้งหมดหรือไม่ สิ่งนี้จะเหมาะสมหรือไม่ ใช่แล้วมีแนวโน้มที่จะเป็นหลักการมากกว่า

1

หลักการออกแบบ OO -

หลักการ OO เป็นชุดของแนวทางที่รับรองแนวคิดของ OOP ตามแนวคิดของ OOP นี้จะกำหนดวิธีการออกแบบวิธีที่ดีกว่าการออกแบบที่ดีกว่า หลักการออกแบบพื้นฐานของ OO คือ SOLID

รูปแบบการออกแบบให้โซลูชันทั่วไปสำหรับปัญหาการออกแบบ โปรดทราบว่า "รูปแบบการออกแบบ" สามารถนำไปใช้กับคำเชิงวัตถุเที่ยงได้เช่นกัน ดังนั้นรูปแบบการออกแบบ OO (OODP) จึงเป็นวิธีการแก้ปัญหาทั่วไปสำหรับการออกแบบเชิงวัตถุตามหลักการ OO รูปแบบการออกแบบถูกค้นพบไม่ได้คิดค้น มีหลายวิธีในการกำหนด OODP และหนึ่งที่มีชื่อเสียงที่สุดคือ BSC [โครงสร้างเชิงโครงสร้างเชิงพฤติกรรม]

ต่อไปนี้เป็นลิงค์สำหรับคำอธิบายโดยละเอียด http://techythought.wordpress.com/2013/01/21/design-principle-vs-ds-design-pattern-describing-oop-elements/

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