Sự khác biệt giữa đối tượng Mô hình MVC, đối tượng miền và DTO


77

Sự khác biệt giữa đối tượng Mô hình MVC, đối tượng miền và DTO là gì?

Sự hiểu biết của tôi là:

Đối tượng mô hình MVC:

Lập mô hình dữ liệu sẽ được hiển thị bằng một dạng xem tương ứng. Nó có thể không ánh xạ trực tiếp đến một đối tượng miền, tức là có thể bao gồm dữ liệu từ một hoặc nhiều đối tượng miền.

  1. Phía khách hàng
  2. Có thể chứa logic nghiệp vụ. Ví dụ. xác thực, thuộc tính được tính toán, v.v.
  3. Không có phương pháp liên quan đến sự bền bỉ

Đối tượng miền:

Một đối tượng mô hình đối tượng trong thế giới thực trong miền vấn đề như Đặt chỗ, Khách hàng, Đơn đặt hàng, v.v. Được sử dụng để duy trì dữ liệu.

  1. Phía máy chủ
  2. Không có logic kinh doanh

DTO (Đối tượng truyền dữ liệu):

Một đối tượng được sử dụng để chuyển dữ liệu giữa các lớp khi các lớp nằm trong các quy trình riêng biệt, ví dụ: từ DB sang ứng dụng khách. Cho phép một giao dịch qua dây thay vì nhiều cuộc gọi khi tìm nạp dữ liệu tương ứng với nhiều đối tượng miền. DTO chỉ chứa dữ liệu và các phương thức truy cập và không có logic nào. Dữ liệu dành cho một giao dịch DB cụ thể, vì vậy nó có thể ánh xạ trực tiếp hoặc không trực tiếp tới một đối tượng miền vì nó có thể bao gồm dữ liệu từ một hoặc nhiều đối tượng miền.

  1. Được sử dụng trên cả hai phía máy chủ và máy khách vì nó được truyền giữa các lớp
  2. Không có logic kinh doanh
  3. Không có phương pháp liên quan đến sự bền bỉ

Vì vậy, các câu hỏi:

  1. Cách hiểu trên có đúng không? Tôi có thiếu một số điểm chính?

  2. Có bất kỳ lý do nào để không sử dụng các đối tượng Miền làm Mô hình MVC giả sử rằng các đối tượng Mô hình không yêu cầu thêm logic nghiệp vụ không?

  3. Có bất kỳ lý do nào để không sử dụng DTO làm Mô hình MVC giả sử rằng các đối tượng Mô hình không yêu cầu thêm logic nghiệp vụ không?


9
tốt câu hỏi .. 1
nawfal

Câu trả lời:


23

Các đối tượng miền và mô hình về cơ bản giống nhau và có thể chứa logic nghiệp vụ. Tùy thuộc vào việc triển khai, các đối tượng miền và DTO có thể tương đương nếu bạn loại bỏ logic nghiệp vụ khỏi mô hình thành một lớp dịch vụ.

Thường thì một biến thể chính của DTO là View Model, được sử dụng thuần túy để truyền dữ liệu giữa mô hình miền và khung nhìn, mặc dù thường thì một View Model có thể chứa logic, mặc dù đây phải hoàn toàn là logic UI.


Cảm ơn bạn cho cả những người đã trả lời. Nó dường như rõ ràng hơn với tôi bây giờ. Các đối tượng miền có thể có logic nghiệp vụ như xác nhận hợp lệ, logic liên quan trực tiếp đến dữ liệu.
Timothy Mowlem

2
Một đối tượng Mô hình MVC riêng biệt chỉ cần thiết để đóng gói logic liên quan đến việc hiển thị dữ liệu trong khung nhìn. Nếu không có bất kỳ thì sẽ dễ dàng hơn khi sử dụng đối tượng miền làm đối tượng Mô hình MVC.
Timothy Mowlem

9

Miền và DTO cũng có thể là các đối tượng "mô hình" của bạn - bạn có thể có chế độ xem để hiển thị các chi tiết của đối tượng miền "Khách hàng".

Một đối tượng miền có thể có logic nghiệp vụ để thực thi các thuộc tính của thực thể miền. xác nhận là một trong những trường hợp như vậy. Bản thân đối tượng miền không chứa các phương thức liên quan đến tính bền bỉ, nhưng nó có thể có siêu dữ liệu (như chú thích) để hỗ trợ tính liên tục

mô hình lập trình POJO giúp bạn có thể sử dụng cùng một đối tượng như miền, DTO và các đối tượng mô hình của bạn - về cơ bản, bạn sẽ không được triển khai bất kỳ giao diện không liên quan nào sẽ chỉ áp dụng cho một lớp nhưng không áp dụng cho các lớp khác.


1
Vâng, đây là những gì tôi đang làm. Thật vậy, trong hầu hết mọi trường hợp, tôi chưa bao giờ có nhu cầu sử dụng bất cứ thứ gì khác ngoài đối tượng Domain. DTO sẽ dành cho một truy vấn phức tạp với nhiều mục dữ liệu trải dài các đối tượng miền.
Timothy Mowlem

1
Và một lớp Mô hình MVC riêng biệt chỉ thực sự cần thiết nếu có logic kinh doanh / xử lý quan trọng liên quan đến dữ liệu mô hình được hiển thị?
Timothy Mowlem

1
vâng, đó sẽ là một lý do để có một mô hình chuyên dụng thích hợp thay vì sử dụng một đối tượng miền. Đối tượng miền của bạn có thể chỉ lưu trữ ngày UTC và điều đó cũng đủ cho tất cả logic biz của bạn. Nhưng trên giao diện người dùng, giả sử bạn sẽ phải hiển thị nó trong múi giờ của tài khoản người dùng. Một mô hình sẽ hữu ích để thực hiện các tính toán cụ thể về giao diện người dùng này.
kartheek

5
A DTO = is an object that carries data between processes.

Nhưng phần thú vị nhất là, nó không có bất kỳ hành vi nào ngoại trừ việc lưu trữ và truy xuất dữ liệu của chính nó !!!

Bám sát phương pháp luận MVC ...

Domain = subject of your entire application.

Model = contains the (programming languages objects : EX: C# objects) to make up the universe of your application.

Rõ ràng chúng có thể có hành vi và thuộc tính (xem sự khác biệt với DTO).

Thường thì một ứng dụng (một ứng dụng nhẹ) có thể có một mô hình - trường hợp trong đó mô hình của bạn chính xác là miền của bạn. Một mô hình khác có thể là, một kiểu đối tượng hoàn toàn khác, đang xử lý một kiểu đối tượng khác. Cả hai trong số chúng, trong trường hợp này là một phần của miền của bạn và được đặt tên là "mô hình miền - đối tượng".

Hy vọng rằng câu trả lời này là đầy đủ và làm cho tất cả rõ ràng cho bạn!


3

Phần dưới đây của tôi (nói một cách ngắn gọn) như sau:

(MVC) Đối tượng mô hình:

  • đại diện cho một số thứ trong một số ngữ cảnh sử dụng, ví dụ. PersonEditModel, PersonViewModelhoặc chỉPersonModel
  • không có logic kinh doanh
  • có thể là chủ đề của một số logic định giá, v.v.
  • được sử dụng để cung cấp dữ liệu từ lớp ứng dụng này sang lớp ứng dụng khác, ví dụ. Bộ điều khiển MVC <-> Chế độ xem MVC

Đối tượng miền:

  • đại diện cho một số đối tượng kinh doanh (đối tượng thế giới thực trong miền vấn đề)
  • có logic kinh doanh
  • không cho phép trạng thái đối tượng không hợp lệ, có các phương thức để thay đổi đúng trạng thái của đối tượng
  • được sử dụng để đóng gói logic nghiệp vụ liên quan đến nó
  • không được sử dụng để duy trì dữ liệu (hoặc thậm chí không nên)

DTO (Đối tượng truyền dữ liệu):

  • tương tự như đối tượng Model nhưng phải có cấu trúc phẳng
  • chỉ các thuộc tính / trường kiểu đơn giản (chuỗi, số, lịch ngày, boolean)
  • được sử dụng để truyền dữ liệu qua ranh giới ứng dụng, ví dụ. giữa máy chủ web và trình duyệt web

câu trả lời hoàn hảo!
Gaurav

2

Mọi định nghĩa cho hầu hết các đối tượng đều khác nhau dựa trên vị trí sử dụng các đối tượng:

Model: là một định nghĩa chung để sử dụng đối tượng trong máy khách hoặc máy chủ .

  1. Model View: là một đối tượng sử dụng trong clienthầu hết thời gian.
  2. Domain Object: là một đối tượng sử dụng in servertransfering data to the database.
  3. Data Transfer Object(DTO): là đối tượng truyền dữ liệu từ đối tượng này sang đối tượng khác , đặc biệt trong việc lấy dữ liệu vào API Call(ví dụ: trong lệnh gọi Phương thức GET của api để lấy dữ liệu, bạn không được cung cấp các mô hình cơ sở dữ liệu cho máy khách, vì mục đích này bạn sử dụng dto).

Lưu ý: the definitions are true most of the timenhưng trong một số tình huống không thực tế.


1

1) Không, Đó là định nghĩa của ViewModel. Đối tượng mô hình MVC và Đối tượng miền đều giống nhau.
2) Mô hình miền (Đối tượng) luôn hiện diện, logic nghiệp vụ là tùy chọn
3) Nếu không có logic nghiệp vụ nào trong Đối tượng miền thì tự động nó trở thành DTO.

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.