MVC: sự khác biệt giữa mô hình và dịch vụ là gì?


15

Tại sao trong một số khung, lớp logic được gọi là "Mô hình" trong khi trong một số khung, nó được gọi là "Dịch vụ". Chúng khác nhau hay chỉ khác nhau bằng cách đặt tên theo quy ước?


CẬP NHẬT 1

Lý do tôi hỏi là vì trong Zend Framework, một khung MVC cổ điển, mọi người đều sử dụng khái niệm Model. Bây giờ tôi đang học AngularJS và dường như từ Model biến mất và được thay thế bằng dịch vụ từ.

Điều tôi nhận thấy là một dịch vụ giống như một singleton có thể được sử dụng lại nhiều lần (ví dụ: máy khách REST) ​​trong khi một mô hình liên quan nhiều hơn đến các thao tác dữ liệu đến từ bộ điều khiển trong mẫu MVC.


Chia sẻ nghiên cứu của bạn giúp mọi người. Hãy cho chúng tôi những gì bạn đã cố gắng và tại sao nó không đáp ứng nhu cầu của bạn. Điều này chứng tỏ rằng bạn đã dành thời gian để cố gắng tự giúp mình, nó giúp chúng tôi tránh nhắc lại các câu trả lời rõ ràng và hầu hết nó giúp bạn có được câu trả lời cụ thể và phù hợp hơn. Xem thêm Cách hỏi
gnat

Để diễn giải Shakespeare: những gì trong một cái tên, một bông hồng bởi bất kỳ tên nào khác vẫn là một bông hồng. Mô hình ứng dụng của bạn cũng có thể được thực hiện như một dịch vụ.
jwenting

Câu trả lời:


22

Mô hình: Các trường thuộc về đối tượng, các phương thức giúp lấy / đặt dữ liệu từ đối tượng (một trình truy cập tên đầy đủ trả về tên + họ)

Dịch vụ: Phương thức thực hiện các hoạt động với một hoặc nhiều mô hình, xem 'đơn vị công việc', giao dịch, v.v ...


Employee :: created chỉ cần lấy một bộ dữ liệu, thực hiện xác nhận mô hình nếu cần và trả về Đối tượng nhân viên.

EmployeeService :: HireEmployee có thể tạo nhân viên, gửi email chào mừng, tạo hộp thư, biến họ thành bánh sandwich, v.v ... nó có thể trả về tập dữ liệu hoặc mã kết quả, v.v ...


Điều này cũng có thể ảnh hưởng đến xác nhận:

Xác thực mẫu: Nhân viên phải có id, tên và họ và ngày sinh

Xác nhận dịch vụ: Nhân viên cho vị trí nhân viên pha chế phải từ 21 tuổi trở lên và được người quản lý phê duyệt.


Cảm ơn ví dụ rất cụ thể minh họa mức độ phức tạp của logic kinh doanh từ thực, và do đó tại sao một lớp dịch vụ bổ sung có thể giúp đỡ ngoài lớp mô hình.
wlnirvana

3

Theo kinh nghiệm của tôi, lớp Model trong mẫu thiết kế MVC đề cập đến mọi thành phần phần mềm liên quan đến thao tác dữ liệu (POJOs, DAO, tất cả các cách để SQL, JDBC, v.v.).

Trong khi đó, lớp dịch vụ thực sự là một bổ sung cho MVC:

Chúng ta biết rằng các thành phần lớp Model được gọi bên trong lớp Trình điều khiển . Khi cái sau được xây dựng, bạn sẽ nhận ra rằng nó không có vẻ súc tích (lộn xộn với mã bẩn); Bộ điều khiển có thể không đủ khả năng chi tiết bổ sung (ví dụ: định dạng các tham số yêu cầu trước khi gọi phương thức DAO sẽ tiêu thụ chúng ...). Do đó, bạn có thể bao gồm lớp bổ sung này, cụ thể là lớp Dịch vụ .

Cuối cùng, bạn có thể bao gồm mã bẩn của mình bên trong các phương thức tĩnh với một tên, tham số có ý nghĩa, vv, điều này sẽ dẫn đến một lớp Trình điều khiển tổng hợp.

Hãy xem liên kết này:

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


1
Đây chính xác là cách tôi nhìn thấy lớp dịch vụ. Nhưng sau đó, thường xuyên hơn không, tôi thấy nó đang được sử dụng để phục vụ API bên ngoài vào mô hình kinh doanh. Cả hai kịch bản tôi thấy hợp lệ. Vấn đề ở đây chỉ là trong cuộc đụng độ của danh pháp.
đốt cháy

2

Về mặt cấu trúc, các lớp cơ sở này giống nhau, tuy nhiên chúng được sử dụng để phân loại các mối quan tâm khác nhau của các tầng Dịch vụ và Mô hình của việc triển khai MVCS

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

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

Vì vậy, trong khi các lớp cơ sở giống nhau, các lớp cụ thể được tạo bằng cách mở rộng các lớp cơ sở này phục vụ hai mục đích hoàn toàn khác nhau.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.