รูปแบบการออกแบบที่ใช้บ่อยที่สุดคืออะไร? [ปิด]


24

คุณคิดว่ารูปแบบการออกแบบใดที่ได้รับความนิยมมากที่สุด


ทั้งสองถ้าเป็นไปได้ ...
Tamara Wijsman

"เปลี่ยนแทน polymorphism" หรือไม่
mlvljr

@Bigown: คุณควร "ยอมรับ" คำตอบที่คุณชอบมากที่สุด หากคุณไม่ชอบคำตอบใด ๆ โปรดเสนอความโปรดปราน
Macneil

2
ให้คะแนนว่าใกล้จะไม่สร้างสรรค์ - นี่เป็นแบบสำรวจความคิดเห็น หากไม่มีใครมีการศึกษาเชิงประจักษ์เพื่ออ้างถึงคำตอบทั้งหมดจะถูกคาดเดาหรือรายการโปรด (หรือไม่ใช่รายการโปรด) และการลงคะแนนจะสะท้อนถึงความรู้สึกส่วนตัว ผลลัพธ์ที่ได้จะเป็นรายการรูปแบบการออกแบบที่ไม่มีความลึก ดังนั้นไม่สร้างสรรค์
Steven A. Lowe

@ สตีเว่น: ฉันค่อนข้างแน่ใจว่าเจย์ถูกต้องกับ The Big Ball of Mud :-)
Tamara Wijsman

คำตอบ:


39

ฉันค่อนข้างแน่ใจว่าสิ่งที่พบได้บ่อยที่สุดคือ 'The Big Ball of Mud' น่าเสียดายสำหรับพวกเราทุกคน
http://en.wikipedia.org/wiki/Big_ball_of_mud


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

3
@Arturo - นั่นเป็นเหตุผลหนึ่งที่เป็นไปได้ อื่น ๆ : 1) โครงการขนาดเล็กเริ่มต้นโดยโปรแกรมเมอร์ที่ไม่มีประสบการณ์ซึ่งประสบความสำเร็จอย่างคาดไม่ถึงและเติบโตเกินกว่าวัตถุประสงค์ดั้งเดิม 2) แนวโน้มของโปรแกรมเมอร์ที่ไม่มีประสบการณ์ที่ได้รับมอบหมายให้ดูแลบำรุงรักษาซึ่งไม่มีคำแนะนำหรือความเข้าใจในสถาปัตยกรรมดั้งเดิมดังนั้นพวกเขาจึงแฮ็กข้อมูลและมันแย่ลงเมื่อระบบมีอายุมากขึ้น 3) ทีมที่ใช้เทคโนโลยีที่ผิดหรือเป็นเทคโนโลยีใหม่ที่พวกเขาไม่คุ้นเคยกับและใช้งานได้ไม่ดีในโครงการใหม่และมันหลุมก่อนถึงเส้นตาย :)
เจ

1
ฮ่า ๆ - ถ้าฉันสามารถเพิ่มคะแนนให้คุณได้ การสังเกตที่ยอดเยี่ยม (และเศร้า)
luis.espinal

25

MVCและรูปแบบของมันเป็นหนึ่งในรูปแบบการออกแบบชั้นนำอย่างแน่นอน


2
ฉันจะบอกว่าคำถามของ OP ค่อนข้างโง่ (ฉันยังเชื่อว่ามันเป็น) อย่างไรก็ตามคำตอบของคุณค่อนข้างถูกต้อง IMO หากมีหนึ่งรูปแบบ (และรูปแบบของมัน) ที่มีการใช้งานอย่างสม่ำเสมอมากก็เป็นรูปแบบนี้ +1 สำหรับคำตอบที่ดีของคุณ
luis.espinal

21

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

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


2
แม้กระทั่งเรื่องเศร้าเมื่อคุณพิจารณาหลาย ๆ คนมองว่าซิงเกิลตันเป็นปฏิปักษ์!
RichardOD

1
@RichardOD เป็นเรื่องน่าเศร้าที่คนทั่วไปคิดว่ามันไม่สำคัญหรือน่าเศร้าที่คนใช้มันเมื่อมันเป็นแบบต่อต้าน?
Matt Olenik

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

@RichardOD - ไม่ใช่ซิงเกิลที่ถือว่าเป็น anti-pattern มันเป็นการใช้งานที่ไม่เหมาะสมซึ่งเป็นรูปแบบการต่อต้าน มีเพียงไม่กี่กรณีที่ต้องการ / ต้องการซิงเกิลจริงๆและในสภาพแวดล้อมที่มีคอนเทนเนอร์ที่ควบคุมความละเอียดของทรัพยากรพวกเขาไม่จำเป็นต้องมีแม้แต่ เมื่อคุณเห็นซิงเกิลตันในฐานรหัส Java สมัยใหม่นั่นเป็นธงสีแดงสำหรับการใช้งานรูปแบบต่อต้าน(ไม่ใช่รูปแบบซิงเกิลเอง)
luis.espinal

@Jaco - ฉันจะได้รับสิ่งอื่นจากคุณ ฉันคิดว่าคอมโพสิตกลยุทธ์และเทมเพลต (และการเกิดใหม่หลายครั้ง) ได้กลายเป็นสิ่งที่แพร่หลายมากขึ้นกว่าซิงเกิลตันโดยเฉพาะอย่างยิ่งเนื่องจากเรามุ่งเน้นไปที่องค์ประกอบเชิงโครงสร้างเกี่ยวกับการสืบทอดในช่วงทศวรรษที่ผ่านมา
luis.espinal


7

มัณฑนากร

เพิ่มฟังก์ชันการทำงานให้กับวัตถุที่รันไทม์ผ่านการจัดวาง ฉันชอบส่วนตัว

แก้ไข: นอกจากนี้โรงงานอาจเป็นหนึ่งในสิ่งที่พบได้บ่อยที่สุด


5

หน้าตึก

คิดว่าส่วนต่อประสาน REST ใด ๆ เช่น Twitter หรือ SO API มันซ่อนอะไรหลาย ๆ อย่างไว้ที่อย่างน้อยก็ในกรณี twitters ที่ซับซ้อนอย่างน่ากลัว

ฉันสนใจที่เก็บตาราง db @ @luslusk ของทวีตหรือไม่ และมันมีแคชเร็ว? และ @shemnon นั้นมีผู้อ่านระดับต่ำมากทวีตนั้นมักจะจำไม่ได้ใช่มั้ย นั่นคือความมหัศจรรย์ของซุ้ม


5

รูปแบบกลยุทธ์

หากคุณเคยใช้การฉีดพึ่งพาคุณเคยใช้รูปแบบกลยุทธ์


เห็นด้วยกลยุทธ์นอกเหนือจากเทมเพลตและคอมโพสิต (และรูปแบบที่หลากหลายและการรวมกัน)
luis.espinal

5

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


3

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


3

พร้อมกับคำตอบก่อนหน้าของฉันฉันจะเพิ่มใหม่ฉันวิ่งเข้าไปในวันนี้จากสัตว์ร้ายของฉันของโครงการสืบทอด:

คัดลอกวาง

ในขณะที่การดีบักฉันวิ่งเข้าไปในชิ้นส่วนของรหัสเรียก 2 ฟังก์ชั่นที่มีชื่อคล้ายกัน:

if(x)
   Func1
else
   Func2

Func1 และ Func2 มีพารามิเตอร์เดียวกัน ฉันดึงพวกมันออกมาและแตกต่างกันและพวกมันก็เหมือนกัน 100% ยกเว้น Func1 เรียก Func3 และ Func2 เรียก Func4 ฉันดึงสิ่งเหล่านั้นออกมาและทำให้แตกต่าง เหมือนกัน 100% ยกเว้น 1 บรรทัด ดังนั้นโปรแกรมเมอร์ก่อนหน้านี้จึงตัดสินใจที่จะคัดลอกและวางฟังก์ชั่น 50 บรรทัดที่ซ้อนกันสองฟังก์ชันแทนที่จะเพิ่มพารามิเตอร์แฟล็กเป็น 2 ฟังก์ชันส่วนตัวที่ใช้ในที่เดียว มันทำให้ฉันอยากร้องไห้


2

เมื่อพูดถึงรูปแบบการออกแบบ Gang-of-Four ฉันไม่สามารถนึกถึงโปรแกรมที่ไม่ได้ใช้รูปแบบการสังเกตการณ์ นอกจากนี้ตามที่ Jaco กล่าวไว้ซิงเกิลตันก็ถูกใช้อย่างสูงเช่นกันโชคไม่ดีที่มันกลายเป็นค้อน (โปรแกรมเมอร์คนใดก็ตามก็ใช้มันแม้ว่ามันจะไม่จำเป็นก็ตามก็ตาม)


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

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

เวลาเท่านั้นที่ฉันเคยเห็นความต้องการมันคือการเชื่อมต่อฐานข้อมูล ที่กล่าวว่าเกือบทุก "บริการ" (อ่าน: คล้ายกับโรงงาน) คลาสในโครงการนี้ในที่ทำงานเป็นซิงเกิลตันที่เก็บไว้ใน$_SESSIONตัวแปรPHP
Tarka


1

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



1

รูปแบบการออกแบบที่ใช้บ่อยที่สุดคือเห็นได้ชัดว่าปาเก็ตตี้


0

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

ในเชิงสถาปัตยกรรมผมขอยืนยันว่า MVC สำหรับองค์กรและรูปแบบขึ้นอยู่กับเครื่องจักรของรัฐในด้านของสิ่งต่าง ๆ

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