MVC ใช้กับเว็บเท่านั้นหรือไม่


14

มันเกือบจะทันทีและเมื่อใดก็ตามที่ฉันพูดคุยกับนักพัฒนาเกี่ยวกับ Model View Controller ( MVC ) พวกเขาบอกว่าคุณทำคำขอไปยัง URL ที่เซิร์ฟเวอร์สร้างเอนทิตี (MODEL) และให้การแสดงภาพของโมเดลนั้น

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

  • มีการใช้งาน MVC บนเดสก์ท็อปสไตล์แอปพลิเคชันหรือไม่

  • ฉันเป็นคนใหม่สำหรับกระบวนทัศน์และอยากจะรู้ว่าซูเปอร์ชุดใด ๆ ที่ MVC


1
คุณตรวจสอบProgrammers.SEหรือแท็กStack Overflow wikisสำหรับ 'mvc' หรือไม่
ริ้น

3
@gnat ใช่ฉันทำ
Deeptechtons

6
ถ้าอย่างนั้นคุณอาจรู้คำตอบสำหรับคำถามของคุณใช่ไหม
ริ้น

4
@gnat อย่างจริงจังไม่ฉันยังใหม่กับ MVC ทั้งหมด (ตามที่ระบุไว้) และไม่เคยใช้หรือเคยได้ยิน (มีหูบ้าง) เกี่ยวกับ MVC ที่ใช้กับแอปพลิเคชัน windows หรือใช้แอปพลิเคชันที่ใช้ตรา MVC บนหน้าดาวน์โหลด ขออภัยถ้าคำถามนั้นโง่ แต่สำหรับฉันแล้วมันก็เป็นปริศนา
Deeptechtons

มีความอุดมสมบูรณ์ของแหล่งข้อมูลที่ดีสำหรับการเรียนรู้ประวัติศาสตร์ของ MVC มี แต่ฉันเห็นความเข้าใจผิดนี้มากดังนั้นฉันเขียนบทสรุปที่ดีในบล็อกของฉันblog.kutulu.org/2012/01/mvc-mvp-mvvm-mvpvm-lmnop-wtf .html
KutuluMike

คำตอบ:


22

MVC เป็นรูปแบบ รูปแบบที่ใช้ในการเขียนโปรแกรมทั้งหมด MVC เพิ่งเกิดขึ้นทำงานได้ดีในบริบทเว็บ

ตามที่ริ้นชี้ให้เห็นเพียงแค่ดูที่แท็ก mvc และคุณจะเห็นตัวอย่างมากมายของการใช้งาน


5
นี่คือกุญแจสำคัญ MVC ทำงานได้ดีมากในเว็บแอปพลิเคชั่นและเป็นส่วนใหญ่ของสาเหตุที่เฟรมเวิร์กที่ใช้ MVC สมัยใหม่ (เช่น Rails, Django และ ASP.NET MVC) เป็นที่นิยมมาก มันทำงานในบริบทอื่น ๆ (เช่นแอปเดสก์ท็อป) ด้วย แต่มันยากที่จะแยกมุมมองและตัวควบคุมให้สะอาดดังนั้นตัวแปรที่ลบการแยกมุมมอง - ตัวควบคุมออกเช่น Model-delegator (ใช้โดย Swing) หรือเปลี่ยนตำแหน่งที่เกิดการแยก เช่น Model-View-ViewModel (ส่วนใหญ่ใช้โดย. Net WPF) เป็นเรื่องธรรมดาใน Desktop Applications
Kevin Cathcart

หากคุณดูที่คำอธิบาย Smalltalk ดั้งเดิมของสิ่งที่คอนโทรลเลอร์ทำ - แปลอินพุตของผู้ใช้เป็นข้อความสำหรับโมเดล - Windows เองนั้นเป็นคอนโทรลเลอร์ขนาดใหญ่ตัวหนึ่ง นั่นเป็นสาเหตุที่ MVC เป็นรูปแบบที่ไม่สอดคล้องกับแอปพลิเคชัน Windows UI มันใช้มากขึ้นใน UI Frameworks สำหรับระบบที่ไม่ใช่ Windows
KutuluMike

@MichaelEdenfield ไม่จริง ๆ ; คุณสามารถทำ MVC และ WinForms ร่วมกันได้แม้ว่า MVP จะได้รับความนิยมมากกว่านั้น แต่ MVP เป็นตัวแปรของ MVC อยู่ดี
Andy

45

เมื่อพิจารณาว่า MVC นั้นมาจากปี 1977 และเว็บถูกประดิษฐ์ขึ้นในปี 1991 เท่านั้นมันควรจะค่อนข้างชัดเจนว่า MVC นั้นไม่ได้มีไว้สำหรับเว็บเท่านั้น


30
นี่เป็นจุดเริ่มต้นที่ดีของคำตอบ แต่มีรสขมในปาก
Nicolas C.

2
ถูกต้องและต่อว่าต่อขาน สิ่งที่ยอดเยี่ยม!
Tom Hawtin - tackline

1
"ในปี 1982 Internet Protocol Suite (TCP / IP) ได้มาตรฐานและแนวคิดของเครือข่ายทั่วโลกของเครือข่าย TCP / IP ที่เชื่อมต่อกันอย่างเต็มที่ที่เรียกว่าอินเทอร์เน็ตได้เปิดตัว" วิกิพีเดีย ถ้าคุณหมายถึง netscape คุณก็ตกลง ... แต่มี "เว็บ" อยู่ก่อนหน้านั้น
jmq

4
@jmquigley "อินเทอร์เน็ต" และ "เว็บ" เป็นสองสิ่งที่แตกต่างกันมาก
Eric King

1
@jmq 1977 แม้ว่าจะยังคงอยู่ก่อนปี 1982 และในฐานะคนอื่นชี้ให้เห็น Web! = อินเทอร์เน็ต เว็บไม่ได้มีอยู่จริงก่อนปี 1991
Andy

9

ไม่การพัฒนาสำหรับ OS X และ iOS ใช้รูปแบบ Model View Controller


2
ในที่สุดคำตอบสำหรับจุดแรกและจุดที่สองโดยไม่มีคำอธิบาย
JeffO

8

ถามคำถามในสภาพแวดล้อมของ Microsoft และหลายคนจะคิดว่าคุณหมายถึง Asp.Net MVC ซึ่งเป็นการใช้งาน MVC โดยเฉพาะสำหรับเว็บ

น่าเสียดายที่มีคนจำนวนมากที่ไม่ทราบว่านี่เป็นการใช้งานรูปแบบ MVC และคิดว่าเป็นคำที่ใช้แทนกันได้ซึ่งนำไปสู่ข้อสันนิษฐานของ "เว็บเท่านั้น"


3
+1 นี่เป็นปัญหากับการตั้งชื่อแพลตฟอร์มหลังจากวิธีการ เมื่อผู้คนได้รู้จักกับแพลตฟอร์มก่อนพวกเขาล้มเหลวที่จะเห็นความแตกต่าง
MattDavey

@Ozz นี้ไม่ได้อธิบายว่าทำไมนักพัฒนาอื่น ๆ มักจะใช้ที่จะพูดเกี่ยวกับเว็บเมื่อ MVC เป็นหัวข้อ
Deeptechtons

1
โปรดหยุดการวาดภาพผู้พัฒนาของ Microsoft เป็นคนโง่ขอบคุณ
Andy

@ Andy - นั่นไม่ใช่นักพัฒนา MS ที่ทุบตีฉันเป็นนักพัฒนา Asp.Net MVC ด้วยตัวเองและฉันก็ตอบด้วยคำตอบเดิม ฉันไม่ได้พูดว่า "ทั้งหมด" คนหรือ "ทั้งหมด" นักพัฒนา. net เพียงสังเกตจากสมมติฐานหรือข้อผิดพลาดที่ฉันได้เห็นคนจำนวนมากทำ ขอบคุณ
ozz

2

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

เฟรมเวิร์ก OO GUI ส่วนใหญ่มีตัวแปร MVC อย่างน้อยบางส่วน ฉันไม่แน่ใจว่า "superset" จะหมายถึงอะไรในกรณีนี้ เป็นการยากที่จะบอกว่าตัวแปรที่ให้ไว้นั้นเป็นชุดย่อยชุดย่อยหรือกลุ่มเพื่อนของ MVC แต่ฉันมักจะพิจารณาเพื่อน ๆ ส่วนใหญ่

ไม่ว่าในกรณีใดส่วนใหญ่ (ส่วนใหญ่?) เหล่านี้ถูกใช้เพื่อการพัฒนาเดสก์ท็อปไม่ใช่การพัฒนาเว็บ ขอบคุณสิทธิบัตร AT&T เก่าบางส่วนระบบหน้าต่างส่วนใหญ่ต้องการโปรแกรมที่สามารถสร้างมุมมองที่ต้องการอีกครั้ง (เกือบ) บังคับอย่างน้อยระดับการแยกระหว่างรหัสที่รักษาสถานะปัจจุบัน (รุ่น) และรหัสที่แสดงสถานะนั้น (มุมมอง) ซึ่งยังคงมีพื้นที่มากมายสำหรับการเปลี่ยนแปลงใน 1) ระดับที่แยกฟังก์ชันการทำงานของตัวควบคุมและ 2) รายละเอียดที่แน่นอนของตำแหน่งที่จะลากเส้นระหว่างชิ้นส่วนสำคัญแต่ละชิ้น


1

ไม่มันใช้กับแอปพลิเคชันแบบสแตนด์อโลน ตัวอย่าง Java Swing ตามด้วย MVC


1
ทำไม downvote ให้บุคคลอยู่!
Deeptechtons

1

มีรูปแบบการออกแบบที่แตกต่างกันมากมายในบริเวณนี้

  • Model View Presenter (mvp)
  • Model View View Presenter (mvvp)
  • Model View Controller
  • รุ่น 2

และอื่น ๆ ในช่วงหลายปีที่ผ่านมาสิ่งเหล่านี้ได้ถูกหลอมรวมเข้าด้วยกันบดเปลี่ยนและนำไปใช้ในบริบทที่หลากหลาย สิ่งสำคัญเล็กน้อยที่นี่คือรูปแบบการออกแบบ MVC จากปี 1977 มีการเปลี่ยนแปลงค่อนข้างมากและไม่ได้เป็นรูปแบบการออกแบบที่ใช้โดยเฟรมเวิร์กเว็บของเซิร์ฟเวอร์อีกต่อไป เป็นตัวอย่างในการใช้งาน smalltalk ดั้งเดิม Model จะสังเกตเห็นมุมมองสำหรับการเปลี่ยนแปลงซึ่งไม่เป็นเช่นนี้เนื่องจากฝั่งเซิร์ฟเวอร์ไม่สามารถสังเกตองค์ประกอบ HTML ในเบราว์เซอร์ผู้ใช้ หากมุมมองเปลี่ยนไปมุมมองจะส่งคำขอไปยังตัวควบคุมซึ่งจะอัพเดตมุมมองแทน การใช้งาน MVC ดั้งเดิมไม่ได้ถูกติดตามอีกต่อไปเนื่องจากการอัปเดตโมเดลจะหมายความว่ามุมมองทั้งหมดที่ขึ้นอยู่กับโมเดลนั้นจะได้รับการอัปเดต

เฟรมเวิร์กเว็บที่ทันสมัยเป็นไปตามสถาปัตยกรรมแบบสามชั้นที่เรียบง่ายซึ่งรู้จักกันในชื่อ Model 2 Architecture

มีตัวอย่างแน่นอนของสถาปัตยกรรม MVC จริงบนเว็บ แต่สิ่งเหล่านี้มักเป็นฝั่งไคลเอ็นต์เท่านั้นเชื่อมต่อกับเซิร์ฟเวอร์ซึ่งตามสถาปัตยกรรม Model 2 เนื่องจากมุมมองเป็น xml และ json และไม่ได้สังเกตเห็นการเปลี่ยนแปลง ตัวอย่างของสถาปัตยกรรม mvc pure ฝั่งไคลเอ็นต์คือ Sencha Touch และ Sproutcore

หากคุณมี MVC ในเบราว์เซอร์เช่น mvc บนเซิร์ฟเวอร์และ mvc เช่นเดียวกับชั้นข้อมูลคุณจะมีการนำ mvc แบบลำดับชั้นมาใช้

บันทึก. ฉันได้พูดถึงกรอบเว็บเท่านั้นการใช้ MVC อื่น ๆ เช่น java swing และ Flex มีความแตกต่างของการใช้งานอื่น ๆ


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

คำถามสมมติว่า mvc และเว็บทำงานได้ดี togather และ pleads สำหรับเว็บที่ไม่ใช่ mvc ดังนั้นเมื่อคุณให้เพียงตัวอย่างของ mvc ในบริบทของเว็บ: -1
hildred

1

สิ่งหนึ่งที่คุณต้องรู้คือมีรสชาติของ MVC มากพอ ๆ กับกรอบที่อ้างว่าใช้ MVC

ส่วนใหญ่เห็นด้วยกับความจริงที่ว่าแบบจำลองมีบางรัฐและมุมมองทำให้มัน แต่ผู้ควบคุมมีหน้าที่แตกต่างกันมาก

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

ในหน้า. jsp โมเดลส่วนใหญ่เป็นข้อมูลมุมมองแสดงผลว่า Model เป็น HTML และคอนโทรลเลอร์ทำการกำหนดเส้นทางของโมเดลไปยังมุมมองที่เหมาะสมเพื่อแสดงผล

ดังนั้นเพื่อตอบคำถามของคุณในขณะที่ MVC ใช้ทั้งในแอปพลิเคชันแบบสแตนด์อโลน (Java, .Net, Flex) และเว็บ (หน้า jsp) มันแตกต่างกันมาก นั่นหมายความว่าไม่ได้ใช้ MVC ในแอปพลิเคชันแบบสแตนด์อโลน

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