ความแตกต่างระหว่างสถาปัตยกรรม 3-Tier และ MVC (Model, View Controller) ใน ASP.Net


9

ฉันชอบที่จะรู้ว่าสถาปัตยกรรม 3 ชั้นแตกต่างจาก MVC (Model, View Controller) ใน ASP.Net อย่างไรเนื่องจากดูเหมือนว่าฉันจะใช้สถาปัตยกรรมเดียวกัน

ใน 3 ชั้นเรามีUser Services Layer, BusinessLayerและDataAccessLayerในมืออื่น ๆ ที่เรามีModel, และView Controllerดูเหมือนสถาปัตยกรรมแบบเดียวกันกับฉัน

มีใครอธิบายได้บ้างว่าสถาปัตยกรรมทั้งสองแตกต่างกันอย่างไรแต่ละชั้นแตกต่างกันอย่างไร



2
MVC สามารถมองเห็นได้มากขึ้นเป็นสถาปัตยกรรม UI ตัวอย่างอื่น ๆ เช่น Angular เมื่อคุณใช้งานสถาปัตยกรรม 3 ชั้นในโครงการ ASP.net MVC มันจะแบ่งโมเดล (M) ใน MVC ออกเป็น 3 ชั้น
devfric


@ เร็วที่ฉันเห็นฉันไม่เคยเห็นคนเก่ามาก่อน .. แต่ดูเหมือนว่าคนที่คุณพูดแล้วสิ่งเดียวที่เป็นคำตอบสำหรับคนเก่านั้นไม่ได้อธิบายได้ดีคุณคิดอย่างไร? :)
japzdivino

คำตอบ:


18

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

สถาปัตยกรรม MVC

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

  • Views:ส่วนต่อประสานผู้ใช้ สิ่งที่ผู้ใช้โต้ตอบด้วย

  • ตัวควบคุม:รหัสการเขียนโปรแกรมที่ตอบสนองต่อผู้ใช้และการเปลี่ยนแปลงในชั้นรูปแบบ

สถาปัตยกรรม 3 ชั้น

ด้วยสถาปัตยกรรม 3 ชั้นคุณมีเลเยอร์ที่มีความรับผิดชอบแตกต่างกัน

  • บริการผู้ใช้: (หรือ "บริการ" โดยทั่วไป) เลเยอร์นี้เป็นข้อมูลเพิ่มเติมเกี่ยวกับการประสานงานการดึงข้อมูลและการปรับเปลี่ยนเลเยอร์ "โมเดล" การดำเนินการที่ซับซ้อนและหลายขั้นตอนดำเนินการที่นี่

  • ชั้นธุรกิจ:สิ่งนี้แสดงให้เห็นถึงกฎเกณฑ์ทางธุรกิจที่ฝังอยู่ในรหัสการเขียนโปรแกรม สิ่งที่ต้องการ "ธุรกิจ" ถูกบังคับใช้ในเลเยอร์นี้

  • Data Access Layer:หนึ่งคลาสขึ้นไปที่รับผิดชอบการเข้าถึงที่เก็บข้อมูลถาวร

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

"M" ใน MVC มีอากาศเลือน

เลเยอร์ "รุ่น" ใน MVC ได้ขยายตัวในปีที่ผ่านมา จากสิ่งที่ฉันเห็นมีสองแบบสามแบบ:

  1. รูปแบบโดเมน: สิ่งเหล่านี้แสดงถึง "สิ่งต่าง ๆ " ที่ "ธุรกิจ" ใส่ใจ - โดเมนธุรกิจ คลาสเหล่านี้เก็บข้อมูลและโพรซีเดอร์ทั้งหมดที่ทำงานกับข้อมูลนั้นเพื่อบังคับใช้กฎเกณฑ์ทางธุรกิจ โมเดลโดเมนที่เชื่อมโยงกับตารางในฐานข้อมูลบ่อยครั้ง สิ่งนี้น่าจะเหมาะกับ "ชั้นธุรกิจ" ของสถาปัตยกรรม 3 ชั้น

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

  3. รูปแบบธุรกิจ:ในแอปพลิเคชันที่ซับซ้อนความจำเป็นในการแยกรูปแบบโดเมนจากตรรกะทางธุรกิจเกิดขึ้น รูปแบบธุรกิจประกอบด้วยข้อมูลและขั้นตอนการดำเนินการกับข้อมูลนั้นเพื่อใช้กฎทางธุรกิจและรูปแบบโดเมนจะถูกลดชั้นลงไปที่ "ถุงทรัพย์สิน" - วัตถุที่เพิ่งเก็บข้อมูล แต่ไม่มีพฤติกรรม รูปแบบโดเมนกลายเป็นรูปแบบอื่นของ Data Transfer Object ระหว่างฐานข้อมูลและแอปพลิเคชัน

ไม่มีที่ไหนใน MVC ที่กล่าวถึงการเข้าถึงข้อมูล ในบางกรณีคุณจะเห็นว่าการเข้าถึงข้อมูลอยู่ในเลเยอร์ "รุ่น" ของ MVC ซึ่งอย่างที่เราเห็นมานั้นไม่ได้เป็นเลเยอร์ที่ชัดเจนอีกต่อไป จริง ๆ แล้วฉันเห็นสถาปัตยกรรม 3 ชั้นที่จับคู่กับ MVC เพื่อสร้างแอปพลิเคชันทั้งหมด หนึ่ง augments หรือปรับปรุงอื่น ๆ :

  • รุ่น
    • โมเดลของโดเมน (MVC / 3-tier)
    • ดูรุ่น (MVC)
    • (เป็นทางเลือก) โมเดลธุรกิจ (MVC / 3-tier)
  • จำนวนการดู (MVC)
  • ตัวควบคุม (MVC)
  • การเข้าถึงข้อมูล (3 ระดับ)
  • บริการ (3 ชั้น)

มีจุดตัดบางส่วน แต่ส่วนใหญ่แยกจากกันและใช้ร่วมกันในการแยกและแยกส่วนประกอบต่าง ๆ ของระบบขนาดใหญ่


3

ไม่พวกเขาไม่เหมือนกัน

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

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


ก่อนอื่น MVC เป็นผู้พัฒนารูปแบบสถาปัตยกรรม. mozilla.org/en-US/Apps/Fundamentals/ ประการที่สองมันไม่ได้มีไว้สำหรับ UI เท่านั้นมันถูกใช้อย่างกว้างขวางใน UI แต่คำสั่งที่กำหนดมากของคุณนั้นไม่ถูกต้องและทำให้เข้าใจผิด
Daniel Dubovski

2

ฉันรู้ว่าจะมีคำตอบที่แตกต่างกันมากมาย แต่ฉันจะให้มุมมองของฉันเกี่ยวกับเรื่องนี้

มันเป็นคำตอบที่มีชื่อเสียงที่สุดในด้านวิศวกรรมซอฟต์แวร์ "ขึ้นอยู่กับ"

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

แอพพลิเคชั่นที่คุณสร้างขึ้นเว็บแอพธรรมดา ๆ อาจมีเพียงเลเยอร์ MVC ที่พูดถึง ORM ไปยังฐานข้อมูล มีความซับซ้อนมากขึ้นอาจมี MVC จัดการ front-end ใน User Layer กับการดำเนินการที่ไม่เปิดเผยผู้ใช้ที่ซับซ้อนเกิดขึ้นในเลเยอร์ BL กับชั้นข้อมูลที่ประกอบด้วยหลายแหล่ง

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