อธิบายวงจรชีวิตของเพจ MVC ในภาษาที่เรียบง่าย

เผยแพร่แล้ว: 2021-11-26

บทความนี้จะเน้นที่วงจรชีวิตของแอปพลิเคชัน MVC และวิธีที่แอปพลิเคชันประมวลผลคำขอผ่านการผ่านส่วนประกอบของแอปพลิเคชัน มีวงจรชีวิตสองวงจรใน วงจร ชีวิต MVC วงจรชีวิตสองอย่างนี้คือ:

  • วงจรชีวิตของแอพพลิเคชั่น
  • วงจรชีวิตของคำขอ

สารบัญ

วงจรชีวิตของแอพพลิเคชั่น

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

วงจรชีวิตคำขอ

วงจรชีวิตของคำขอหมายถึงชุดของเหตุการณ์ที่เกิดขึ้นเมื่อใดก็ตามที่แอปพลิเคชันจัดการคำขอ HTTP การกำหนดเส้นทางเป็นจุดเริ่มต้นสำหรับการเริ่มต้นแอปพลิเคชันใดๆ ของ MVC เมื่อมีการร้องขอไปยังแพลตฟอร์ม ASP.NET การตัดสินใจจะดำเนินการกับคำขอผ่านโมดูลการกำหนดเส้นทาง คำว่าโมดูลหมายถึงส่วนประกอบของ .NET ซึ่งใช้สำหรับเพิ่มฟังก์ชันการทำงานลงในโค้ด เป็นความรับผิดชอบของโมดูลการกำหนดเส้นทางเพื่อให้ตรงกับ URL ที่เข้ามายังเส้นทางที่เกี่ยวข้องที่กำหนดไว้ในแอปพลิเคชัน ตัวจัดการเส้นทางเชื่อมโยงกับทุกเส้นทาง ซึ่งทำเครื่องหมายจุดเข้าสู่เฟรมเวิร์กของ MVC

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

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

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

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

UrlRoutingModule

นี่คือประเภทของโมดูล HTTP เมื่อใดก็ตามที่มีการร้องขอครั้งแรก จะมีการสกัดกั้นผ่าน UrlRoutingModule ในโมดูลนี้ กำลังตัดสินใจว่าแอปพลิเคชัน MVC ควรจัดการคำขอหรือไม่ UrlRoutingModule เลือกเส้นทางแรกที่ตรงกัน

คำขอตรงกับเส้นทางเหล่านั้นในแอปพลิเคชัน MVC ผ่าน UrlRoutingModule อย่างไร

เมื่อดูวิธีการของ RegisterRoutes ซึ่งเรียกจาก global.asax จะเห็นเส้นทางที่เพิ่มไปยัง RouteCollection ของเส้นทาง การเรียกเมธอดทำได้จากตัวจัดการเหตุการณ์ที่ application_start ของ global.asax

แหล่งที่มา

เส้นทางใน RouteHandler ถูกกำหนดอย่างไร?

เส้นทางถูกกำหนดเป็นวิธีการขยาย ดังที่เห็นได้ในวิธีการของแผนที่ ตัวจัดการเส้นทางเชื่อมโยงกับเส้นทางทั้งหมด

วิธีการของ UrlRoutingModule ถูกกำหนดด้วยวิธีต่อไปนี้

แหล่งที่มา

จากคำอธิบายข้างต้น ทำให้ทราบได้ว่า UrlRoutingModule รู้เส้นทางทั้งหมดที่กำหนดไว้ในแอปพลิเคชัน จึงสามารถจับคู่เส้นทางที่ถูกต้องกับคำขอในใบสมัครได้

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

ตัวจัดการเส้นทาง

ผ่านเมธอดของ maproute เส้นทางจะเชื่อมต่อกับอินสแตนซ์ของ MvcRouteHandler อินเทอร์เฟซ IRouteHandler ถูกใช้งานผ่าน MvcRouteHandler

ดังนั้นอ็อบเจ็กต์ของ MvcRouteHandler จึงถูกใช้เพื่อรับข้อมูลอ้างอิงสำหรับสิ่งของของ MvcRouteHandler ที่เป็น HTTPHandler ของแอปพลิเคชัน

การสร้าง MvcRouteHandler ต้องการการเรียกเมธอด PostResolveRequestCache() วิธีการนี้ PostResolveRequestCache() สามารถกำหนดได้ด้วยวิธีต่อไปนี้:

แหล่งที่มา

ดังนั้น เหตุการณ์ต่อไปนี้จึงเกิดขึ้นที่เมธอด PostResolveRequestCache()

  • มีเมธอด GetRouteData() ในคุณสมบัติ RouteCollection เมธอดนี้ถูกเรียกและส่งผ่าน HttpContext
  • วัตถุ RouteData ถูกส่งกลับโดยใช้วิธีการของ GetRouteData()
  • คุณสมบัติ RouteHandler มีอยู่ใน routeData ที่ส่งคืนตัวจัดการ IRouteHandler สำหรับคำขอ ซึ่งเป็นปัจจุบัน กล่าวคือ MvcRouteHandler
  • เมธอด G etHttpHandler() เชื่อมโยงกับ MvcRouteHandler ที่ส่งคืนการอ้างอิงสำหรับ MvcHandler
  • จากนั้นการควบคุมจะมอบหมายให้กับอินสแตนซ์ของ MvcHandler

MvcHandler

MvcHandler เป็นตัวจัดการปกติของ HTTP เนื่องจากเป็นตัวจัดการ HTTP การดำเนินการตามวิธีการ ProcessRequest() จึงถูกดำเนินการ วิธีการนี้ ProcessRequest() สามารถกำหนดเป็น:

แหล่งที่มา

เมธอด ProcessRequest() ใช้สำหรับเรียกเมธอด ProcessRequestInit() ตามที่กำหนดไว้ในภาพด้านล่าง:

แหล่งที่มา
เหตุการณ์ต่อไปนี้เกิดขึ้นที่เมธอด ProcessRequest()

  • ControllerFactory ถูกสร้างขึ้นผ่านการเรียกใช้เมธอด ProcessRequestInit()
  • ControllerFactory สร้างคอนโทรลเลอร์
  • เรียกใช้เมธอด Execute() ของคอนโทรลเลอร์

ControllerFactory

สามารถสังเกตได้ว่า ControllerFactory ได้รับผ่านเมธอด ProcessRequest() ControllerFactory จะใช้เพื่อสร้างวัตถุของวัตถุ Controller อินเทอร์เฟซ IControllerFactory ถูกใช้งานโดยโรงงานคอนโทรลเลอร์

ตามค่าเริ่มต้น กรอบงาน MVC จะสร้างประเภท DefaultControllerFactory เมื่อ ControllerBuilder ใช้สำหรับสร้าง ControllerFactory

รหัสบรรทัดต่อไปนี้จะสร้าง ControllerFactory ในเมธอด ProcessRequestInit()

แหล่งที่มา

คอนโทรลเลอร์

มีการสังเกตว่าอ็อบเจ็กต์ Controller ถูกสร้างขึ้นใน ControllerFactory ในเมธอด ProcessRequest() ของ MvcHandler ตัวควบคุมที่สร้างขึ้นมีวิธีการสำหรับการดำเนินการที่เฟรมเวิร์กจะต้องดำเนินการ เมื่อใดก็ตามที่มีการร้องขอ URL ในเบราว์เซอร์ มีการเรียกใช้เมธอดสำหรับการดำเนินการ ตัวควบคุมถูกสร้างขึ้นเพื่อไม่ให้มีการใช้งานอินเทอร์เฟซของ IControlle อย่างชัดเจน คลาส Controller ใช้สำหรับสร้างคอนโทรลเลอร์ ที่มีคุณสมบัติหลายอย่าง คลาสของคอนโทรลเลอร์สามารถสืบทอดคลาสของคอนโทรลเลอร์อื่นที่เรียกว่า "ControllerBase" ตามที่กำหนดไว้ในโค้ดที่แสดงด้านล่าง:

แหล่งที่มา

ActionInvoker ใช้เพื่อเรียกวิธีการของการกระทำในตัวควบคุม

เหตุการณ์ต่อไปนี้เกิดขึ้นหลังจากการสร้างคอนโทรลเลอร์ผ่านโรงงานคอนโทรลเลอร์:

  • การเรียกเมธอด Execute() ของ controllerbase
  • เมธอด ExecuteCore() ถูกเรียกโดยเมธอด Execute() ที่ถูกประกาศเป็นนามธรรม และถูกกำหนดผ่านคลาส Controller
  • ชื่อการดำเนินการถูกดึงมาจาก RouteData ผ่านเมธอด ExecuteCore() โดยคลาส Controller
  • InvokeAction() ของ ActionInvoker ถูกเรียกโดยวิธี ExecuteCore()

ActionInvoker

ใช้สำหรับเลือกการกระทำ

คลาส ActionInvoker มีความรับผิดชอบที่สำคัญบางอย่างซึ่งรวมถึงการค้นหาวิธีดำเนินการแล้วเรียกใช้วิธีการดำเนินการในคอนโทรลเลอร์

เหตุการณ์ที่เกิดขึ้นเมื่อเรียกวิธีการ InvokeAction() ของ ActionInvoker คือ:

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

ผลการดำเนินการ

ActionResult เป็นประเภทของคลาสนามธรรม ด้วยวิธีการที่เป็นนามธรรม มีการใช้งานที่แตกต่างกันสำหรับเมธอด ExecuteResult() ที่จัดเตรียมโดยคลาสย่อยต่างๆ

เหตุการณ์ต่อไปนี้เกิดขึ้นใน ActionResult

  • มีการเรียกใช้เมธอดของ OnActionExecuting ของ ActionFilters
  • การเรียกใช้เมธอด
  • การเรียกใช้เมธอด OnActionExecuted ของ ActionFilters
  • มีการส่งคืน ActionResult จาก ActionMethod
  • การเรียกเมธอด ExecuteResult() ของ ActionResult

ViewEngine

แอปพลิเคชันส่วนใหญ่ใช้ ViewResult เป็นประเภทส่งคืน มุมมองแสดงผลผ่าน ViewEngine ไปยังไคลเอ็นต์ จากมุมมองนี้ สามารถสร้าง HTML ได้ HTML ถูกสร้างขึ้นจากมุมมองผ่าน ViewEngine

บทสรุป

การทำความเข้าใจบทบาทของทุกองค์ประกอบในแอปพลิเคชันเป็นขั้นตอนที่สำคัญ วิธีนี้จะทำให้เข้าใจความเชื่อมโยงระหว่างส่วนประกอบและวิธีการทำงาน หากคุณต้องการเป็นนักพัฒนาที่มีประสบการณ์ การเรียนรู้ทักษะของคุณเป็นวิธีหนึ่ง คุณสามารถดู หลักสูตรวิศวกรรมซอฟต์แวร์ออนไลน์ ของ upGrad ซึ่งจะให้การรับรองและการฝึกอบรมผู้เชี่ยวชาญในด้านการพัฒนาแอปพลิเคชันและซอฟต์แวร์ หลักสูตรนี้ออกแบบมาสำหรับมืออาชีพทั้งชายและหญิงและได้รับการรับรองจาก IIIT-B และคุณจะได้รับสถานะศิษย์เก่า

คุณช่วยอธิบายวงจรชีวิตของหน้า MVC ได้ไหม

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

เราจะรักษาเซสชันใน MVC ได้อย่างไร

กรอบงาน ASP.NET MVC ใช้พลังของสถานะเซสชัน ASP.NET สถานะเซสชันคือบริการเว็บที่สร้างขึ้นในแพลตฟอร์ม ASP.NET มีหน้าที่รับผิดชอบในการรักษาออบเจ็กต์ ข้อมูล และข้อมูลอื่น ๆ ทั้งหมดที่เกี่ยวข้องกับเซสชันที่กำหนด วัตถุ SessionState รักษาค่าของสถานะเซสชัน นอกจากนี้ยังรับผิดชอบในการเติมและรักษาค่าของวัตถุเซสชัน วัตถุเซสชันทำหน้าที่เป็นเกตเวย์ไปยังสถานะเซสชัน เป็นคุณสมบัติของวัตถุ SessionState และเป็นสิ่งที่ใช้ในการจัดเก็บและดึงค่าสำหรับสถานะเซสชัน

MVC มีตัวกรองกี่ประเภท

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