2011-11-05 32 views
5

Có thể sử dụng Generics trong phương thức Yêu cầu không? Hoặc nếu không làm thế nào để giải quyết vấn đề này?Yêu cầu tính chất của phương pháp nhà máy chung

Cho phép nói rằng tôi muốn triển khai phân trang. Vì vậy, trong giao diện yêu cầu của tôi, tôi có phương thức như vậy:

public List<UserProxy> getUserList(int offset, int limit); 

nhưng danh sách chỉ trả về dữ liệu giới hạn. Để thực hiện phân trang, tôi cũng cần tổng số phần tử. Trong phong cách RPC, tôi sẽ sử dụng đối tượng Kết quả:

public MyResultObject<User> getUserList(int offset, int limit) 

nơi trong MyResultObject Tôi sẽ lưu trữ Danh sách và tổng tài sản là tài sản. Thật không may trong RF tôi không thể làm điều đó. Cũng trong GWT-RPC, tôi có thể sử dụng mẫu lệnh và danh sách truy xuất từ ​​một phương thức và tổng số từ một phương thức khác trong một yêu cầu duy nhất.

Cách nhận tổng số tiền với danh sách phần tử cùng một lúc?

Trả lời

3

Bạn có thể có một MyResultObjectProxy (phải thừa nhận là loại chuyên dùng cho UserProxy), hoặc bạn có thể thực hiện hai yêu cầu của bạn (danh sách và tổng số) trong yêu cầu HTTP hàng loạt giống nhau:

MyContext ctx = factory.context(); 
ctx.getUserList(offset, limit).to(new Receiver<List<UserProxy>>() { … }); 
ctx.getUserTotalCount().to(new Receiver<Integer>() { … }); 
ctx.fire(); 

Kể từ GWT 2.4, RF hỗ trợ tính đa hình, vì vậy có lẽ bạn có thể sử dụng MyResultObjectProxy không chuyên biệt cho một EntityProxy cụ thể (hoặc Value Proxy), mặc dù tôi thực sự không chắc chắn nó có thực sự hoạt động hay không.

+0

Vì vậy, sản phẩm pháo hoa của bạn hoạt động, nhưng tôi sẽ phải viết MyResultObjectProx cho từng pháp nhân mà tôi muốn hiển thị trong chế độ xem trang.
Quan điểm thứ hai theo ý kiến ​​của tôi là tốt nhất, nhưng tôi cần viết hai bộ thu và đồng bộ chúng lại với nhau. Trong thực tế, tôi đã viết ReceiverManager mà làm điều đó, nhưng theo ý kiến ​​của tôi nó vẫn là phương pháp khó xử với mã boilerplate. – kospiotr

+0

Tùy chọn thứ ba là cách tốt nhất để viết không chuyên biệt cho một Proxy cụ thể nhưng nó không hoạt động như proxy không chấp nhận Generics hoặc Object làm phần tử danh sách. Bất kỳ ý tưởng nào khác? – kospiotr

+0

Re. tùy chọn thứ ba: ngay cả khi bạn chỉ sử dụng 'Danh sách '? hoặc có thể làm cho tất cả các proxy thực thể của bạn mở rộng cùng một giao diện cơ sở và sử dụng giao diện đó. Bạn sẽ phải thêm phôi, chắc chắn, nhưng đó vẫn còn ít mã boilerplate và một mã biên dịch nhẹ hơn. –

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