การเขียนโปรแกรมตามรูปแบบคืออะไร?


16

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


12
มัวเมากับรูปแบบเป็นวิธีหนึ่งในการต่อต้านรูปแบบ
Anto

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

1
คุณเขียนโปรแกรมเป็นภาษาไดนามิกหรือไม่ หลายรูปแบบที่ผู้คนอ้างถึงเป็นวิธีในการหลีกเลี่ยงข้อ จำกัด ใน Java
johncip

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

คำตอบ:


19

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

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

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


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

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

9

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

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

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


2
+1 สำหรับการสื่อสาร กิจวัตรประจำวันจะราบรื่นขึ้นมากเมื่อทุกคนอยู่ในหน้าเดียวกันและมีคำศัพท์ทั่วไป
Ampt

3

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

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

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

ดูบทเรียนออนไลน์เกี่ยวกับรูปแบบ Wikipedia มีบทความที่ดี เว็บไซต์นี้เป็นสิ่งที่ดีเกินไป: http://sourcemaking.com/ หากคุณเป็นโปรแกรมเมอร์ที่มีประสบการณ์คุณจะพบว่าคุณมีรูปแบบไม่กี่รูปแบบหรืออาจนำบางสิ่งที่คล้ายกันมาใช้โดยไม่ทราบชื่อ

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

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


1

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

ตั้งแต่ฉันเขียนโปรแกรมปลั๊กอิน jQuery, ปลั๊กอินคลาวด์ CMS และปลั๊กอินอีคอมเมิร์ซ, "การเขียนโปรแกรมตามรูปแบบ" จากมุมมองนั้นหมายถึงการดูเทคโนโลยีหลักและกรณีการใช้งานที่มีอยู่และเข้าถึงสิ่งที่เกี่ยวข้องกับสถิติมากที่สุด โดยเฉพาะอย่างยิ่งปลั๊กอินต้องใช้รูปแบบมากดังนั้นจึงเหมาะสมกับบริบทการเขียนโปรแกรมเป็นอย่างดี

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

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