2010-10-04 8 views
42

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

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

MVC mẫu đối tượng:

Models dữ liệu sẽ được hiển thị bằng một cái nhìn tương ứng. Như vậy có thể không ánh xạ trực tiếp vào đố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 máy khách
  2. Có thể chứa logic nghiệp vụ, ví dụ: xác nhận, tài sản tính toán, vv
  3. Không phương pháp kiên trì liên quan

đối tượng tên miền:

Object rằng các mô hình một đối tượng thế giới thực trong lĩnh vực vấn đề như Reservation, Khách hàng, trật tự, vv Được sử dụng để kéo dài dữ liệu .

  1. phía Server
  2. Không logic kinh doanh

DTO (Chuyển Object Data):

Một đối tượng sử dụng để chuyển dữ liệu giữa các lớp khi lớp đang trong quá trình riêng biệt, ví dụ từ một DB đến ứng dụng khách. Cho phép một giao dịch duy nhất trên dây thay vì nhiều cuộc gọi. Một DTO chỉ chứa dữ liệu và phương thức truy cập, không có logic. Dữ liệu dành cho một giao dịch DB cụ thể để có thể không trực tiếp đến đố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. Được sử dụng trên cả hai mặt như trôi qua giữa các lớp
  2. Không logic kinh doanh
  3. Không liên quan kiên trì phương pháp

Vì vậy, để những câu hỏi:

(1) Có hiểu biết của tôi có đúng không? Tôi có thiếu một số điểm chính không?

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

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

Cảm ơn.

Tim

+5

câu hỏi hay .. +1 – nawfal

Trả lời

7

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

Đố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 persistence, nhưng nó có thể có siêu dữ liệu (như chú thích) để hỗ trợ persistence

Mô hình lập trình POJO làm cho nó có thể sử dụng cùng một đối tượng như miền của bạn, DTO và các đối tượng mô hình - 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

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

+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/xử lý nghiệp vụ quan trọng liên quan đến dữ liệu mô hình được hiển thị? –

+1

có, đó sẽ là một lý do để có một mô hình chuyên dụng thích hợp như trái ngược với việc sử dụng một đối tượng miền. Đối tượng miền của bạn có thể lưu trữ ngày tháng chỉ UTC và đó là đủ 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 cho việc thực hiện các tính toán cụ thể của giao diện người dùng này. – kartheek

11

Đố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 thực hiện, 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 một biến thể chính của DTO là Mô hình xem, được sử dụng hoàn toàn để truyền dữ liệu giữa mô hình miền và chế độ xem, mặc dù thường Mô hình xem có thể chứa logic, mặc dù điều này hoàn toàn là logic UI.

+0

Cảm ơn cả hai người trả lời. Nó có vẻ 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 thực, logic liên quan trực tiếp đến dữ liệu. –

+2

Một đối tượng MVC Model 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ì việc sử dụng đối tượng miền như đối tượng MVC Model dễ dàng hơn. –

1
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 riêng nó !!!

Gắn bó với phương pháp MVC ...

Domain = subject of your entire application. 

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

Họ obvioussly có thể có hành vi và các thuộc tính (xem sự khác biệt với DTO).

Thường thì một ứng dụng (một ánh sáng) 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 loại đối tượng hoàn toàn khác, đang xử lý một loại khác. Cả hai trường hợp này, 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 câu trả lời này là đầy đủ và làm cho nó rõ ràng cho bạn!

0

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

0

Bất kỳ định nghĩa đối với hầu hết các đối tượng là khác nhau dựa trên vị trí của việc sử dụng của các đối tượng:

Model: là một vị tướng nét cho việc sử dụng đối tượng trong client hoặc máy chủ.

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

Lưu ý: the definitions are true most of the time nhưng trong một số trường hợp không thực tế.