MVC เป็นรูปแบบการออกแบบหรือรูปแบบสถาปัตยกรรม


109

ตามที่SunและMsdnเป็นรูปแบบการออกแบบ

ตามวิกิพีเดียเป็นรูปแบบสถาปัตยกรรม

เมื่อเปรียบเทียบกับรูปแบบการออกแบบลวดลายสถาปัตยกรรมจะมีขนาดใหญ่กว่า (Wikipedia - รูปแบบสถาปัตยกรรม )

หรือเป็นรูปแบบสถาปัตยกรรมที่มีรูปแบบการออกแบบด้วย?

อันไหนจริง?


1
ต้องมีหนึ่งคำตอบที่แท้จริง ...
Mike G

ตาม Dave ที่ Product Madness MVC เป็นรูปแบบการออกแบบและ RobotLegs ก็เช่นกัน : P
andygoestohollywood

คำตอบ:


56

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


16
ใช่ฉันจะบอกว่า MVC เป็นรูปแบบสถาปัตยกรรมสำหรับระดับการนำเสนอของคุณ
murki

8
ฉันไม่เห็นด้วยอย่างยิ่งใน "MVC ส่วนใหญ่เกี่ยวข้องกับ UI / เลเยอร์การโต้ตอบของแอปพลิเคชัน" "M" / model ใน MVC คือชั้นธุรกิจซึ่งคุณอาจต้องการแบ่งออกเป็นหลายระดับ
มิว

ใช่คำตอบนี้ผิด MVC ไม่เกี่ยวกับ UI / Interaction อย่างแน่นอน คุณสามารถมี mvc ที่ด้านหน้าและด้านหลังได้อย่างสมบูรณ์แบบในมุมมองเริ่มต้นมักเป็นเพียง html / js หรือ a .jsp หรือ. phtml และเซิร์ฟเวอร์จะกำหนดตัวควบคุมและโมเดล ตัวอย่าง JSP (มุมมอง), JavaBeans (Model), Servlet (คอนโทรลเลอร์) แนวคิดเดียวกันกับ php framework ที่มีชื่อเสียงทั้งหมด (ซิมโฟนีเซนด์เค้ก ฯลฯ ) แต่ตอนนี้เฟรมเวิร์กส่วนหน้าของวันนี้ดูเหมือนว่าแอปพลิเคชันส่วนหลังและเฟรมเวิร์กจาวาสคริปต์สมัยใหม่ใช้ mvc (html มุมมองของคุณควบคุมสคริปต์ของคุณและจำลองวัตถุ js ของคุณเป็นเอนทิตี)
amdev

40

ทำไมหนึ่งในนั้นถึงต้องเป็นจริง?

ทั้งสองอย่างสามารถเป็นจริงขึ้นอยู่กับมุมมอง

MVC สามารถเป็นรูปแบบทางสถาปัตยกรรมได้หากเป็นพื้นฐานของสถาปัตยกรรมแอปพลิเคชัน

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


27

รูปแบบการออกแบบกล่าวถึงวิธีการเขียนโค้ดอย่างมีประสิทธิภาพ (พิจารณาCode Metrics )

ประโยชน์บางประการ:

  1. บำรุงรักษาได้อย่างง่ายดาย
  2. การใช้งานซ้ำได้สูง
  3. อ่านได้เนื่องจากมีนามธรรม

รูปแบบสถาปัตยกรรมกล่าวถึงวิธีการใช้ทรัพยากรอย่างมีประสิทธิภาพ

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

ใน MVC, a). มุมมองสามารถสร้างได้โดยใช้เทมเพลตจาวาสคริปต์และยังสามารถใช้ html b) ตัวควบคุมสามารถเขียน. NET framework และ c) สามารถเขียนโมเดลใน Java - อาจใช้บริการ java ที่ส่งคืนเฉพาะข้อมูล json

ในรูปแบบการออกแบบไม่สามารถใช้รูปแบบที่สามารถเขียนโค้ดในหลายเทคโนโลยีเช่นคลาส AdminUser ใน Java, คลาสลูกค้าใน C #, คลาส Partners ใน Php และรูปแบบโรงงานใน Ruby :); อืม.. ง่ายไปไหม :)


6

ฉันรู้ว่ามีคำตอบเมื่อสักครู่ที่ผ่านมา แต่ยังไม่มีใครพูดถึงหนังสือที่สร้างชื่อเสียงให้กับ MVC: Pattern-Oriented Software Architecture (POSA) โดย Buschmann และอื่น ๆ ที่ตีพิมพ์ในปี 2539 แม้ว่าจะไม่ได้อ่านกันอย่างแพร่หลายเท่าหนังสือ Design Patterns โดย Gamma และคณะ POSA เป็นหนึ่งในหนังสือพื้นฐานที่ชุมชนรูปแบบใช้

โอ้และ POSA ระบุอย่างชัดเจนมากว่า MVC เป็นรูปแบบสถาปัตยกรรม ลางสังหรณ์ของฉันคือ MS และ Sun เป็นเพียงแค่เลอะเทอะและเรียกรูปแบบทุกอย่างว่า "รูปแบบการออกแบบ"


3

ผมว่าจริงทั้งคู่ หากคุณกำลังดูการสร้างอินสแตนซ์เฉพาะของ MVC ในเฟรมเวิร์กเช่น Ruby on Rails การสร้างอินสแตนซ์นั้นเป็นรูปแบบการออกแบบมากกว่า หากคุณมอง MVC เป็นแนวคิดทั่วไปมันเป็นรูปแบบสถาปัตยกรรมมากกว่า


3

รูปแบบการออกแบบภายในกลุ่มโมเดล / มุมมอง / คอนโทรลเลอร์ (MVC) ทั้งสามประเภทรวมถึงและอาจไม่ จำกัด เฉพาะ:

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

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

  • กลยุทธ์ที่มุมมองใช้อินสแตนซ์ของคลาสย่อยของคอนโทรลเลอร์เพื่อใช้กลยุทธ์การตอบสนองเฉพาะ ในการใช้กลยุทธ์อื่นเพียงแค่แทนที่อินสแตนซ์ด้วยตัวควบคุมประเภทอื่น

  • วิธีโรงงานระบุคลาสคอนโทรลเลอร์เริ่มต้นสำหรับมุมมอง

  • มัณฑนากรเพิ่มการเลื่อนไปยังมุมมอง


ข้อมูลอ้างอิง

  • หน้าที่ 4 ถึง 6 (ส่วนที่ 1.2 รูปแบบการออกแบบใน Smalltalk MVC)
  • หน้า 293 ถึง 304 (รูปแบบการออกแบบผู้สังเกตการณ์)
  • หน้า 163 ถึง 174 (รูปแบบการออกแบบคอมโพสิต)
  • หน้า 315 ถึง 324 (รูปแบบการออกแบบกลยุทธ์)
  • หน้า 107 ถึง 116 (รูปแบบการออกแบบวิธีโรงงาน)
  • หน้า 175 ถึง 185 (รูปแบบการออกแบบมัณฑนากร)

Eric Gamma, Richard Helm, Ralph Johnson และ John Vlissides รูปแบบการออกแบบ: องค์ประกอบของซอฟต์แวร์เชิงวัตถุที่ใช้ซ้ำได้ Addison-Wesley, Reading, MA, 1994


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

2

MVC มักกล่าวถึงและแนะนำเป็น / ในเลเยอร์การนำเสนอในหนังสือสถาปัตยกรรมซอฟต์แวร์

อ่านหนังสือเหล่านี้:

  1. การออกแบบโซลูชัน Microsoft.NET สำหรับองค์กร (Microsoft press)

  2. รูปแบบการออกแบบ ASP.NET ระดับมืออาชีพ (Wrox)

  3. Enterpise Solutions Patterns โดยใช้ Microsoft.NET (Microsoft press)

  4. รูปแบบของสถาปัตยกรรมแอปพลิเคชันสำหรับองค์กร (Addison Wesley)

  5. แนวทางปฏิบัติสำหรับสถาปัตยกรรมองค์กร (Prentice Hall)


6
ทำไม 2 คำตอบ? คุณสามารถเพิ่มคำตอบนี้เป็นหมายเหตุเพิ่มเติมสำหรับคำตอบแรกของคุณ
frogatto

2

หากคุณใส่สถาปนิกซอฟต์แวร์สิบคนเข้าไปในห้องและให้พวกเขาคุยกันว่ารูปแบบ Model-View-Controller คืออะไรคุณจะได้รับความคิดเห็นที่แตกต่างกันถึง 12 แบบ …คนเจ้าระเบียบบางคนที่นั่นจะมีความเข้าใจกับสิ่งที่ฉันเรียกว่า“ MVC” อย่างหลีกเลี่ยงไม่ได้ อย่าลังเลที่จะแสดงความคิดเห็นที่ลุกเป็นไฟบนกระดานข้อความที่ด้านล่างของเว็บเพจนี้ ฉันยินดีที่จะให้ความบันเทิงในมุมมองที่แตกต่างกันเกี่ยวกับความหมายของ MVC แต่โปรดทราบว่าฉันไม่สนใจ

จอชสมิ ธ


1

และตามที่ Martin Fowler เป็นสถาปัตยกรรม GUI: สถาปัตยกรรมMartin Fowler-GUI

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


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