อธิบาย Model View Controller


13

ประสบการณ์ของฉันกับการพัฒนาเว็บไซต์แบบไดนามิกนั้น จำกัด อยู่ที่ servlets Java เป็นส่วนใหญ่ ฉันใช้ Tomcat เพื่อพัฒนา Java servlets ต่างๆและฉันไม่ลังเลที่จะพูดว่าฉันมีความเชี่ยวชาญในเทคโนโลยีนี้พอ ๆ กับ HTML / CSS / Javascript ฝั่งไคลเอ็นต์สำหรับส่วนหน้า

เมื่อฉันคิดว่า "เว็บไซต์ไดนามิก" ฉันคิดว่า: ผู้ใช้ร้องขอ URL ด้วยสตริงข้อความค้นหาเซิร์ฟเวอร์ได้รับข้อความค้นหาแล้วดำเนินการกับ HTML แบบไดนามิกเพื่อตอบแบบสอบถาม ซึ่งมักเกี่ยวข้องกับการสื่อสารกับฐานข้อมูลเพื่อดึงข้อมูลที่ร้องขอเพื่อแสดงผล นี้นั้นเป็นความคิดที่อยู่เบื้องหลังdoGetวิธีการของ HttpServletJava

แต่ทุกวันนี้ฉันได้ยินเกี่ยวกับกรอบใหม่ ๆ มากขึ้นเช่น Django และ Ruby on Rails ซึ่งทั้งหมดนี้ใช้ประโยชน์จากสถาปัตยกรรม "Model View Controller" ฉันอ่านบทความต่าง ๆ ที่อธิบาย MVC แล้ว แต่ฉันมีปัญหาในการเข้าใจถึงประโยชน์ ฉันเข้าใจว่าแนวคิดทั่วไปคือการแยกตรรกะทางธุรกิจออกจากตรรกะ UI แต่ฉันไม่เห็นว่าสิ่งนี้แตกต่างจากการเขียนโปรแกรมเว็บปกติอย่างไร การเขียนโปรแกรมบนเว็บนั้นเป็นเรื่องปกติบังคับให้คุณแยกตรรกะทางธุรกิจ (การเขียนโปรแกรมฝั่งเซิร์ฟเวอร์ด้านหลัง) ออกจากการเขียนโปรแกรม UI (HTML ฝั่งไคลเอ็นต์หรือ Javascript) เนื่องจากทั้งสองมีอยู่ในขอบเขตการเขียนโปรแกรมที่แตกต่างกันโดยสิ้นเชิง

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

คำตอบ:


7

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

สถาปัตยกรรม MVC เป็นวิธีการจัดระเบียบเวิร์กโฟลว์ภายในระบบ sotfware ให้คิดว่าเป็นวิธีการทำงานของระบบ เลเยอร์นี้คือ:

  1. Model : แสดงให้เห็นถึง Data Model ของคุณซึ่งเป็นแกนกลางของระบบซึ่งข้อมูลทั้งหมดที่เกี่ยวข้องกับมันควรจะถูกแปลเป็นภาษาท้องถิ่น ตัวอย่างเช่น: หากคุณจะออกแบบเกมคุณจะต้องมีผู้เล่นกฎกติกาและตรรกะบางอย่างที่เกี่ยวข้องกับการโต้ตอบขององค์ประกอบนี้เช่น: ผู้เล่นควรเรียงลำดับอุปสรรคเมื่อมีกฏบางชุดที่ใช้

    รุ่นเป็นครั้งแรกคิดว่าคุณควรจะคิดออกเพราะมันจะเป็นศูนย์กลางของการใช้งานของคุณ

  2. ผู้ควบคุม : นี่คือสิ่งที่เวทมนตร์เกิดขึ้นและที่ Layered Architecture เป็นไปตาม Object Oriented Paradigm ที่ตั้งใจจะใช้ ที่นี่คุณจะใช้วิธีการที่ระบบตอบสนองเมื่อผู้ใช้แอปพลิเคชันบางคนร้องขออะไรบางอย่างเกี่ยวกับแอป vai ที่ส่วนติดต่อผู้ใช้

    คอนโทรลเลอร์ควรสามารถจัดการ Model Objects ดำเนินการกับพวกเขาเพื่อให้บรรลุสิ่งที่ผู้ใช้ร้องขอและมอบหมายผลลัพธ์ให้กับ View Layer ที่เกี่ยวข้องเพื่อแสดงผลกลับไปยังผู้ใช้ของเรา

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

    โดยทั่วไปแล้วผู้เชี่ยวชาญด้านเทคโนโลยีแต่ละคนต้องการภาษาที่แตกต่างกันในการสร้างมุมมองดังนั้นลองจินตนาการว่ารูปแบบข้อมูลของคุณและวิธีการที่รูปแบบการโต้ตอบและวิธีที่คุณแสดงให้เห็นว่าการโต้ตอบนั้นเป็นฮาร์ดโค้ดทั้งหมดไม่มีวิธีใด . ผลลัพธ์คือโค้ดที่มีกลิ่นและเสียเวลามากมายในการปรับ HOLE sysmte

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

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

กลับไปที่คำถามแรกที่คุณถาม: เหมือนกับที่คุณเห็น (ฉันหวังว่า) MVC เป็นวิธีที่จะทำสิ่งต่างๆไม่ใช่ TECHNOLOGIE ในการสร้างซอฟต์แวร์ คุณสามารถใช้ Java Servlets ของคุณและใช้ MVC A Architecture ได้

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


6

เพื่อตอบคำถามของคุณ

What does MVC offer over something like a Java servlet

MVC เป็นรูปแบบไม่ใช่เทคโนโลยี ดังนั้นรูปแบบสามารถนำไปใช้เมื่อคุณเขียนโปรแกรมด้วย Servlets ด้วย

ให้ฉันพยายามอธิบายรูปแบบ MVC ด้วย Servlets เอง ดังนั้นสิ่งที่คุณพยายามทำเมื่อพูดถึงการใช้ MVC คือแยกโมเดล (ตรรกะทางธุรกิจ), มุมมอง (ตรรกะการนำเสนอ) และคอนโทรลเลอร์ (คอนโทรลเลอร์ Servlet ซึ่งมอบหมายการควบคุมให้กับตรรกะทางธุรกิจที่เหมาะสม)

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

เฟรมเวิร์กหลักใน Java อย่าง Struts ทำตามรูปแบบนี้ ฉันคิดว่าคุณเข้าใจผิด คุณสามารถอ่านเพิ่มเติมเกี่ยวกับเรื่องนี้ได้ในอินเทอร์เน็ต


2

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

  • รุ่น : ข้อมูลของคุณ (ไม่ใช่ฐานข้อมูลของคุณโดยเฉพาะ! โมเดลอาจเป็นไฟล์ ini หรือ xml หรือข้อมูลจากบริการบนเว็บ) คลาสของแบบจำลองมีจุดประสงค์ในการกำหนดประกอบและจัดการข้อมูล อ่านบทความที่ยอดเยี่ยมที่เรียกว่า " The M in MVC: ทำไมแบบจำลองมีความเข้าใจผิดและไม่ได้รับการยอมรับ " ควรเข้าถึงตัวควบคุมรุ่นเท่านั้น
  • มุมมอง : รหัส GUI (การนำเสนอ) ของคุณ ควรเข้าถึงตัวควบคุมเท่านั้น
  • ตัวควบคุม : ตรรกะของคุณ จัดการการสื่อสารระหว่างรุ่นและมุมมอง

1

แนวคิดModel-View-Controllerนั้นไม่มีอะไรใหม่ เริ่มต้นด้วย Smalltalk ราวปี 1979

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

การแยกช่วยให้คุณมีอิสระดังต่อไปนี้:

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

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

เมื่อไม่นานมานี้ Ruby on Rails เข้าหา MVC ได้แนะนำแนวคิดใหม่ ๆ ที่ถูกคัดลอกในกรอบเว็บแอปพลิเคชันสไตล์ MVC เกือบทั้งหมด ซึ่งรวมถึงแนวคิดของ "Convention over configuration", การดำเนินการควบคุมการแมปไปยังวิธีการเรียนและคำขอเส้นทาง URL ไปยังรหัสอ้างอิง

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