Gang of Four สำรวจ“ Pattern Space” หรือไม่?


144

นับตั้งแต่ครั้งแรกที่ผมได้เรียนรู้เกี่ยวกับแก๊งสี่ (GoF) รูปแบบการออกแบบอย่างน้อย 10 ปีที่ผ่านมาฉันมีความประทับใจที่เหล่านี้ 23 รูปแบบที่ควรจะเป็นเพียงตัวอย่างเล็ก ๆ ของสิ่งที่มีขนาดใหญ่มากซึ่งผมชอบที่จะเรียกพื้นที่รูปแบบ Pattern Spaceสมมุตินี้ประกอบด้วยโซลูชันที่แนะนำทั้งหมด (รู้จักหรือไม่รู้จัก) สำหรับปัญหาการออกแบบซอฟต์แวร์เชิงวัตถุทั่วไป

ดังนั้นฉันจึงคาดว่าจำนวนของรูปแบบการออกแบบที่เป็นที่รู้จักและจัดทำเอกสารจะเพิ่มขึ้นอย่างมีนัยสำคัญ

มันไม่ได้เกิดขึ้น มากกว่า 20 ปีหลังจากหนังสือ GoF ออกมามีเพียง 12 รูปแบบเพิ่มเติมที่ปรากฏในบทความ Wikipedia ซึ่งส่วนใหญ่เป็นที่นิยมน้อยกว่าต้นฉบับมาก (ฉันไม่ได้รวมรูปแบบการทำงานพร้อมกันที่นี่เพราะครอบคลุมหัวข้อเฉพาะ)

อะไรคือเหตุผล?

  • ชุดรูปแบบของ GoF จริง ๆ แล้วครอบคลุมกว่าที่ฉันคิดหรือไม่

  • ความสนใจในการหารูปแบบใหม่ลดลงหรืออาจเป็นเพราะพวกเขาพบว่าไม่ใช่ทุกสิ่งที่มีประโยชน์ในการออกแบบซอฟต์แวร์?

  • อื่น ๆ อีก?


49
รูปแบบมีอยู่ทุกหนทุกแห่ง แต่มักจะใช้ในรูปแบบที่ไม่มีรสนิยมและหุ่นยนต์ ด้วยเหตุนี้ฉันคิดว่าความคิดรูปแบบแคตตาล็อกเริ่มได้รับความนิยมน้อยลง
usr

6
ออกแบบพื้นที่? ใครบางคนได้รับ Mark Rosewater ที่นี่, stat!
corsiKa

16
Martin Fowler ได้ตีพิมพ์รูปแบบของ Enterprise Application Architectureในปี 2003 ซึ่งมีเอกสารประมาณ 50 รูปแบบซึ่งส่วนใหญ่ยังคงสามารถเรียกคืนและใช้งานได้ดีในปัจจุบันเช่น "Data Mapper", "Plugin", "Plugin", "Lazy Load", "Service Layer" เป็นต้น
Brian Rogers

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

4
@BradThomas: แน่นอนเช่นเดียวกับคำถามที่น่าสนใจที่สุดคนมักจะมีความคิดเห็นบางอย่าง แต่ความคิดเห็นส่วนใหญ่มาจากข้อเท็จจริงอย่างน้อยและฉันได้พบข้อเท็จจริงที่น่าสนใจมากมายในคำตอบของคำถามนี้ที่จะช่วยฉันและหวังว่าคนอื่นจะคิดความคิดเห็นของพวกเขาอีกครั้ง
Frank Puffer

คำตอบ:


165

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

แต่แล้ว...

ความสนใจในการหารูปแบบใหม่ลดลงอาจเป็นเพราะพวกเขาไม่ได้มีประโยชน์ในการออกแบบซอฟต์แวร์จริงหรือ

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

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

และคนจำนวนมากเกินไปกลายเป็นคนที่หลงใหลในแนวคิดและพยายามใช้รูปแบบทุกที่ - โดยปกติแล้วในโค้ดผลลัพธ์คุณไม่สามารถหาการออกแบบที่แท้จริงระหว่าง Singletons (ไร้ความหมายอย่างสมบูรณ์) และ Abstract Factories


50
ความเห็นที่ถกเถียง: โรงงานที่เป็นนามธรรมนั้นมีกลิ่นของรหัสอยู่ดี :)
MetaFight

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

18
@MetaFightControversialDesignPatternOnlineOpinionHumanReadableRetortFactory.newInstance().getText();
corsiKa

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

11
@ChrisW ฉันไม่เห็นจุดของคุณ ... ขณะที่ฉันกล่าวว่า GoF พยายามที่จะเอาชนะข้อบกพร่อง OO และโดยเฉพาะอย่างยิ่งข้อบกพร่อง C ++ 98 เนื่องจากเป็นภาษาที่พวกเขาเลือกพร้อมกับ Smalltalk พวกเขาเขียนว่า: "การเลือกภาษาโปรแกรมเป็นสิ่งสำคัญเพราะมันมีอิทธิพลต่อมุมมองของคนรูปแบบของเราถือว่าคุณสมบัติภาษาระดับ Smalltalk / C ++ และตัวเลือกนั้นเป็นตัวกำหนดสิ่งที่สามารถและไม่สามารถนำไปปฏิบัติได้อย่างง่ายดาย"
Shautieh

108

ฉันรู้สึกว่ารูปแบบทั้ง 23 ควรเป็นเพียงตัวอย่างเล็ก ๆ ของบางสิ่งที่ใหญ่กว่าซึ่งฉันชอบเรียกว่า Pattern Space

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

รูปแบบการออกแบบ (ในความหมายของ GoF) มีวัตถุประสงค์เพียงประการเดียว: เพื่อชดเชยข้อบกพร่องในภาษาการเขียนโปรแกรมที่คุณใช้

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


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

56
@Jules ฟังก์ชั่นชั้นหนึ่งเพียงอย่างเดียวกำจัดก้อนอันใหญ่ของพวกเขารวมถึง Chain of Responsibility (เป็นเพียงองค์ประกอบของรายการฟังก์ชั่น) ฟังก์ชั่นการเขียนโปรแกรมปฏิกิริยาตอบสนองกำจัดรูปแบบการสังเกตการณ์ รูปแบบคอมโพสิตเป็นเพียงคำจำกัดความที่ระบุไว้อย่างเข้มงวดน้อยกว่าของ monoids และภาษาที่มีประเภทของการพิมพ์และการมุ่งเน้นไปที่กฎหมายเกี่ยวกับพีชคณิตให้เครื่องมือที่มีประสิทธิภาพสำหรับการทำงานกับ monoids ฉันสามารถเขียนรายการได้มากกว่านี้ แต่คุณได้รับความคิด
แจ็ค

12
@Jules: ฉันเชื่อว่าหนังสือ GoF ดั้งเดิมที่ระบุ iterator เป็นรูปแบบ แต่ตอนนี้การแปลงเป็นคุณสมบัติภาษานั้นเสร็จสมบูรณ์โดยทั่วไปในทุกภาษา OOP จากระยะไกล
เควิน

9
@RubberDuck การมีรูปแบบการนำไปใช้แล้วทำให้รูปแบบล้าสมัยได้อย่างไร มันยังคงเป็นรูปแบบการออกแบบที่ถูกนำมาใช้ คุณลักษณะด้านภาษาที่แตกต่างกันอาจนำไปสู่การใช้งานรูปแบบที่แตกต่างกัน แต่รูปแบบนั้นยังคงอยู่ที่นั่น รูปแบบที่ไปเพื่อความสะดวกในการสื่อสารโดยให้ชื่อเพื่อ reoccurring กลยุทธ์ที่ใช้กันทั่วไป ในกรณีนี้คลาส NET จะถูกเรียกObservableSomething<T>ซึ่งทำให้ง่ายต่อการเข้าใจจุดประสงค์ของมันเพราะมันใช้ชื่อรูปแบบที่รู้จักกันทั่วไป รูปแบบเป็นแนวคิดไม่ใช่การนำไปปฏิบัติที่แน่นอน
null

29
@Jules: โปรแกรมคืออะไร? วิธีแก้ไขปัญหาที่เกิดขึ้นอีกครั้ง รูปแบบการออกแบบคืออะไร? วิธีแก้ไขปัญหาที่เกิดขึ้นอีกครั้ง เหตุใดจึงไม่ใช่โปรแกรม เพราะเราไม่สามารถแสดงมันเป็นโปรแกรม Ergo รูปแบบการออกแบบเป็นวิธีการแก้ปัญหาที่เกิดขึ้นอีกครั้งซึ่งควรเป็นโปรแกรมไม่ใช่รูปแบบการออกแบบ แต่ไม่สามารถเป็นโปรแกรมได้เนื่องจากภาษานั้นไม่สามารถแสดงออกได้เพียงพอที่จะแสดงโปรแกรม ตัวอย่าง: เมื่อไม่นานมา "Subroutine Call" เป็นรูปแบบการออกแบบ! ทุกวันนี้มันเป็นคุณสมบัติทางภาษา
Jörg W Mittag

61

ฉันคิดว่ามีสามปัจจัยที่เข้ามาเล่นที่นี่

ขาดมวลวิกฤต

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

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

หากต้องการทำให้มันดูแปลกตากว่าเดิมเล็กน้อย: รูปแบบการออกแบบล้มเหลวโดยเฉพาะเพราะไม่ได้ผล

รูปแบบมากเกินไป

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

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

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

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

ขาดความสนใจ

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

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

สรุป

รูปแบบการออกแบบล้มเหลวเนื่องจาก:

  1. พวกเขาไม่สามารถบรรลุมวลวิกฤต
  2. ความแตกต่างระหว่างรูปแบบไม่เพียงพอที่จะรับประกันความชัดเจน
  3. พวกเขาส่วนใหญ่จัดการกับส่วนของรหัสเกือบไม่มีใครสนใจจริง ๆ อยู่แล้ว

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

5
คำตอบที่ดีมาก
Robert Harvey

4
@ Trilarion: โอ้ฉันรู้ส่วนเหล่านั้นของรหัสจะต้องมีการเขียน พวกเขาเป็นเหมือนพูดยางในรถของคุณ คุณต้องใช้ยางในการขับรถ แต่คนส่วนใหญ่แทบจะไม่รู้จักยี่ห้อของยางในรถของพวกเขา นี่คือการขอให้พวกเขาเรียนรู้คำศัพท์พิเศษสำหรับยางที่มีร่องเฉียงแบบไม่สมมาตร ใครจะรู้ - คนเหล่านั้นอาจช่วยชีวิตฉันไว้ซักครั้ง แต่ฉันก็ยังไม่ใช้ชื่อการเรียนรู้ชีวิตของพวกเขา
Jerry Coffin

3
@DavidRicherby: โอเคงั้นเราลองใช้การเปรียบเทียบแบบ "ฝั่งผู้ผลิต" จอห์นที่ออกแบบยางให้กู๊ดเยียร์ใช้คำหนึ่งคำสำหรับร่องประเภทนั้นหรือไม่ แต่ปิแอร์ที่ทำงานให้กับมิชลินใช้คำที่ต่างออกไปโดยสิ้นเชิง? มันมีความสำคัญหรือไม่ที่ใช้คำที่อ้างอิงถึงร่องเท่านั้น แต่อีกคำหนึ่งหมายถึงยางที่สมบูรณ์ที่มีร่องแนวนอนที่ด้านหนึ่งของศูนย์และร่องทแยงมุมที่อีกด้านหนึ่งหรือไม่
Jerry Coffin

2
@ กลไก: ฉันจะบอกว่าใช่พวกเขาล้มเหลว ฉันว่ามีน้อยกว่าครึ่งโหลรูปแบบโปรแกรมเมอร์ส่วนใหญ่รู้จัก Singleton เป็นที่รู้จักกันดี แต่จริงๆแล้วไม่ค่อยมีผลบังคับใช้ (ที่ดีที่สุด) ชื่อ "โรงงาน" เป็นในการใช้งานนานก่อนที่จะร่วมกัน "รูปแบบ" มาพร้อม (ผมจำได้ว่าการใช้งานในปลายปี 1970 หรืออย่างมากในช่วงต้นปี 1980) รูปแบบควรเป็นรูปแบบของคำศัพท์ แต่ปัจจุบันพวกเขากำลังเหมือนคำศัพท์ของฉันในภาษากรีก - พอที่จะ (อาจ) รับตัวเองมีปัญหา แต่ไม่เพียงพอที่จะสั่งปิดเมนู
Jerry Coffin

35

รูปแบบที่ขาดหายไป abstractions รูปแบบง่าย ๆ ถูกทำให้เป็นนามธรรม, รูปแบบที่ซับซ้อนไม่เป็นที่รู้จักดังนั้นรูปแบบจะไม่เป็นประโยชน์

ฉันคิดว่า Paul Graham พูดดีที่สุด:

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

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


2
โดยส่วนตัวแล้วฉันชอบความคิดนี้จริงๆ แต่จากนั้นมนุษย์ควรอ่านรหัสและคนที่ชอบรูปแบบ รูปแบบช่วยให้เราค้นหาเส้นทางของเรา การลบรูปแบบทั้งหมดออกจากรหัสของเราจะทำให้อ่านไม่ได้
Frank Puffer

2
@ Frank ฉันคิดว่า PG มาจากไหนนั่นคือรูปแบบคือ 'กลิ่น' ของฟังก์ชันพื้นฐานที่คุณสามารถสรุปได้และความจริงที่ว่าคุณไม่ได้ดึงมันออกมาในฟังก์ชั่นหรือมาโครคือสิ่งที่ทำให้เกิดการซ้ำซ้อน - หากคุณไม่มีString.replaceฟังก์ชั่นคุณสามารถจินตนาการได้ว่ามันโผล่ขึ้นมาเป็นรูปแบบ แต่ควรเขียนครั้งเดียวแทนที่จะใช้มันต่อไป ยอมรับว่าถ้าคุณไม่ตั้งชื่อสิ่งเหล่านี้อย่างถูกต้องมันจะทำให้อ่านยากขึ้น แต่เมื่อมันทำถูกต้องโค้ดจะอ่าน IMO มากขึ้นอย่างชัดเจน (เช่นgetOrElseรูปแบบของตัวเลือก monads เทียบกับการตรวจสอบโมฆะ)
Anotherdave

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

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

3
ส่วนสำคัญของคำพูดของเกรแฮมมักจะเป็นสิ่งที่ฉันสร้างขึ้นด้วยมือเพื่อขยายมาโครบางตัวที่ฉันต้องเขียน การอ้างอิงมาโคร Lisp นี้โดยเฉพาะ มีเพียงนามธรรมที่สามารถทำได้โดยไม่ต้องแมโคร
Bart van Nierop

13

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


1
ถูกต้องรูปแบบสามารถทำงานได้หากมีไม่มากเกินไป แต่ทำไม GoF ถึงยังเป็นที่นิยมที่สุด? บางคนในขณะนี้ถือว่าเป็น antipatterns โดยคนจำนวนมาก (Singleton, Builder, ฯลฯ ) สิ่งนี้จะทำให้มีที่ว่างสำหรับรูปแบบใหม่ที่มีประโยชน์มากขึ้นโดยไม่ต้องเพิ่มจำนวนทั้งหมด
Frank Puffer

2
ฉันเดาว่ามันเหมือนบัญญัติทั้ง 10 ข้อ แหล่งที่มาอยู่ห่างออกไปเพียง 2 ตัวอักษร (GOF, GOE, GOD) xD
qwerty_so

9
ใช่และบางครั้งดูเหมือนว่าวิศวกรรมซอฟต์แวร์สมัยใหม่เกี่ยวข้องกับ GoF เหมือนนักวิชาการยุคกลางที่เกี่ยวข้องกับอริสโตเติล
Frank Puffer

11

สิ่งที่ไม่มีคำตอบอื่น ๆ พูดถึงที่เกี่ยวข้อง:

การเพิ่มขึ้นของภาษาที่พิมพ์แบบไดนามิก

เมื่อหนังสือออกมาก่อนก็มีการพูดคุยกันอย่างจริงจังว่า Java นั้นช้าเกินกว่าที่จะทำงานจริงได้จริงตอนนี้ Java นั้นถูกใช้มากกว่าภาษาที่แสดงออกมากขึ้นเนื่องจากความเร็ว บางที Ruby, Python, JavaScript, et al อาจจะช้าเกินไปสำหรับแอปพลิเคชั่นบางประเภทที่มีความสำคัญ แต่โดยส่วนใหญ่แล้วมันจะเร็วพอสำหรับการใช้งานส่วนใหญ่ อย่างน้อย JavaScript ก็เร็วขึ้นเรื่อย ๆ แม้ว่าจะมีฟีเจอร์ที่บรรจุอยู่ในทุกรีลีส

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


10

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

ตามความเป็นจริงแล้ว GoF ไม่ได้พยายาม 'สำรวจรูปแบบการออกแบบ' อย่างละเอียด แต่พวกเขามีส่วนร่วมในโครงการขนาดใหญ่กว่ามาก: เพื่อแนะนำ 'pattern pattern' ให้กับ CS พร้อมกับอาร์คาน่าที่แปลกประหลาดของ Forces, Forces, Participants และอื่น ๆ ซึ่งล้มเหลวเพราะมันเป็นความเข้าใจผิดขั้นพื้นฐาน

สิ่งที่พวกเขาทำสำเร็จซึ่งมีประโยชน์มีสองสิ่ง:

  • เผยแพร่เทคนิคที่มีประโยชน์หลายประการเช่นรูปแบบผู้เข้าชม
  • ระบุชื่อมาตรฐานที่ส่วนใหญ่ติดอยู่: Factory, Adaptor, Iterator, ... หากคุณดูที่ CORBA ซึ่งได้รับการออกแบบมาก่อนล่วงหน้าคุณจะเห็นคุณค่าของสิ่งนี้: ชื่อต่างประเทศทุกประเภทเช่น Interceptor , คนรับใช้, นายหน้า, ...

อีกแนวคิดที่มีประโยชน์ที่เกิดขึ้นคือ 'ต่อต้านรูปแบบ' เช่น 'บันทึกและการโยน' โครงการเช่นเดียวกับแฟชั่นจำนวนมากในซีเอสถูกบดบังโดยการประกาศของตัวเองและถูกนำไปใช้อย่างผิด ๆ ในฐานะที่เป็นศาสนาซีเออีกศาสนาหนึ่งและมันก็ไปในแนวทางของศาสนาส่วนใหญ่เช่น: มีประโยชน์ในส่วนต่างๆ ) Fred Brooks, 1965) น่าเศร้าที่เราต้องค้นพบใหม่ทุก ๆ ปี


มันยังคงเศร้าอยู่หรือ
เปล่า

1
@ r3wt ไม่เป็นไปตามลำดับ สิ่งที่ฉันพูดคือเรื่องเศร้าคือจุดอ่อนของอุตสาหกรรมไอทีที่คิดว่าการพัฒนาใหม่ทุกอย่างจะเป็นกระสุนเงินในตำนานและบังเอิญต้องทิ้งงานก่อนหน้านี้ของตัวเอง
user207421

2
มองจากมุมมองที่แตกต่าง มันไม่น่าเศร้าที่ฉันอ่านคำตอบของคุณเรียนรู้ที่จะไม่ทำผิดซ้ำ ดังนั้นสิ่งที่คุณจะได้รับนั้นมีประโยชน์มากกับคนอื่น ๆ
r3wt

6

มี / ได้รับการหนังสือหลายเล่มชื่อป๋อม ( ภาษารูปแบบของการออกแบบโปรแกรม ) ซึ่งแต่ละบทของเอกสารที่นำเสนอในการประชุมประจำปี

การอ่านหนังสือฉันพบว่ารูปแบบบางอย่างน่าสนใจและใหม่สำหรับฉันมาตรฐานบางอย่าง (เช่น "half object plus protocol")

ไม่เลยคอลเล็กชั่นของ GoF ไม่ครบถ้วนสมบูรณ์และเป็นแรงบันดาลใจ / เป็นแรงบันดาลใจให้ผู้คนรวบรวม / อธิบาย / ค้นพบ / ประดิษฐ์ใหม่

"รูปแบบเพิ่มเติมเพียง 12 รูปแบบที่ระบุไว้ในบทความ Wikipedia" อาจไม่ใช่คอลเลกชันที่สมบูรณ์เช่น: มีรูปแบบอื่น ๆ ที่บันทึกไว้เช่นในหนังสือ PLoP และที่อื่น ๆ ด้วย


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

เป็นเพราะฉันชอบอ่านหนังสือ GoF ที่ฉันอ่านเพิ่มเติม (หนังสือ) เมื่อพวกเขาถูกตีพิมพ์ (ในภายหลัง)
ChrisW

1
@ FrankPuffer ฉันเดิมพันรูปแบบที่เป็นที่นิยมแม้ว่าชื่อจะไม่
dcorking

5

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

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

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

หนังสือรูปแบบการออกแบบโมเด็มอีกหลายเล่มคือ“ การปรับปรุงการปรับปรุงการออกแบบของรหัสที่มีอยู่ (Martin Fowler)”และ“ รหัสสะอาด: คู่มือของงานฝีมือซอฟต์แวร์ Agile (Robert C. Martin)หนังสือทั้งสองเล่มนี้นำเสนอเนื้อหาที่เปลี่ยนแปลง ถึงรหัสปัจจุบันของคุณแทนที่จะเป็น "การออกแบบกระป๋องที่นำกลับมาใช้ใหม่ได้" แต่มันก็เป็น "ลวดลายการออกแบบ" มาก


3

นี่คือบทสัมภาษณ์ของ Erich Gamma ที่ซึ่งเขาไตร่ตรองเกี่ยวกับการเลือกรูปแบบและสิ่งที่พวกเขาต้องการเปลี่ยนแปลงในวันนี้

http://www.informit.com/articles/article.aspx?p=1404056

Larry:คุณจะสร้าง "รูปแบบการออกแบบ" ได้อย่างไร

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

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

ดังนั้นนี่คือการเปลี่ยนแปลงบางอย่าง:

  • ล่ามและฟลายเวทควรจะถูกย้ายไปอยู่ในหมวดหมู่แยกต่างหากที่เราเรียกว่า "อื่น ๆ / สารประกอบ" เนื่องจากเป็นสัตว์ที่แตกต่างจากรูปแบบอื่น ๆ วิธีการของโรงงานจะถูกนำไปใช้กับโรงงาน
  • หมวดหมู่คือ: Core, Creational, อุปกรณ์ต่อพ่วงและอื่น ๆ ความตั้งใจที่นี่คือการเน้นรูปแบบที่สำคัญและแยกพวกเขาออกจากคนที่ใช้น้อยกว่า
  • สมาชิกใหม่คือ: Null Object, Type Object, Dependency Injection และ Extension Object / Interface (ดูที่ "Object Extension" ในรูปแบบภาษาของการออกแบบโปรแกรม 3, Addison- Wesley, 1997)
  • นี่คือหมวดหมู่:
    • แกนหลัก: คอมโพสิตกลยุทธ์รัฐคำสั่ง Iterator พร็อกซีวิธีเทมเพลต
    • Creational: โรงงานต้นแบบผู้สร้างพึ่งพาการฉีด
    • อุปกรณ์ต่อพ่วง: โรงงานที่เป็นนามธรรมผู้เข้าชมมัณฑนากรผู้ไกล่เกลี่ยวัตถุประเภทวัตถุว่างเปล่าวัตถุส่วนขยาย
    • อื่น ๆ : Flyweight, Interpreter

ทำไมคุณถึงลงคะแนนฉัน โปรดอธิบายในความคิดเห็นเพื่อที่ฉันจะได้ปรับปรุงคำตอบ
akuhn

3

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

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


จุดดี แต่ฉันสงสัยว่าหลายคนเข้าใจหนังสือ (หรือรูปแบบโดยทั่วไป) ด้วยวิธีนี้
Frank Puffer

@ lud1977 หากเราไม่บันทึกประวัติศาสตร์อะไรจะทำให้อนาคตไม่ตกอยู่ในกับดักเดียวกัน ดังนั้นจะต้องมีการบันทึกเสมอ มันไม่ไร้จุดหมาย
r3wt

2

ดังนั้นฉันจึงคาดว่าจำนวนของรูปแบบการออกแบบที่เป็นที่รู้จักและจัดทำเอกสารจะเพิ่มขึ้นอย่างมีนัยสำคัญ

มันไม่ได้เกิดขึ้น มากกว่า 20 ปีหลังจากหนังสือ GoF ออกมามีเพียง 12 รูปแบบเพิ่มเติมที่ปรากฏในบทความ Wikipedia ซึ่งส่วนใหญ่เป็นที่นิยมน้อยกว่าต้นฉบับมาก (ฉันไม่ได้รวมรูปแบบการทำงานพร้อมกันที่นี่เพราะครอบคลุมหัวข้อเฉพาะ)

หนังสือ GoF และ Wikipedia แทบจะไม่เป็นแหล่งเดียวของรูปแบบการออกแบบที่เป็นที่รู้จัก หากคุณเพียงแค่ค้นหา "รูปแบบการออกแบบ" ใน Amazon.com คุณจะได้รับหนังสือหลายร้อยเล่ม (ลองค้นหานี้) ฉันเดาว่าพวกเขามีรูปแบบที่เป็นที่รู้จักมากที่สุดในบทความ Wikipediaเท่านั้น

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


-1

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

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

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

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


-2

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

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