บทช่วยสอน ASP.NET MVC สำหรับผู้เริ่มต้น: คืออะไร Archiเทคเจอร์

⚡ สรุปอย่างชาญฉลาด

ASP.NET MVC เป็นโอเพนซอร์ส Microsoft เฟรมเวิร์กที่แบ่งแอปพลิเคชันเว็บออกเป็นเลเยอร์ Model, View และ Controller ทำให้ผู้พัฒนาสามารถควบคุม HTML ได้อย่างเต็มที่ มีโค้ดที่ทดสอบได้ การกำหนดเส้นทางที่ชัดเจน และเป็นทางเลือกที่เบากว่า Web Forms แบบดั้งเดิม

  • 🏛️ Archiเทคเจอร์: โมเดลจะเก็บข้อมูลโดเมน ส่วนวิวจะแสดงผล UI ด้วย Razor และคอนโทรลเลอร์จะทำหน้าที่เป็นตัวกลางในการร้องขอข้อมูลระหว่างทั้งสองส่วน
  • เหตุผลที่เลือกใช้ MVC: มันช่วยแก้ไขปัญหา ViewState และภาระด้านประสิทธิภาพของ Web Forms และช่วยให้การกำหนดเส้นทางเป็นไปอย่างราบรื่น รวมถึงการพัฒนาแบบทดสอบนำ (Test Driven Development)
  • 🔀 สายงานการผลิต: ตามเส้นทาง URLs แมปคำขอขาเข้ากับแอ็กชันของคอนโทรลเลอร์ แทนที่การใช้ไฟล์ .aspx URLด้วยเส้นทางที่เป็นมิตรต่อ SEO
  • 🧪 ความสามารถในการทดสอบ: คอนโทรลเลอร์และโมเดลสามารถทดสอบแบบแยกส่วนได้ เนื่องจากวิวไม่มีตรรกะทางธุรกิจอยู่ภายใน
  • 🇧🇷 เปรียบเทียบแบบฟอร์มบนเว็บ: Web Forms ใช้การควบคุมฝั่งเซิร์ฟเวอร์ที่ขับเคลื่อนด้วยเหตุการณ์ ในขณะที่ MVC ใช้การดำเนินการที่ขับเคลื่อนด้วยคำขอพร้อมการจัดการสถานะด้วยตนเอง
  • 🛠️ ปฏิบัติที่ดีที่สุด: ควรเก็บตรรกะทางธุรกิจไว้ใน Model, Controller ควรมีขนาดเล็ก และใช้ Partial Views หรือ Layouts เพื่อนำโค้ด HTML กลับมาใช้ใหม่

บทช่วยสอน ASP.NET MVC

ASP.NET MVC คืออะไร

ASP.NET MVC เป็นกรอบการพัฒนาเว็บแบบโอเพ่นซอร์สจาก Microsoft ASP.NET MVC เป็นสถาปัตยกรรมแบบ Model-View-Controller (MView-Controller) ซึ่งเป็นทางเลือกแทน ASP.NET Web Forms สำหรับการสร้างเว็บแอปพลิเคชัน เป็นส่วนหนึ่งของแพลตฟอร์ม .NET สำหรับการสร้าง การติดตั้ง และการใช้งานเว็บแอป คุณสามารถพัฒนาเว็บแอปและเว็บไซต์ได้โดยใช้ HTML, CSS และ jQuery Javaสคริปต์ ฯลฯ

เรียนรู้ MVC ด้วยบทช่วยสอน ASP.NET MVC นี้ ซึ่งครอบคลุมแนวคิดพื้นฐานทั้งหมดของ MVC สำหรับผู้เริ่มต้น:

ทำไมต้องใช้ ASP.NET MVC?

แม้ว่าเว็บฟอร์มจะประสบความสำเร็จอย่างมาก Microsoft คิดเกี่ยวกับการพัฒนาping ASP.NET MVC ปัญหาหลักของ ASP.NET webForms คือประสิทธิภาพการทำงาน

ใน โปรแกรมประยุกต์บนเว็บมีสี่ประเด็นหลักที่กำหนดประสิทธิภาพ:-

  • ปัญหาเวลาตอบสนอง
  • ปัญหาการทดสอบหน่วย
  • การปรับแต่ง HTML
  • การนำคลาสโค้ดหลังกลับมาใช้ใหม่ได้

ASP.NET MVC โดดเด่นในด้านต่างๆ ดังกล่าวข้างต้น

ประวัติเวอร์ชันของ MVC

ASP.NET MVC1

  • เผยแพร่เมื่อวันที่ 13 มีนาคม 2009
  • โปรแกรมนี้ทำงานบน .NET 3.5
  • Visual Studio 2008
  • สถาปัตยกรรมรูปแบบ MVC พร้อมด้วย WebForm Engine
  • คุณสมบัติหลัก ได้แก่ Html & การทดสอบหน่วย, Ajax Helpers, การกำหนดเส้นทาง ฯลฯ

ASP.NET MVC2

  • เวอร์ชันนี้เผยแพร่เมื่อวันที่ 10 มีนาคม 2010
  • ใช้งานได้บน .NET 3.5, 4.0 และเวอร์ชันอื่นๆ Microsoft Visual Studio 2008
  • รวมถึงฟีเจอร์ต่างๆ เช่น ตัวช่วยสร้างเทมเพลต ตัวช่วยสร้าง UI พร้อมการสร้างโครงร่างอัตโนมัติ และเทมเพลตที่ปรับแต่งได้
  • รองรับ DataAnnotations Attributes เพื่อใช้การตรวจสอบโมเดลกับฝั่งไคลเอ็นต์และเซิร์ฟเวอร์

ASP.NET MVC3

  • เปิดตัวเมื่อ 13 มกราคม 2011
  • ทำงานบน .NET 4.0 และด้วย Microsoft Visual Studio 2010
  • การใช้เอ็นuGet เพื่อส่งมอบซอฟต์แวร์และช่วยให้คุณจัดการการพึ่งพาทั่วทั้งแพลตฟอร์ม
  • ดีกว่า Javaรองรับสคริปต์ด้วยการตรวจสอบความถูกต้องของ jQuery และการผูกข้อมูล JSON
  • มันมีคุณสมบัติเด่นๆ เช่น เอ็นจิ้นการแสดงผล Razor และแอตทริบิวต์ Data Annotations ที่ได้รับการปรับปรุงสำหรับการตรวจสอบความถูกต้องของโมเดลทั้งฝั่งไคลเอ็นต์และฝั่งเซิร์ฟเวอร์

ASP.NET MVC4

  • เวอร์ชันนี้เผยแพร่เมื่อเดือนสิงหาคม 2012
  • ทำงานบน .NET 4.0, 4.5 และ Visual Studio 2010 และ Visual Studio 2012
  • การปรับปรุงเทมเพลตโครงการเริ่มต้น
  • นำเสนอฟีเจอร์ต่างๆ เช่น เทมเพลตโปรเจ็กต์มือถือที่ใช้ jQuery Mobile, การสนับสนุนงานสำหรับ Asynchronous Controllers การรวมกลุ่ม การย่อขนาด ฯลฯ

ASP.NET MVC5

  • เผยแพร่เมื่อวันที่ 17 ตุลาคม พ.ศ. 2013
  • ใช้งานได้กับ .NET 4.5, 4.5.1 และ Visual Studio 2012 และ Visual Studio 2013
  • รองรับการกำหนดเส้นทางแอตทริบิวต์ใน MVC

คุณสมบัติของ MVC

  • ทดสอบได้ง่ายและไม่เสียดสี
  • ควบคุม HTML ของคุณได้อย่างสมบูรณ์ Javaสคริปต์และ URLs
  • ใช้ประโยชน์ที่มีอยู่ ASP.NET คุณสมบัติ
  • ตัวเลือกการนำเสนอใหม่สำหรับ ASP.NET
  • วิธีที่ง่ายกว่าในการเขียนโปรแกรม ASP.NET
  • การแยกตรรกะอย่างชัดเจน: โมเดล มุมมอง ตัวควบคุม
  • การพัฒนาที่ขับเคลื่อนด้วยการทดสอบ
  • รองรับการพัฒนาแบบคู่ขนาน

สิ่งที่ควรจำขณะสร้าง MVC Application

ต่อไปนี้คือสิ่งที่มีประโยชน์บางประการในบทช่วยสอน ASP.NET MVC นี้ซึ่งคุณต้องจำไว้สำหรับการสร้างแอปพลิเคชัน MVC:

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

รูปแบบสถาปัตยกรรม MVC

รูปแบบสถาปัตยกรรม MVC

MVC เป็นรูปแบบสถาปัตยกรรมซอฟต์แวร์ที่ยึดหลักการแบ่งแยกความรับผิดชอบ ในโมเดลนี้ แอปพลิเคชัน .NET จะถูกแบ่งออกเป็นสามส่วนที่เชื่อมต่อกัน ซึ่งเรียกว่า โมเดล (Model), วิว (View) และ คอนโทรลเลอร์ (Controller)

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

เรามาดูรายละเอียดทั้งหมดกันเลย:

Models

อ็อบเจ็กต์โมเดลเป็นส่วนหนึ่งของแอปพลิเคชันที่ใช้ตรรกะสำหรับแอปพลิเคชัน โดเมนข้อมูล- มันดึงและจัดเก็บสถานะของแบบจำลองในฐานข้อมูล ตัวอย่างเช่น product object อาจดึงข้อมูลจาก ฐานข้อมูลดำเนินการตามนั้น จากนั้นเขียนข้อมูลกลับไปยังตารางผลิตภัณฑ์ใน SQL Server

เข้าชม

View คือส่วนประกอบที่ใช้แสดงส่วนติดต่อผู้ใช้ (UI) ของแอปพลิเคชัน ซึ่งใน MVC เรียกว่า ViewModel โดยจะแสดงส่วนติดต่อผู้ใช้ของแอปพลิเคชัน .NET MVC ที่สร้างขึ้นจากข้อมูล Model

ตัวอย่างทั่วไปคือมุมมองแก้ไขของตารางรายการ ซึ่งจะแสดงกล่องข้อความ ป๊อปอัป และกล่องกาเครื่องหมายตามสถานะปัจจุบันของผลิตภัณฑ์และอ็อบเจ็กต์

ตัวควบคุม

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

ตัวอย่างเช่น คอนโทรลเลอร์จะจัดการค่าสตริงการสืบค้นและส่งค่าเหล่านั้นไปยังโมเดล

เว็บฟอร์มกับ MVC

พารามิเตอร์ เว็บฟอร์ม VMC
รุ่น ASP.NET Web Forms ใช้โมเดลการพัฒนาแบบขับเคลื่อนด้วยเหตุการณ์ (event-driven development) ASP.NET MVC ใช้โมเดลการพัฒนาแบบ MVC (Multiple Computing Pattern)
ใช้ตั้งแต่ มีมาตั้งแต่ปี 2002 เปิดตัวครั้งแรกในปี 2009
รองรับสถานะการดู ASP.NET Web Form รองรับ View State สำหรับการจัดการสถานะฝั่งไคลเอ็นต์ .NET MVC ไม่รองรับ View State
URL ชนิด ASP.NET Web Form ใช้ไฟล์เป็นฐานข้อมูล URLหมายความว่าชื่อไฟล์นั้นมีอยู่ในนั้น URLและสิ่งเหล่านั้นต้องมีอยู่จริงในทางกายภาพ ASP.NET MVC มีการกำหนดเส้นทาง (route-based) URLนั่นหมายความว่า URLซึ่งจะถูกส่งต่อไปยังตัวควบคุมและแอ็กชัน
วากยสัมพันธ์ ASP.NET Web Forms ใช้ไวยากรณ์ของ Web Forms ASP.NET MVC ใช้ไวยากรณ์ที่สามารถปรับแต่งได้
ประเภทการดู แบบฟอร์มบนเว็บ มุมมองต่างๆ มีความเชื่อมโยงกันอย่างแน่นหนา Code เบื้องหลัง (ASPX-CS) คือตรรกะ MVC, มุมมอง และตรรกะจะถูกเก็บไว้แยกกันเสมอ
รูปลักษณ์และสัมผัสที่สอดคล้องกัน มีหน้าหลักเพื่อให้ดูสอดคล้องกัน ASP.NET MVC มีเลย์เอาต์เพื่อให้รูปลักษณ์สม่ำเสมอ
Code ความสามารถในเรอุส เว็บฟอร์มเสนอการควบคุมผู้ใช้สำหรับการนำโค้ดกลับมาใช้ใหม่ ASP.NET MVC นำเสนอ Partial View เพื่อให้สามารถนำโค้ดกลับมาใช้ซ้ำได้
การควบคุมสำหรับ HTML Less ควบคุม HTML ที่แสดงผล ควบคุม HTML เต็มรูปแบบ
การจัดการของรัฐ การจัดการสถานะการควบคุมอัตโนมัติ การจัดการสถานะด้วยตนเอง
รองรับ TDD จำเป็นต้องมี TDD ที่อ่อนแอหรือกำหนดเอง สนับสนุนและส่งเสริมการใช้ TDD (Test-Driven Development)

ข้อดีของ ASP.NET MVC

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

ข้อเสียของ ASP.NET MVC

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

แนวทางปฏิบัติที่ดีที่สุดในการใช้งาน ASP.NET MVC

  • ในกรณีที่โค้ดมีขนาดใหญ่และซับซ้อน ให้สร้างแอสเซมบลีแยกต่างหากสำหรับ MODEL เพื่อหลีกเลี่ยงสถานการณ์ที่ไม่พึงประสงค์ใดๆ
  • โมเดลควรรวมตรรกะทางธุรกิจ การบำรุงรักษาเซสชัน ส่วนการตรวจสอบ และส่วนตรรกะข้อมูล
  • VIEW ไม่ควรมีตรรกะทางธุรกิจและการบำรุงรักษาเซสชัน ใช้ ViewData เพื่อเข้าถึงข้อมูลใน View
  • ตรรกะทางธุรกิจและการเข้าถึงข้อมูลไม่ควรเกิดขึ้นใน Controller เลย
  • คอนโทรลเลอร์ควรรับผิดชอบเฉพาะในการเตรียมและส่งคืนมุมมอง การเรียกโมเดล การเปลี่ยนเส้นทางไปยังการดำเนินการ ฯลฯ
  • ลบโค้ดสาธิตออกจากแอปพลิเคชันเมื่อคุณสร้างแอปพลิเคชัน (ลบ AccountController)
  • ใช้เฉพาะเอ็นจิ้นการดูเฉพาะเพื่อสร้างมาร์กอัป HTML จากมุมมองของคุณ เนื่องจากเป็นการผสมผสานระหว่าง HTML และโค้ดโปรแกรม

คำถามที่พบบ่อย

ใช่แล้ว GitHub Copilot สามารถสร้างคลาส Controller ที่มีเมธอดแอ็กชัน แอตทริบิวต์เส้นทาง และ Razor Views ที่ตรงกันได้ Revตรวจสอบโค้ดที่สร้างขึ้นเพื่อให้แน่ใจว่ามีการผูกโมเดลและการอนุญาตที่ถูกต้องก่อนที่จะเพิ่มลงในโปรเจ็กต์

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

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

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

Razor คือไวยากรณ์ขนาดกะทัดรัดสำหรับการฝังโค้ด C# หรือ VB.NET ลงในไฟล์ .cshtml หรือ .vbhtml โดยใช้ @ ในการสลับจาก HTML ไปเป็นโค้ด ช่วยให้เทมเพลตอ่านง่าย และคอมไพล์เป็นคลาสที่มีการกำหนดประเภทอย่างชัดเจนและรวดเร็วในขณะรันไทม์

ASP.NET MVC แบบคลาสสิกทำงานบน .NET Framework เวอร์ชันเต็ม และ Windows ASP.NET Core MVC ทำงานบน .NET Core เท่านั้น Windows, ลินุกซ์ และ macOSใช้โมเดลคอนโทรลเลอร์แบบรวมศูนย์ร่วมกับ Web API และมีระบบฉีดการพึ่งพา (dependency injection) ในตัว

ใช้ ASP.NET Identity หรือผู้ให้บริการภายนอก เช่น Azure ใช้ AD สำหรับการเข้าสู่ระบบ ตกแต่งคอนโทรลเลอร์หรือแอ็กชันด้วยแอตทริบิวต์ [Authorize] เพื่อจำกัดการเข้าถึง และใช้พารามิเตอร์บทบาทหรือนโยบายสำหรับกฎที่ละเอียดกว่า

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

สรุปโพสต์นี้ด้วย: