2009-08-26 37 views
8

Tôi muốn phát hành một loạt lệnh Thực thi, nhưng chỉ khi lệnh trước đã thành công. Ngay bây giờ tôi đang nâng cao một sự kiện trong đối tượng lệnh cho biết lệnh đã thành công hay thất bại. Tôi đang sử dụng điều này để kiểm soát việc thực hiện, nhưng nó cảm thấy không phù hợp.Mẫu lệnh: Thực hiện nhiều lệnh theo thứ tự

Ví dụ:

command1.CommandSucceeded += delegate { command2.Execute(); }; 
command1.Execute(); 

này hoạt động, nhưng nó cảm thấy vụng về và unintuitive. Tôi có thể vượt qua một boolean trở lại trên Execute() cho thấy thành công hay thất bại, nhưng đó là dọc theo cùng một con đường. Tôi có thể ném ngoại lệ về thất bại, điều này có thể dẫn đến mã sạch hơn, nhưng có thể quá mức cần thiết.

Mọi đề xuất?

Trả lời

7

Tôi đã giải quyết vấn đề này bằng cách thiết lập lệnh "chuỗi". Tôi đã tạo ra một đối tượng Command chứa các lệnh khác, sau đó kích hoạt từng lệnh một khi Do được gọi. Trong trường hợp của bạn, bạn có thể có lệnh gọi đại biểu và chỉ kích hoạt lệnh tiếp theo trong chuỗi nếu nó thành công.

Một cách để làm điều đó, tôi cho là vậy.

+3

Có chuỗi mô hình trách nhiệm là hữu ích ở đây. – pjp

+1

Không biết nó được gọi là. Cảm ơn bạn về thông tin. –

+0

Chuỗi mô hình trách nhiệm có vẻ phù hợp. Cảm ơn vì sự trả lời. – Josh

1

Trả về một boolean hoặc một đối tượng đại diện cho một số trạng thái không phải là xấu. Nó có thể cảm thấy vụng về, nhưng nó đơn giản và rõ ràng.

Một triển khai tôi sử dụng là một cái gì đó như thế này:

Đầu tiên tôi thêm các đối tượng Command vào danh sách.

List<ICommand> commands = new List<ICommand>; 
commands.Add(command1); 
commands.Add(command2); 

Sau đó, danh sách các đối tượng lệnh được thực thi như thế này:

foreach (ICommand command in commands) 
{ 
    bool success = command.Execute(); 
    if (!success) break; 
} 
Các vấn đề liên quan