2012-01-20 24 views
10

Cập nhật đối tượng thông qua GWT RPC có thể dễ dàng hoàn tác. Chúng ta cần nhân bản trạng thái thực thể trước đó trong bộ nhớ và áp dụng nó khi hoàn tác.Cách hoàn tác yêu cầu Cập nhật FactoryF23

Nhưng khi chúng tôi sử dụng RequestFactory thì không có hoạt động cập nhật cụ thể. RequestFactory gửi các sửa đổi thực thể cho máy chủ và cập nhật các thực thể kho lưu trữ. Chúng tôi không thể chặn quá trình cập nhật.

Tôi nên triển khai hoàn tác các bản cập nhật được thực hiện với RequestFactory như thế nào?

+0

Bạn đang sử dụng InstanceRequest hoặc chỉ yêu cầu trong RF để gọi sự kiên trì? – Andrejs

Trả lời

0

Yêu cầu nhà máy không cập nhật thực thể máy chủ, cho đến khi bạn kích hoạt yêu cầu. Vì vậy, bạn có thể chỉ đơn giản là tránh thực hiện một cuộc gọi đến lửa(), để ngăn chặn sửa đổi trên máy chủ. Hy vọng đây là những gì bạn có ý nghĩa. Bạn có thể đăng các mã mà demostrates cách bạn đang cập nhật các thực thể, và nơi bạn muốn thực hiện hoàn tác?

+0

"Hoàn tác" nghĩa là các sửa đổi trên máy chủ đã được thực hiện. Tôi cần chặn hoạt động cập nhật máy chủ để lưu trạng thái của thực thể để hoàn tác sau này. –

0

Tôi không biết bạn có muốn làm điều này không. Đối với điều đó, bạn muốn hoàn tác các thay đổi của một lớp, hãy nói Liên hệ, thêm một trường có cùng loại, giống như trạng thái trước đó (chỉ cần làm cho nó tạm thời nếu bạn không muốn nó làm rối loạn sự kiên trì của bạn) để lớp trông giống như sau:

class Contact { 

    Integer id; 
    Integer version; 

    String name; 
    String phoneNumber; 

    //Transient 
    Contact previousState; 

} 

Bây giờ trong cuộc gọi, hãy sao lưu dữ liệu hiện tại vào trướcState và sau đó duy trì thực thể Liên hệ hiện tại. Trong hoàn tác, hãy sao chép dữ liệu cuộc gọi từ previousState sang "this".

Hoàn tác không có ý nghĩa gì đối với máy chủ, những thứ như vậy phải được quản lý trên máy khách. Tôi đã không đi qua bất kỳ kịch bản mà một chức năng undo là cần thiết trên máy chủ. Vì vậy, hãy trích dẫn kịch bản và mã mà bạn muốn thực hiện điều này.

+0

Để thực hiện hoàn tác trên máy khách, bạn nên giữ tất cả trạng thái ứng dụng của bạn trên máy khách. Bạn có nghĩ rằng nó có thể trong một ứng dụng GWT? –

+0

Chắc chắn là, nhưng bạn sẽ không cần toàn bộ trạng thái ứng dụng, một số thực thể như một thực thể Liên hệ trong một ứng dụng AddressBook là những gì bạn sẽ quan tâm đến "hoàn tác" ing phải không? –

+0

Không. Bạn sai rồi. Hãy xem xét một danh sách thứ tự các liên hệ chẳng hạn. –

1

Bạn nên xem xét sửa đổi cấu trúc và bảng dữ liệu phía máy chủ của mình. Kết hợp một mô hình thời gian hoặc bitemporal ở đó. Đừng bận tâm cố gắng giữ trạng thái "cũ" của các thực thể trong bộ nhớ, hoặc chặn chúng. Giữ trạng thái trước của các thực thể còn nguyên vẹn với các trường thời gian. Hoàn tác nghĩa là định vị phiên bản trước bằng dấu thời gian và đặt phiên bản hiện tại. Bạn cũng có thể thực hiện điều này trên nhiều loại thực thể cùng một lúc.

  • 01:00 bánh pizza Một lưu
  • 01:01 bánh pizza Một thành phần thay đổi
  • 01:02 bánh pizza Một thành phần thay đổi
  • 01:03 undo để 01:01

Nếu bạn muốn, bạn có thể định kỳ quét cơ sở dữ liệu của bạn và dọn dẹp các phiên bản cũ. Phong cách "chắp thêm chỉ" thời gian viết cũng có thể mang lại lợi ích hiệu suất.

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