มีรูปแบบการออกแบบยกเว้น MVC สำหรับเว็บหรือไม่


15

ฉันต้องการทราบว่ามีรูปแบบการออกแบบใด ๆ สำหรับเว็บนอกเหนือจาก MVC หรือไม่

ฉันรู้ว่ามีรูปแบบการออกแบบเป็น: Registry, Observer, Factory, ActiveRecord, ... และ MVC ชุดของรูปแบบการออกแบบอื่น ๆ และโครงสร้างโฟลเดอร์

มีรูปแบบการออกแบบเช่น MVC เป็นชุดรูปแบบการออกแบบอื่น ๆ หรือไม่?

แก้ไข: ภาษาการเขียนโปรแกรมของฉันคือ PHP


มีรูปแบบ BBOMเสมอ
zzzzBov

1
@ Mr-Moqadam โปรดดู - meta.stackexchange.com/questions/5234/…
Yusubov

ฉันเชื่อว่าคำตอบด้านล่างตอบทุกแง่มุมของคำถามของคุณ คุณสามารถยอมรับสิ่งที่ดีที่สุดและช่วยเหลือชุมชน
Arpith

รูปแบบฟลักซ์ของ FB เป็นอย่างไร
มูฮัมหมัดอู

ดูที่มุมมองแรกด้วย
nawfal

คำตอบ:


25

มีรูปแบบที่แตกต่างกันในการพัฒนาซอฟต์แวร์ MVP, MVVM, MVC และอื่น ๆเป็นชื่อที่รู้จักกันดี อย่างไรก็ตามคุณต้องกำหนดปัญหาหรือเทคโนโลยีเฉพาะที่คุณต้องการแก้ไขหรือใช้งาน

ป้อนคำอธิบายรูปภาพที่นี่

แต่ละรูปแบบเหล่านี้ดีในการแก้ปัญหาเฉพาะบางชุด ตัวอย่างเช่นรูปแบบMVP (Model View Presenter)ช่วยแนะนำการแยกข้อกังวลในการพัฒนา ASP.NET WebForms ประกอบด้วยการแบ่งหน้าที่การรวบรวมการแสดงและการจัดเก็บข้อมูลจากหน้าเว็บเป็นวัตถุแยกต่างหาก: วัตถุแบบจำลองวัตถุมุมมองและวัตถุผู้นำเสนอ

ส่วนใหญ่ที่มีชื่อเสียงตำราทั่วไปของรูปแบบการออกแบบเป็นแก๊งสี่ (GoF) รูปแบบการออกแบบ

ป้อนคำอธิบายรูปภาพที่นี่

แก้ไข:ฉันคิดว่าคุณมีความสนใจในการใช้รูปแบบการออกแบบบนแพลตฟอร์ม. NET


1
+1 เราจะอยู่กับ MVC ที่กำหนดเป็นรูปแบบหรือเทคนิคที่จะเห็นในไม่ช้าหรือใกล้จะเห็นว่าเป็นตัวตายตัวแทนใช่หรือไม่
อิสระ

6
+1 แต่ MVP, MVVM และ MVC เป็นรูปแบบของชุดรูปแบบเดียวกันทั้งหมด: การแยก (g) UI จากตรรกะของแบบจำลองและมีบุคคลที่สาม (ผู้ควบคุมผู้นำเสนอ) เป็นสื่อกลางระหว่างพวกเขา
Marjan Venema

2
@ Mr-Moqadam: MVC ดูเหมือน overkill และซับซ้อนในตอนแรก มันทำสิ่งที่คุณควรทำแยก UI ตรรกะและข้อมูล สิ่งเดียวที่แน่นอนในการพัฒนาซอฟต์แวร์คือการเปลี่ยนแปลง และเป็นกฎง่ายๆ 20% เป็นการพัฒนา 80% ยังคงอยู่ จากมุมมองนั้น MVC ย่อมคุ้มค่ากับความพยายาม นอกจากนี้ยังเป็นรูปแบบพื้นฐานที่สุดในการบรรลุเป้าหมายนี้ฉันเดา
Bruno Schäpper

3
@ Mr-Moqadam: ไม่มันช่วยคุณได้มากแม้ว่าคุณจะอยู่คนเดียว และโดยเฉพาะในโครงการขนาดใหญ่
Bruno Schäpper

1
@ Mr-Moqadam ใครเคยบอกว่า MVC เป็นรูปแบบการพัฒนาทีม ฉันได้รับการพัฒนาเป็นเวลานานโดยลำพังโดยใช้ PHP และ MVC เป็นสิ่งจำเป็นสำหรับฉันในการดูแลรักษาสิ่งต่าง ๆ คุณได้ลองใช้กรอบ PHP หรือไม่?
Songo

7

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

รูปแบบอื่น ๆ ที่ตั้งชื่อโดยคนอื่น ๆ ก็เป็นทางเลือกที่ดีเช่นกัน


ฉันคิดว่า MVC เลื่อนระดับโดยใช้ตัวควบคุมแบบบาง! คุณจะรู้ว่าคำพูด "Thin Controllers & Fat Models"
Songo

แต่ในความเป็นจริงแล้วผู้ควบคุมมีแนวโน้มที่จะอ้วนสวย
Jan_V

2
นั่นเป็นเพราะคุณใส่ลอจิกโดเมนเป็นส่วนควบคุมซึ่งไม่ใช่ความตั้งใจของ MVC ชนิด Krassner & Pope ดั้งเดิม ตัวควบคุมในแบบดั้งเดิมนั้นเกี่ยวกับการจัดการอินพุตเช่น การเชื่อมต่อการคลิกเมาส์บน (X, Y) ประสานงานกับการทำงานของแบบจำลอง (เช่นการเพิ่มอุณหภูมิในแอปควบคุมอุณหภูมิ) ที่กล่าวว่าเลเยอร์คอนโทรลเลอร์ส่วนใหญ่ในความรู้สึก MVC นั้นเป็นแบบอัตโนมัติเต็มรูปแบบดังนั้นผู้พัฒนาแอปพลิเคชันจะมองไม่เห็นในกรอบงาน
Aadaam

การเคลื่อนไหวเป็นเหมือนฟลักซ์
Muhammad Umer

4

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

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

สำหรับ PHP อย่างน้อยรูปแบบการออกแบบMVC / HMVCมีแนวโน้มที่จะครองเฟรมเวิร์กหลักที่มีอยู่ (เช่นZend , CakePHP , CodeIgniterเป็นต้น) แต่มีรูปแบบการออกแบบที่แตกต่างกันมากมายที่สามารถใช้ได้

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

เป็นสิ่งสำคัญที่จะต้องทราบ (และตามที่แสดงออกโดย @Marjan Venema ในความคิดเห็นต่อคำตอบของ @ ElYusubov) ว่า MVC, MVP, MVVM และรูปแบบMV xอื่น ๆ(อย่างน้อยที่สุด) จะเหมือนกันทั้งหมด 'ลวดลายการออกแบบ'

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

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

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

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

หากคุณไม่มีปัญหาที่เฉพาะเจาะจงในการแก้ไขจากนั้นการเรียนรู้หนึ่งในกรอบงานทั่วไปคือทางออกที่ดีที่สุดของคุณ


3

หนึ่งในตัวอย่างที่มีชื่อเสียงที่สุดคือKnockout.jsซึ่งเป็นกรอบ JavaScript ซึ่งใช้รูปแบบการออกแบบ MVVM มีบทความที่ดีอยู่ที่นี่ไปบนกองล้นเปรียบเทียบ MVC Backbone.js กรอบ VS Knockout.js

sidenote คือรูปแบบการออกแบบ MVVM มีต้นกำเนิดจาก Microsoft ในรูปแบบการออกแบบ PM ของ Martin Fowler MVVM ถูกใช้อย่างกว้างขวางโดยแอปพลิเคชัน WPF


ไม่พบหน้านี้!
มูฮัมหมัดอู

1
@ MuhammadUmer ขอบคุณฉันได้อัปเดตลิงก์แล้ว น่าเสียดายที่ StackOverflow ลบคำถามที่มีจุดมากกว่า 1,000 ข้อ โชคดีที่เครื่อง wayback ไม่มีระบบการควบคุมที่เข้มงวด
dodgy_coder

ไม่แปลกใจเลย ... ฉันคาดหวังว่าไซต์ se ทั้งหมดจะเป็นเช่นนี้เช่นกัน
มูฮัมหมัดอู

0

ดังที่ ElYusubov ได้กล่าวเอาไว้กรอบ ASP.Net นั้นมีรูปแบบ MVP และ MVVM มานานถ้าคุณกำลังมองหาตัวอย่างที่ค่อนข้างสำคัญ หนึ่งในความแตกต่างที่สำคัญระหว่าง MVC และ MVVM คือวิธีการอัพเดทเอนทิตีของคุณ MVC นั้นเหมาะสมกับวิธีการใช้งานเว็บแอพพลิเคชั่นแบบไร้รัฐหรือกึ่งไร้สัญชาติแบบดั้งเดิม เฟรมเวิร์ก ASP.Net พยายามแก้ไขปัญหานี้โดยทำให้สถานะของคุณฝังอยู่ในแบบฟอร์ม (ดังนั้นจึงสามารถกู้คืนได้ในแต่ละคำขอ) ซึ่งทำให้รูปแบบ MVP และ MVVM เหมาะสมกว่า

ด้วย HTML5 แอปพลิเคชันจะกลายเป็นจาวาสคริปต์ที่หนักขึ้นเรื่อย ๆ โดยที่สถานะส่วนใหญ่ของพวกเขาอยู่บนไคลเอนต์ สิ่งนี้อาจนำไปสู่การฟื้นตัวในกรอบ MVVM และKnockout JSเป็นตัวอย่างหนึ่ง


0

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

รูปแบบที่รู้จักกันดีอื่น ๆ คือ Service Oriented Architecture (SOA) สร้างขึ้นบนวิธีการที่ทันสมัยจะมี MVC (หรือรสชาติ) บนเซิร์ฟเวอร์ของคุณเท่านั้นที่จะเปิดเผยบริการที่คุณสามารถทำงานกับ ในฝั่งไคลเอ็นต์จะมีแอปพลิเคชันที่มีสไตล์ MVC อื่น ๆ เช่นแอปพลิเคชันเว็บที่ขับเคลื่อนด้วย HTML5 และ JavaScript (เช่น Twitter หรือ Linked In) แอปพลิเคชันไคลเอนต์จะใช้บริการฝั่งเซิร์ฟเวอร์ของคุณ ("มุมมอง" ของเซิร์ฟเวอร์) เป็นรูปแบบ IMHO นี่จะเป็นสิ่งที่ล้ำสมัยและอาจจะผลัก MVC ด้านเซิร์ฟเวอร์ออกไป


0

ฉันเป็นการส่วนตัวที่จะใช้สิ่งที่ใช้ความคิดของการเป็นตัวแทนวิธีการทรัพยากรแต่ในขั้นตอนนี้ส่วนใหญ่เป็นเพียงการทดลองมากกว่าสิ่งอื่นใด มันมีบางจุดที่น่าสนใจที่จะเป็นแบบคำขอ / ตอบกลับ HTTP ที่ดีกว่า MVC (ซึ่งมีความหมายสำหรับแอพพลิเคชั่นที่มีอายุการใช้งานยาวนานที่ทำงานบนคอมพิวเตอร์เครื่องเดียว อย่างไรก็ตามมันมีข้อเสียเปรียบที่ถ้าคุณใส่วิธีการในการจัดการทรัพยากร GET, POST, PUT, DELETE ฯลฯ จากนั้นทรัพยากรของคุณจะถูกผนวกเข้ากับส่วนหน้า ฉันคิดว่าฉันจะแยกมันออกเป็นเลเยอร์อื่น


0

มีมากกว่า 1,000 วิธียกเว้น MVC บางวิธีคล้ายกับ MVC และแตกต่างกันโดยสิ้นเชิง

ตัวอย่างเช่น :

  1. Model-Template-View - MTV
  2. Model – view – presenter - MVP
  3. โมเดลลำดับชั้น - มุมมอง - คอนโทรลเลอร์ HMVC
  4. Model View ViewModel- MVVM

ฯลฯ


1
นี้ไม่ได้ดูเหมือนจะนำเสนออะไรที่สำคัญกว่าจุดทำและอธิบายในก่อน 7 คำตอบ
ริ้น

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