Cách thiết kế ứng dụng với khả năng rollback


9

Tôi hiện đang làm việc trên một ứng dụng (về cơ bản là một loại công cụ thực thi có khả năng chạy các công việc do người dùng xác định và tạo đầu ra trong thời gian thực) cần xử lý chức năng rollback, nghe có vẻ điên rồ nhưng có thể có ứng dụng đó ở ứng dụng đó cấp độ? ví dụ: hãy tưởng tượng một số người dùng cố gắng chạy một công việc J1 và khi nó bắt đầu thực thi, anh ta muốn Chỉnh sửa / Sửa đổi nó,

- điều đó có nghĩa là công việc đang chạy hiện tại phải bị giết,
- tất cả các hành động được thực hiện cho đến nay phải được hoàn nguyên và
- lại chạy lại công việc J1

Một vài điều xuất hiện trong đầu tôi là dù sao chúng ta cũng phải lưu trữ hoặc duy trì trạng thái ứng dụng bằng cách nào đó, ở đâu đó và sau đó gọi công cụ rollback cùng với các điểm lưu trước đó. Tôi đã đọc một vài bài viết về rollback cấp DB nhưng kịch bản không phù hợp trong trường hợp này vì nó cần phải hoạt động trên môi trường thời gian thực.

Nhưng tôi không thể tìm ra một cách tiếp cận đúng đắn về cách tiến hành và những điều khác cần được xem xét. Xin vui lòng cho tôi biết nếu điều này nghe không rõ ràng, tôi sẽ cố gắng cung cấp thêm thông tin nếu có thể.

Bất kỳ trợ giúp hoặc lời khuyên?


6
Tôi đề nghị đọc lên mẫu vật lưu niệm
Oded 23/12/13

1
Hầu hết các cơ sở dữ liệu cung cấp rollback với các cơ chế giao dịch. Nếu bạn có thể lưu trữ tất cả trạng thái trong DB, bạn có thể sử dụng trạng thái đó.
Pieter B

Những yếu tố nào cần được xem xét trong khi xác định những gì nên lưu và khi nào nên lưu?
dùng2720864

Bạn có thể làm rõ: Bạn có cần khôi phục về mặt giao dịch (một công việc có hoàn thành hay không, không có kết quả công việc một phần) hoặc bạn có cần hoàn tác chức năng không?
Bart van Ingen Schenau 23/12/13

2
Vui lòng không chỉnh sửa câu hỏi của bạn để đặt câu hỏi mới. Chỉ cần một bài viết một câu hỏi mới tham khảo câu hỏi này. Cảm ơn bạn.
maple_shaft

Câu trả lời:


18

Hệ thống thời gian thực hay không, mẫu memento là một nơi tuyệt vời để bắt đầu.

Mẫu memento là một mẫu thiết kế phần mềm cung cấp khả năng khôi phục một đối tượng về trạng thái trước đó (hoàn tác thông qua rollback).
Mô hình vật lưu niệm được thực hiện với ba đối tượng: người khởi tạo, người chăm sóc và người lưu niệm.
Người khởi tạo là một số đối tượng có trạng thái bên trong.
Người chăm sóc sẽ làm một cái gì đó cho người khởi tạo, nhưng muốn có thể hoàn tác thay đổi. Người chăm sóc đầu tiên yêu cầu người khởi tạo cho một đối tượng lưu niệm. Sau đó, nó thực hiện bất kỳ hoạt động nào (hoặc chuỗi hoạt động) mà nó sẽ làm.
Để quay trở lại trạng thái trước các hoạt động, nó trả về đối tượng memento cho người khởi tạo.
Bản thân đối tượng memento là một đối tượng mờ đục (một đối tượng mà người chăm sóc không thể, hoặc không nên thay đổi).
Khi sử dụng mẫu này, cần thận trọng nếu người khởi tạo có thể thay đổi các đối tượng hoặc tài nguyên khác - mẫu memento hoạt động trên một đối tượng.

Tôi đã chia tay bài viết Wikipedia một chút để tập trung vào một số mục.

Đối với kịch bản của bạn, người khởi tạo sẽ là mã ứng dụng chính của bạn, rất có thể tại điểm mà các công việc được đăng ký và bắt đầu xử lý.

Người chăm sóc là những gì bạn cần tạo và có thể là một loại hệ thống ghi nhật ký hoặc lưu trữ dữ liệu khác.

Memento sẽ là thông tin liên quan cần được hoàn tác và / hoặc làm lại. Tôi nghi ngờ điều này sẽ trông giống như một mô tả công việc của một số loại có thể được đặt trở lại vào hàng đợi xử lý.

Nếu bạn có thể bao bọc các thay đổi hiện có từ công việc J1bằng một giao dịch cơ sở dữ liệu, điều đó sẽ giải quyết các mối quan tâm của bạn ( all the action taken so far must be reverted). Khi xảy ra khôi phục giao dịch, bạn sẽ kích hoạt một cuộc gọi đến Người chăm sóc để sắp xếp lại công việc J1.

Một điều cần ghi nhớ là cảnh báo cuối cùng trong bản tóm tắt Wikipedia. Bạn cần đảm bảo rằng các thay đổi là nguyên tử và chúng có thể được áp dụng hoặc khôi phục lại dưới dạng một tập hợp gắn kết.

Tôi không chắc chắn rằng trong một môi trường thời gian thực sẽ có nhiều tác động đến cách bạn thực hiện mô hình vật lưu niệm. Nếu có thời hạn cho các hoạt động, thì bạn có thể cần phải ghi lại một số thay đổi để đảm bảo hệ thống phản hồi trong một khoảng thời gian thích hợp. Tôi nghĩ rằng tôi sẽ thực hiện chức năng trước và sau đó xác minh rằng bạn đang đáp ứng các yêu cầu ứng dụng khác của bạn. Tôi không thấy bạn gặp phải bất cứ điều gì sẽ làm mất hiệu lực những gì bạn đã mô tả cho đến nay.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.