2009-05-05 12 views
5

Thường thì yêu cầu phải có đối tượng tên miền được hiển thị theo nhiều cách khác nhau trên giao diện người dùng; danh sách, kết quả tìm kiếm, xem và chỉnh sửa trang, cũng như trong tiêu đề, chân trang và quảng cáo. Thông thường bạn có một vài "khung nhìn" khác nhau của đối tượng miền, mỗi đối tượng khác nhau được hiển thị.POCO vs DTO: Có ổn không khi hydrate một phần đối tượng miền?

Hầu hết lời khuyên có vẻ là sử dụng DTO để lấy dữ liệu khi bạn yêu cầu tập con hoặc tập con. Có rất nhiều chi phí trong việc duy trì DTO. Nó là một cách tiếp cận xấu chỉ đơn giản là điền vào các thuộc tính của đối tượng miền cần thiết cho mỗi kịch bản. Ví dụ: bạn có thể sử dụng tiểu sử để nói những thuộc tính nào nên được bao gồm, ví dụ:

service.GetDomainObjects (int listID, Profile.ListProfile); service.GetDomainObjects (chuỗi tìm kiếmParam, Profile.SearchProfile);

Trả lời

3

Đối với tôi điều này xảy ra là nơi bạn muốn chi phí, hoặc bạn sẽ có một tập các lớp khác nhau đại diện cho DTO của bạn hoặc bạn sẽ có một tập hợp các phương thức trả về cùng một đối tượng miền nhưng với các trường khác nhau được 'ngậm nước'.

Một vài câu hỏi tôi muốn hỏi để giúp đưa ra quyết định là:

  • overhead trong hydrating toàn bộ đối tượng là gì? Là sự phức tạp thêm (của DTO hoặc các đối tượng ngậm nước một phần) thực sự đáng giá?
  • có ai khác đang sử dụng mã của bạn không? Bạn không nhầm lẫn giữa những người có các vật thể bị ngậm nước, các DTO có thể rõ ràng hơn khi mọi người đến để duy trì mã của bạn.

Tôi có sở thích cá nhân nhỏ đối với DTO vì tôi cảm thấy việc duy trì lâu dài cho hệ thống của bạn sẽ dễ dàng hơn. Nếu một ban nhạc một người của bạn, hoặc đây là một ứng dụng bỏ đi, tôi hoàn toàn có thể hiểu không muốn giới thiệu một loạt các lớp học bổ sung sẽ làm xáo trộn mã của bạn.