2010-01-22 4 views
5

Gần đây tôi đã chạy qua mẫu này (?) Trong mã của chúng tôi và tự hỏi nó hữu ích như thế nào, nếu có. Chúng tôi có một ứng dụng Spring và Flex front-end sử dụng BlazeDS. Nó đã quyết định rằng chúng tôi sử dụng các giao diện trên DTOs của chúng tôi, như vậy:DTO và giao diện

Java


public interface ISomeDTO { 
     Integer setId(); 
     void getId(Integer i); 
} 

public class SomeDTO implements ISomeDTO 
{ 
.. 
} 

 

Actionscript


public interface ISomeDTO { 
     var id:Integer; 
} 

public class SomeDTO implements ISomeDTO 
{ 
.. 
} 

 

gì một giao diện trên một DTO được bạn? Đây là những vật thể nhẹ với logic hoàn toàn bằng không. DTO có ý nghĩa, giao diện có ý nghĩa, nhưng không phải với nhau.

Trả lời

3

Tôi không hiểu tại sao giao diện và DTO sẽ không hoạt động cùng nhau.

Hãy xem xét một nhà máy/nhà lắp ráp tạo đối tượng miền từ DTO. Bạn có thể cấu hình nhà máy với các chiến lược để có thể tạo ra các triển khai cụ thể của một đối tượng miền dựa trên loại DTO mà nó được cung cấp. DTO lý tưởng sẽ được gõ vào một giao diện ở đây. (Điều này cũng làm việc theo hướng ngược lại).

Tôi không nói rằng bạn nên đặt mọi DTO phía sau một giao diện, nhưng cũng giống như với các đối tượng miền, chắc chắn sẽ có những trường hợp có lợi.

+2

Họ làm trong trường hợp của bạn và tôi có thể thấy lý do tại sao điều đó sẽ có lợi. Đây là tiêu chuẩn trong ứng dụng của chúng tôi không có lý do rõ ràng (với tôi ít nhất). Suy nghĩ của tôi là sử dụng một giao diện khi bạn cần nó, không chỉ vì. – unscene

3

Trong môi trường dựa trên giao dịch DTO được sử dụng để tách các thực thể cơ sở dữ liệu của bạn khỏi phiên db cơ bản.

Các phiên này thường không khả dụng và hầu hết các thực thể đều được tạo thành từ proxy ủy quyền tải các bộ sưu tập thành viên một cách lười biếng. Vì vậy, nếu bạn truy cập vào một thuộc tính sưu tập trên thực thể proxy, proxy sẽ tải bộ sưu tập tại thời điểm này trong thời gian, thì có tồn tại một giao dịch cơ sở dữ liệu hay không. Vì vậy, một truy cập của một thành viên thực thể có thể sinh ra một lỗi khi không có giao dịch hoạt động.

Chính xác điều này xảy ra khi bạn chuyển tiếp các thực thể của mình đến chế độ xem, cố gắng truy cập thành viên. Do việc xử lý giao dịch thường được định nghĩa trong lớp dịch vụ nên không có giao dịch đang hoạt động nào trong khung nhìn/bộ điều khiển.

Để vòng quanh vấn đề này có cách tiếp cận khác nhau:

  • Giữ phiên mở thông qua ví dụ một cơ chế lọc (OpenSessionInViewFilter Spring), mặc dù nói đúng đây là một mô hình chống
  • hãy DAO của bạn trả về một đối tượng chuyển giao dữ liệu đầy với các thành viên cần thiết đã khởi

hy vọng điều này đã giúp.

+1

Chắc chắn tôi hiểu những điểm đó. Nhưng tại sao một giao diện trên một DTO nó không có ý nghĩa với tôi? Việc sử dụng các DTO không phải là không quen thuộc với sự bao gồm của một giao diện ở đây. – unscene

+0

oh sry hoàn toàn hiểu sai các câu hỏi. muộn và tất cả. Tôi không hiểu tại sao một người sử dụng giao diện ở đây, hoặc không có ý nghĩa với tôi:/ – fasseg

+0

Ít nhất tôi không phải là người duy nhất: P Cảm ơn bạn vì câu trả lời đó. Vâng crafted. – unscene