2011-01-09 60 views
6

Tôi biết DTO là đối tượng truyền dữ liệu và BO là đối tượng kinh doanh. Nhưng, nó thực sự có ý nghĩa gì? Khi nào tôi nên chọn cái kia? Từ, điều tôi hiểu DTO chỉ được sử dụng để truyền dữ liệu và không có logic nghiệp vụ. Điều này có nghĩa là một DTO không có bất kỳ thuộc tính chỉ có phương thức (getter và setter)? Nhưng, nó vẫn có các đặc tính của một BO. Ai đó có thể xin giải thích? Cảm ơn.DTO và BO là gì? Sự khác biệt là gì?

+8

@ Mì lúa mì: Tôi đã nói với những gì tôi biết. Tôi đến với stackoverflow không phải vì tôi không thể tìm thấy câu trả lời trên internet. Tôi đến đây bởi vì có những chuyên gia thực sự hiểu chủ đề tốt và họ trả lời câu hỏi một cách đơn giản và sáng suốt. Bạn có thể XIN cho tôi (và những người khác) biết tại sao bạn đã hỏi câu hỏi này? – Sandbox

+0

@Sandbox : Tôi đã đặt câu hỏi bởi vì khi tôi thực hiện tìm kiếm trên internet cho các cụm từ đó, tôi nhận được câu trả lời đúng. –

+1

@ Mì lúa mì: Điều đó đúng với hầu hết các câu hỏi trên SO hoặc các trang web trao đổi stack có liên quan. Bạn sẽ tìm thấy câu trả lời trên một số blog hoặc một diễn đàn. Đây là lần đầu tiên trên SO rằng ai đó đã hỏi một câu hỏi, mà không thể được tìm kiếm trên internet? – Sandbox

Trả lời

11

DTO được sử dụng để chuyển dữ liệu giữa các lớp/tầng. Vì mục đích như vậy, nó không cần bất kỳ methos và đôi khi nó thậm chí không nên có bất kỳ phương pháp - ví dụ như khi DTO được tiếp xúc qua dịch vụ web.

Đối tượng kinh doanh là đối tượng thông minh có chứa dữ liệu và phương pháp thực hiện thao tác (thay đổi dữ liệu) trên đối tượng này. Khi bạn đưa BO lên lớp trên, nó có thể gọi các phương thức công khai của đối tượng của bạn. Đôi khi bạn không muốn điều này và vì lý do đó bạn tạo DTO mà chỉ cung cấp dữ liệu nhưng không phải là phương pháp.

DTO không phải vận chuyển tất cả dữ liệu BO. Khi bạn thực hiện theo cách tiếp cận DTO nghiêm ngặt, bạn tạo các DTO cụ thể cho từng hoạt động được hiển thị trên lớp doanh nghiệp của bạn. Ví dụ nếu đối tượng của bạn có dữ liệu kiểm toán như CreatedBy, ModifiedBy, CreatedDate, v.v. và bạn đang tạo phương thức Cập nhật DTO đang thịnh hành của bạn (với đối tượng được cập nhật) không cần phải có các thuộc tính này vì lớp trên không thể sửa đổi chúng - chỉ logic nghiệp vụ mới có thể .

+0

Vì vậy, DTO được sử dụng để giao tiếp từ lớp BO đến lớp truy cập dữ liệu? – Sandbox

+0

Không DTO là khái niệm chung có thể được sử dụng giữa bất kỳ lớp nào. Cách sử dụng DTO phổ biến nhất là giữa lớp Trình bày và Lớp doanh nghiệp. Một cách sử dụng phổ biến khác là giữa các tầng (ranh giới vật lý). –

+0

Tôi thấy rằng bạn hiểu .net (từ các câu trả lời trước của bạn). Vì vậy, nếu tôi đang sử dụng mô hình MVVM trong WPF với một kiến ​​trúc 3 cấp, sau đó là máy ảo của tôi DTO? hoặc tôi sẽ chỉ sử dụng VM để hiển thị và sử dụng DTO để chuyển dữ liệu từ VM sang Model và Model sang dịch vụ của tôi? – Sandbox

1

Nói chung, DTO có dữ liệu tĩnh tương đối cho thời điểm đó trước khi đến tầng, nhưng BO có thể tự động giữ giá trị cờ trạng thái và luồng; và BO cũng có thể tự chứa đựng để xác nhận hoặc sắp xếp lại một cách hợp lý hoặc phán xét đối với một số logic nghiệp vụ; nhưng sự thay đổi của DTO phụ thuộc vào sự thay đổi của dữ liệu đã vượt qua ... Nhưng, những thay đổi của BO có phạm vi rộng hơn, ví dụ, phụ thuộc vào cập nhật động hơn với trạng thái luồng kinh doanh, thay đổi của cờ, thậm chí cả danh tính có thể thay đổi theo thời gian thực, giả sử được bắt giữ và hành động để phản ánh từ BO, ví dụ như số dư từ $ 200 trở thành số không hoặc số dư từ $ 2000 đến $ 5000, khi đó giao dịch/nhận dạng thương mại hoặc trạng thái sẽ thay đổi ... sự khác biệt lớn giữa DTO và BO.

Các vấn đề liên quan