MVC Vs n-tier สถาปัตยกรรม


142

ฉันสงสัยว่าอะไรคือความแตกต่างระหว่าง MVC (ซึ่งเป็นรูปแบบสถาปัตยกรรม) และสถาปัตยกรรมระดับ n สำหรับแอปพลิเคชัน ฉันค้นหามัน แต่หาคำอธิบายง่ายๆไม่ได้ ฉันอาจเป็นคนไร้เดียงสาเล็กน้อยเกี่ยวกับแนวคิด MVC ดังนั้นหากใครสามารถอธิบายความแตกต่างได้

ไชโย

คำตอบ:


94

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

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

N-tier หมายถึงโครงสร้างทางกายภาพของการนำไปใช้งาน บางครั้งทั้งสองสับสนเพราะการออกแบบ MVC มักจะนำมาใช้โดยใช้สถาปัตยกรรม N-tier


56
N-tier เป็นรูปแบบการออกแบบคุณไม่จำเป็นต้องใช้เซิร์ฟเวอร์ 3 ตัวในการทำระบบ 3 ระดับในความเป็นจริงมันเป็นไปได้ที่จะทำระบบ n-tier โดยใช้ไฟล์เดียวโดยแยกแต่ละชั้นตามแนวคิดเชิงแนวคิด
magallanes

6
โดยทั่วไปแสดงว่าการสื่อสารระหว่างโพรเซสเกิดขึ้นโดยทั่วไปแล้วโดยทั่วไปแล้วข้ามการเชื่อมโยงเครือข่าย ฉันไม่เห็นด้วยที่การไหลของการออกแบบโค้ดในระหว่างดำเนินการ (นับประสาในไฟล์เดียวกัน) ถือเป็นการออกแบบที่มีลักษณะเป็นชั้น แน่นอนว่าเป็น IMHO "เซิร์ฟเวอร์" หมายความว่าเครื่องสามารถทำงานหลายกระบวนการในกล่องเดียวกัน และพวกเขายังสามารถพูดคุยกับเครือข่าย "localhost" ได้
Zak

2
รูปแบบทั้งหมดที่กล่าวถึงเป็นตัวอย่างของการออกแบบ 3 ชั้น อย่าสับสนระหว่างความแตกต่างระหว่างชั้นและชั้น มันเป็นความจริงที่คุณสามารถเรียกใช้มากกว่าหนึ่งระดับบน mahcine จริง (เช่นคุณแบ่งเซิร์ฟเวอร์ขนาดใหญ่ผ่านทาง hypervisors) แต่จุดที่นี่คือ N-Tier aludes ไปยังเครือข่ายทางกายภาพ hop (เช่น TCP / IP) ในพื้นที่คุณจะมีประสิทธิภาพมากกว่าในการใช้ชื่อ pipes แต่อีกครั้งหากคุณใช้ระบบเดียวกันคุณจะสามารถแข่งขันกับหน่วยความจำและพลังการประมวลผล ทั้งหมดนี้เป็นเหตุผลในการพิจารณาแยกงานนำเสนอตรรกะทางธุรกิจและการเข้าถึงข้อมูลและฐานข้อมูลบนเครื่องที่แตกต่างกัน
Zack Jannsen

1
ฉันอยากจะแนะนำให้ทุกคนที่อ่านคำถามนี้เพื่ออ่านคำตอบอื่น ๆ คำตอบนี้ไม่ถูกต้อง
keisar

@magallanes, ไปกับ 'Zak' ก่อนอื่นเราต้องเคลียร์ความแตกต่างระหว่างเทียร์และเลเยอร์นี่คือบทความ codeprojectที่ดีมากซึ่งมีคำอธิบายที่ชัดเจน
Irf

42

หากการออกแบบ 3 ชั้นเป็นเช่นนี้:

Client <-> Middle <-> Data

รูปแบบ MVC จะเป็น:

     Middle
     ^    |
     |    v
Client <- Data

หมายความว่า:

  • ในการเทียบเท่า 3 ชั้นการสื่อสารระหว่างเลเยอร์นั้นเป็นแบบสองทิศทางและมักจะผ่านชั้นกลาง
  • ใน MVC เทียบเท่าการสื่อสารอยู่ในทิศทางเดียว ; เราสามารถพูดได้ว่า"เลเยอร์" แต่ละอันได้รับการอัปเดตโดยด้านซ้ายและในทางกลับกันอัปเดตที่ด้านขวา - ที่ไหนก็ได้ "ซ้าย" และ "ขวา" เป็นเพียงตัวอย่างเท่านั้น

PS ไคลเอ็นต์จะดูและกลางควบคุม


13
ในรูปแบบ MVC สามารถโต้ตอบโดยตรงกับลูกค้า (ดู) ??? ฉันไม่คิดอย่างนั้น!
palAlaa

6
@Alaa ฉันเห็นด้วยและนั่นเป็นเหตุผลที่ฉันคิดว่ามันหมายถึงการไหลของข้อมูล อัปเดต: ฉันเพิ่งตรวจสอบใน Wikipedia และโมเดลสามารถโต้ตอบมุมมองผ่านผู้สังเกตการณ์ (ไม่ใช่โดยตรง)
โมฆะ

1
ใน MVC: สถาปัตยกรรม MVC เป็นรูปสามเหลี่ยม: มุมมองจะส่งการอัปเดตไปยังคอนโทรลเลอร์คอนโทรลเลอร์จะอัปเดตโมเดลและมุมมองจะได้รับการอัปเดตโดยตรงจากโมเดลในรูปแบบสามชั้น: สถาปัตยกรรมสามชั้นคือไคลเอนต์ระดับไม่ติดต่อโดยตรงกับชั้นข้อมูล ในรูปแบบสามระดับการสื่อสารทั้งหมดจะต้องผ่านชั้นกลาง
ketan italiya

1
ที่นี่ถ้า Middle เป็นตัวควบคุมดังนั้นการสื่อสารระหว่าง Middle, Client และ Middle, Data เป็นแบบสองทิศทางไม่ใช่ทิศทางเดียวตามที่อธิบายไว้ใน ans .. ตัวควบคุมจะส่งข้อมูลไปยังแบบจำลองและแบบจำลองจะส่งคืนข้อมูลที่อัปเดตไปยังตัวควบคุม หลังจากผ่านมุมมอง
Dragon

30

นี่คือสิ่งที่พูดเกี่ยวกับสถาปัตยกรรมระดับ n

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


11
ฟังดูดี แต่ฉันไม่เชื่อว่า "มุมมองได้รับการอัปเดตโดยตรงจากโมเดล" เป็นความคิดที่ดี ไม่เหมาะสมที่จะใช้ตัวควบคุมสำหรับการอัปเดตและส่วนแทรก แต่ไม่ใช่สำหรับตัวเลือกและตัวกรองและฉันไม่เห็นจุดแยกของข้อกังวลเท่านั้นที่จะผูกมุมมองกับแบบจำลองต่อไป! สรุป - MVC เป็นหนึ่งในสิ่งที่ทำให้งงงวยที่สร้างขึ้นโดย .... มีการคาดเดา ฉันจำไม่ได้ว่า 3-tier ถูก จำกัด เพียงแค่ "สถาปัตยกรรมระบบ" หรือ "การออกแบบแอปพลิเคชัน" แนวคิดหลักคือการแยกของความกังวล
แซม

1
ขึ้นอยู่กับสิ่งที่คุณทำ แอป MVC สำหรับแอปพลิเคชัน iOS (ซึ่งน่าจะไม่อนุญาตให้อัปเดตมุมมองโดยตรงจากรุ่น) จะแตกต่างจากแอปพลิเคชันเว็บ (ซึ่งอาจ) MVC เป็นกระบวนทัศน์ไม่ใช่วิธีที่แน่นอนในการทำสิ่งต่าง ๆ
Dave Kanter

2
@ Sam ทั้งหมดเห็นด้วย ศัพท์แสงมากเกินไปสำหรับแนวคิดที่ใช้งานง่าย
smwikipedia

1
ฟังดูดีไม่ทำงาน Wikipedia ไม่ใช่แหล่งแห่งความจริงขั้นสูงสุด
ACV

เป็นวิธีที่คุณตีความความจริงและอีกครั้งขึ้นอยู่กับว่าเป้าหมายของคุณคืออะไร
Xinus

17

ความคล้ายคลึงกันเพียงอย่างเดียวคือทั้งสองรูปแบบมีสามกล่องในไดอะแกรมของพวกเขา โดยพื้นฐานแล้วพวกเขาแตกต่างอย่างสิ้นเชิงในการใช้งานของพวกเขา หากความจริงมันไม่ใช่ทางเลือกระหว่างรูปแบบที่จะใช้ แต่รูปแบบทั้งสองสามารถใช้ร่วมกันได้อย่างกลมกลืน นี่คือการเปรียบเทียบที่ดีของทั้งสอง: http://allthingscs.blogspot.com/2011/03/mvc-vs-3-tier-pattern.html


3
ฉันคิดว่านี่เป็นคำตอบที่ดีที่สุดโดยเฉพาะอย่างยิ่งเมื่อ MVC ให้ความสำคัญกับ UI จริงๆและมันอาจเป็น UI ระดับของคุณในการออกแบบ 3 ระดับ แผนภาพในลิงค์แสดงให้เห็นว่าสิ่งนี้ดีมาก
อเล็กซ์

5

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

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


5

@Cherry Middle ware ทำงานได้มากกว่าเช่นตัวจัดการคำขอหรือตัวเปลี่ยนเส้นทางในรูปแบบ MVC

ฉันต้องการอธิบายเล็กน้อยเกี่ยวกับ MVC ตามที่ฉัน Model View Controller ทำงานเช่นนี้

  1. ลูกค้าเริ่มเซสชันโดยการร้องขอบริการใด ๆ
  2. คำขอนี้ได้รับและจัดการโดยคอนโทรลเลอร์ (ตัวจัดการคำขอตัวเปลี่ยนเส้นทาง ฯลฯ )
  3. ผู้ควบคุมประมวลผลข้อมูลพื้นฐานเกี่ยวกับคำขอและเปลี่ยนเส้นทางไปยังรุ่นที่เกี่ยวข้องซึ่งสามารถเติมคำขอข้อมูลได้
  4. แบบจำลองกรอกคำขอตามพารามิเตอร์ที่ส่งผ่านโดยคอนโทรลเลอร์และส่งผลลัพธ์กลับไปยังคอนโทรลเลอร์ (หมายเหตุ: ที่นี่ฉันต้องการที่จะล้างข้อมูลที่ไม่ได้ถูกส่งกลับไปยังลูกค้าโดยตรงในสถาปัตยกรรม MVC จริง แต่มันเติมขึ้นและส่งกลับไปยังตัวควบคุม)
  5. ตัวควบคุมมากกว่าส่งข้อมูลไปยังมุมมอง (ไคลเอนต์)
  6. ลูกค้ามีบริการที่ร้องขอต่อหน้าเขา

นั่นคือทั้งหมดที่เกี่ยวกับ MVC ที่ฉันรู้


1
ฉันคิดว่าอย่างที่กล่าวไว้ข้างต้น MVC เป็นรูปสามเหลี่ยมดังนั้นบางครั้งมุมมองสามารถพูดคุยโดยตรงกับรุ่นและในทางกลับกันตามที่อธิบายไว้ในเอกสารนี้: msdn.microsoft.com/en-us/library/ms978748.aspx
ychaouche

5

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


4

นอกจากความเป็นเชิงเส้นแล้วความแตกต่างที่สำคัญอื่น ๆ ที่ไม่ได้เน้นมากพอที่นี่ก็คือในโมเดล N-tier นั้น N ไม่จำเป็นต้องมี 3 ชั้น! มันมักจะถูกนำมาใช้เป็นสามชั้น (งานนำเสนอแอปข้อมูล) กับชั้นกลางที่มีสองชั้นย่อย (ตรรกะทางธุรกิจและการเข้าถึงข้อมูล) นอกจากนี้โมเดลใน MVC สามารถมีทั้งข้อมูลและตรรกะทางธุรกิจสำหรับการจัดการข้อมูลในขณะที่สิ่งเหล่านี้จะอยู่ในระดับที่แยกต่างหากในระดับ n


3

สถาปัตยกรรม N-Tier ได้รับการกำหนดไว้อย่างดีที่สุดโดยใช้ Diagram

สถาปัตยกรรม MVC ได้รับการกำหนดที่ดีที่สุดโดยใช้ Sequence Diagram

2 ไม่เหมือนกันและไม่เกี่ยวข้องและคุณสามารถรวมสองสถาปัตยกรรมเข้าด้วยกัน บริษัท จำนวนมากได้ทำตามขั้นตอนเพื่อสร้างสถาปัตยกรรม N Tier'd ไม่เพียง แต่การปรับใช้และความสามารถในการปรับขนาด แต่สำหรับการใช้รหัสซ้ำ

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


หาก mvc ไม่ได้ใช้ซ้ำสำหรับสถานการณ์ของคุณคุณจะได้รับประโยชน์จาก mvc เมื่อเปรียบเทียบกับ n tier arch
Dragon

2

สรุป: N-tier เป็นสถาปัตยกรรม MVC รูปแบบการออกแบบ พวกเขาเป็นคำเปรียบเทียบที่ใช้ในสองสาขาที่แตกต่างกัน


1

Jerry: นี่เป็นตัวอย่างง่ายๆของความสัมพันธ์ระหว่างสอง:


Tier 1ประกอบด้วยรุ่นที่สื่อสารกับ Tier 2 ผ่านบริการเครือข่ายบางประเภทหรือคล้ายกันคอนโทรลเลอร์เพื่อจัดการการตรวจสอบอินพุตการคำนวณและสิ่งอื่น ๆ ที่เกี่ยวข้องกับมุมมอง และมันมีมุมมองตัวเอง ofcourse - ซึ่งสามารถเป็น GUI ในแอพเดสก์ท็อปหรือเว็บอินเตอร์เฟสในเว็บแอพ


Tier 2 - มีบริการบางอย่างหรือวิธีรับข้อความจาก Tier 1 ไม่ / ไม่ควรรู้เกี่ยวกับ Tier 1 ดังนั้นสามารถตอบรับสายจากด้านบนเท่านั้น - ไม่ต้องขอสิ่งต่าง ๆ ด้วยตัวเอง ยังมีตรรกะทางธุรกิจทั้งหมด


ชั้นที่ 3 - มีรูปแบบโดเมน, การแสดงวัตถุของฐานข้อมูลและตรรกะทั้งหมดในการสื่อสารและอัพเดทรายการฐานข้อมูล


1

ในรูปแบบสามระดับการสื่อสารทั้งหมดจะต้องผ่านชั้นกลาง แนวคิดสถาปัตยกรรมสามชั้นเป็นแบบเส้นตรง อย่างไรก็ตามสถาปัตยกรรม [model-view-controller] MVC เป็นรูปสามเหลี่ยม: มุมมองจะส่งการอัปเดตไปยังคอนโทรลเลอร์คอนโทรลเลอร์จะอัพเดตโมเดลและมุมมองจะได้รับการอัพเดตโดยตรงจากโมเดล


จริงๆแล้วมันไม่ใช่ MVC แต่เป็น MVVMC ฉันเห็นว่า MVC หรือ MVVMC เป็นเพียงเลเยอร์การนำเสนอเพราะฉันเห็นว่าคอนโทรลเลอร์เป็นเพียงมิดเดิลแวร์ระหว่างมุมมองและ BLL นี่คือวิธีที่ฉันจะรักษาไว้เพื่อให้ฉันสามารถใช้ BLL เป็นห้องสมุดเพื่อสร้าง UI สำหรับแพลตฟอร์มที่แตกต่างกัน มันเป็นชนิด aspx.cs พร้อมการสนับสนุน asmx บางครั้งฉันรู้สึกว่า MVC เป็นวิธีที่ไม่ดีในการจัดระเบียบไฟล์ในโฟลเดอร์โครงการมันยากที่จะเข้าใจเพราะตัวควบคุมทั้งหมดจะอยู่ในระดับเดียวและมีมุมมองในโฟลเดอร์ย่อย ฉันยังสามารถสร้างโฟลเดอร์ย่อยสำหรับตัวควบคุม แต่ทำงานซ้ำกัน
Nithin B
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.