มีเวิร์กโฟลว์เฉพาะหรือรูปแบบการออกแบบที่ใช้กันทั่วไปเพื่อสร้างแอปพลิเคชั่นการเขียนโปรแกรมฟังก์ชั่นขนาดใหญ่หรือไม่? [ปิด]


13

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

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

"Gang of Four" นั้นเป็นมาตรฐานสำหรับโปรแกรมเมอร์ OO แต่มีอะไรที่คล้ายกันมากกว่านี้ที่ให้ความสำคัญกับกระบวนทัศน์การทำงานหรือไม่? ทรัพยากรส่วนใหญ่ที่ฉันพบมีนักเก็ตโปรแกรมที่ยอดเยี่ยม แต่พวกเขาไม่ถอยกลับเพื่อให้ดูกว้างขึ้นและมีสถาปัตยกรรมมากขึ้น


6
รูปแบบ GOF บางรูปแบบเป็นเพียงวิธีการแก้ปัญหาในภาษา OO สำหรับสิ่งที่การเขียนโปรแกรมฟังก์ชั่นให้แล้ว ดูstackoverflow.com/q/327955
Robert Harvey

2
เกี่ยวข้อง: stackoverflow.com/q/89212
ดึงข้อมูล


ฉันคิดว่ามีการเน้นรูปแบบเฉพาะของ GoF / OOP มากเกินไปในการอภิปรายนี้ ทุกคนสามารถโพสต์รูปแบบการเขียนโปรแกรมเฉพาะการทำงานจริง (ซึ่งไม่เพียง แต่พยายามพิสูจน์ความน่าสนใจของ GoF ในภาษาที่ใช้งานได้)?
Daniel B

คำตอบ:


3

รูปแบบของชนิดนี้มักจะเป็นอาการของแบบจำลองต้นแบบที่ไม่สมบูรณ์

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

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

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


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

@DanielB ไม่มีอะไรผิดปกติกับ OOP ต่อ se แต่วิธีที่ใช้มักจะถูกทำลายโดยสิ้นเชิง รุ่นนี้เหมาะกับปัญหาโลกแห่งความจริงเพียงเล็กน้อย (และมันส่องแสงจริงเมื่อใช้อย่างเหมาะสม) แต่สำหรับส่วนที่เหลือจะต้องใช้ไม้ค้ำและเทปพันสายที่พอดี ดูคำตอบของฉันได้ที่programmers.stackexchange.com/questions/52608/เป็นต้นตัวอย่าง
SK-logic

ตกลงฉันคิดว่าฉันอยู่ในหน้าเดียวกัน ในความเป็นจริงฉันอาจเคยถามคำถามตรงนี้มาก่อนขออภัยด้วย - วิธีที่คุณใช้ประโยคนั้นดูเหมือนว่าคุณกำลังอ้างถึงมากขึ้น
Daniel B

-3

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

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

รูปแบบการออกแบบนั้นยอดเยี่ยม ... แต่อย่างที่ฉันพูดฉันคิดว่ามันมีความหมาย!

แก้ไข: คุณผู้เผยแพร่ศาสนาประเภทแตกสลายฉัน อะไรที่เคยได้รับการพัฒนาโดยไม่ต้อง MVC (หรือรูปแบบการออกแบบอื่น ๆ )!


2
semantic (sɪˈmæntɪk) - adj 1. หรือเกี่ยวข้องกับความหมายหรือเกิดขึ้นจากความแตกต่างระหว่างความหมายของคำหรือสัญลักษณ์ที่แตกต่างกัน 2. หรือเกี่ยวข้องกับ semantics (การศึกษาความหมาย) 3. ตรรกะที่เกี่ยวข้องกับการตีความทฤษฎีทางการ เช่นเดียวกับที่ตารางความจริงได้รับการกล่าวถึงบัญชีของประโยคเชื่อมต่อ
Robert Harvey

+1 - ประเด็นของฉันคือรูปแบบการออกแบบเป็นเพียงวิธีการสื่อสาร!
aserwin

รูปแบบการออกแบบเป็นมากกว่าวิธีการสื่อสาร เป็นสูตรที่เข้าใจกันดีซึ่งสามารถนำไปใช้ในซอฟต์แวร์เพื่อแก้ไขปัญหาที่พบบ่อย
Robert Harvey

นั่นคือสิ่งที่หนังสือพูด แต่ฉันไม่เคยแก้ปัญหาด้วยรูปแบบการออกแบบที่ฉันไม่สามารถแก้ไขได้หากไม่มีมัน ข้อได้เปรียบเพียงข้อเดียวที่ฉันสังเกตเห็นจากประสบการณ์ของฉันคือความสามารถในการพูดคุยกับผู้อื่นเกี่ยวกับรหัส! ;)
aserwin

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