Giới thiệu nhỏ:Lập trình và giao dịch hướng đối tượng
Lớp chứa các trường và phương thức (để tôi bỏ qua thuộc tính lần này).
Các trường đại diện cho trạng thái của lớp học.
Phương pháp mô tả hành vi của lớp học.
Trong một lớp được thiết kế tốt, một phương pháp sẽ không thay đổi trạng thái của lớp nếu nó ném một ngoại lệ, phải không? (Nói cách khác, bất cứ điều gì xảy ra, tình trạng lớp của nên không bị hỏng)
Câu hỏi:
Có một khuôn khổ, một mẫu thiết kế, thực hành tốt nhất hoặc một ngôn ngữ lập trình để gọi một chuỗi các phương pháp trong một giao dịch phong cách, để trạng thái của một trong hai lớp không được thay đổi (trong trường hợp ngoại lệ), hoặc mọi thứ thành công?
ví dụ .:
// the class foo is now in the state S1
foo.MoveToState2();
// it is now (supposed to be) in the state S2
foo.MoveToFinalState();
// it is now (supposed to be) in the state, namely, S3
Chắc chắn, một ngoại lệ có thể xảy ra cả trong MoveToState2()
và MoveToFinalState()
. Nhưng từ khối mã này tôi muốn lớp foo
ở trạng thái S1 hoặc S3.
Đây là một kịch bản đơn giản với một lớp duy nhất liên quan, không có if
's, không có while
' s, không có tác dụng phụ, nhưng tôi hy vọng ý tưởng là rõ ràng.
Như tôi đã nói trong bài đăng của tôi, các vật lưu niệm được sử dụng nhiều hơn trong môi trường gui, cho sự kiên trì và hoàn tác/làm lại. Mặc dù khái niệm cơ bản là như nhau (tạo một lớp khác đại diện cho trạng thái), bạn không nên chuyển tiếp sang trạng thái mới cho đến khi nó hoàn toàn an toàn để làm như vậy. Điều đó gợi ý để cố gắng tạo ra trạng thái mới, và chỉ khi bước này thành công, thay đổi trạng thái trong trạng thái mới. – fabrizioM