MVC: อะไรคือความแตกต่างระหว่างรุ่นและบริการ?


15

เหตุใดในบางเฟรมเวิร์กลอจิกจึงเรียกว่า "Model" ในขณะที่บางเฟรมเรียกว่า "Service" พวกเขาแตกต่างกันหรือแตกต่างกันโดยการตั้งชื่อแบบแผน?


อัพเดท 1

เหตุผลที่ฉันถามคือเพราะใน Zend Framework กรอบ MVC คลาสสิกทุกคนใช้แนวคิดของ Model ตอนนี้ฉันกำลังเรียนรู้ AngularJS และดูเหมือนว่าคำว่ารุ่นหายไปและถูกแทนที่ด้วยบริการคำว่า

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


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

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

คำตอบ:


22

รุ่น: เขตข้อมูลที่เป็นของวัตถุวิธีที่ช่วยในการรับ / ตั้งค่าข้อมูลจากวัตถุ (ตัวเข้าถึงชื่อเต็มที่ส่งกลับชื่อ + นามสกุล)

บริการ: วิธีการดำเนินการกับรุ่นหนึ่งรุ่นขึ้นไปดู 'หน่วยงาน' ธุรกรรม ฯลฯ


พนักงาน :: สร้างควรใช้ชุดของข้อมูลดำเนินการตรวจสอบรูปแบบถ้าจำเป็นและส่งคืนวัตถุของพนักงาน

EmployeeService :: HireEmployee อาจสร้างพนักงานส่งอีเมลต้อนรับสร้างกล่องจดหมายสร้างแซนวิช ฯลฯ ... มันอาจส่งคืนชุดข้อมูลหรือรหัสผลลัพธ์ ฯลฯ ...


สิ่งนี้อาจส่งผลกระทบต่อการตรวจสอบ:

การตรวจสอบรูปแบบ: พนักงานต้องมี ID ชื่อและนามสกุลและวันเกิด

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


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

3

จากประสบการณ์ของฉันเลเยอร์โมเดลภายในรูปแบบการออกแบบ MVC อ้างถึงส่วนประกอบซอฟต์แวร์ทั้งหมดที่เกี่ยวข้องกับการจัดการข้อมูล (POJOs, DAO ไปจนถึง SQL, JDBC และอื่น ๆ )

ในขณะที่ชั้นบริการนั้นเป็นส่วนเสริมของ MVC:

เรารู้ว่าส่วนประกอบของเลเยอร์โมเดลนั้นถูกเรียกใช้ในเลเยอร์ควบคุม เมื่อสร้างขึ้นมาแล้วคุณจะรู้ว่ามันดูไม่รัดกุม (ยุ่งกับโค้ดสกปรก); คอนโทรลเลอร์อาจไม่สามารถรับรายละเอียดเพิ่มเติมได้ (เช่นการจัดรูปแบบพารามิเตอร์คำขอก่อนที่จะเรียกใช้เมธอด DAO ที่จะกินข้อมูลเหล่านั้น ... ) ดังนั้นคุณอาจรวมเลเยอร์พิเศษนี้คือเลเยอร์บริการ

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

ลองดูที่ลิงค์นี้:

/programming/2762978/the-purpose-of-a-service-layer-and-asp-net-mvc-2


1
นี่เป็นวิธีที่ฉันเห็นเลเยอร์บริการด้วย แต่บ่อยกว่านั้นฉันเห็นว่ามันถูกใช้เพื่อให้บริการ API ภายนอกในรูปแบบธุรกิจ ทั้งสองสถานการณ์ฉันเห็นว่าถูกต้อง ปัญหาที่นี่เป็นเพียงการปะทะกันของระบบการตั้งชื่อ
burntblark

2

โครงสร้างคลาสพื้นฐานเหล่านี้เหมือนกันอย่างไรก็ตามพวกมันถูกใช้เพื่อจำแนกข้อกังวลที่แตกต่างกันของ Service and Model เทียร์ของการใช้ MVCS

Service:- A concrete service class defines the API of an external Service.

Model :- Defines the API of the applications data model.

ดังนั้นในขณะที่คลาสพื้นฐานเหมือนกันคลาสคอนกรีตที่สร้างโดยการขยายคลาสฐานเหล่านี้มีจุดประสงค์ที่แตกต่างกันสองประการ

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