2009-07-20 27 views
8

Tại nơi làm việc, chúng tôi có một khuôn khổ lớn và sử dụng các sự kiện để gửi dữ liệu từ một phần của nó đến một phần khác. Gần đây tôi đã bắt đầu một dự án personnal và tôi thường nghĩ đến việc sử dụng các sự kiện để kiểm soát sự tương tác của các đối tượng của tôi.Thời điểm sử dụng sự kiện?

Ví dụ, tôi có một lớp trộn có hiệu ứng âm thanh và ban đầu tôi nghĩ rằng tôi sẽ nhận được sự kiện để chơi hiệu ứng âm thanh. Sau đó, tôi quyết định chỉ tạo lớp tĩnh của mình và gọi số

Mixer.playSfx(SoundEffect) 

trong lớp học của mình. Tôi có một loạt các ví dụ như thế này, nơi tôi bước đầu nghĩ đến việc thực hiện với các sự kiện và sau đó thay đổi suy nghĩ của tôi, nói với bản thân mình rằng nó quá phức tạp không có gì.

Vì vậy, khi nào tôi nên sử dụng các sự kiện trong một dự án? Trong trường hợp các sự kiện có lợi thế nghiêm trọng so với các kỹ thuật khác?

Trả lời

11

Bạn thường sử dụng sự kiện để thông báo cho người đăng ký về một số thay đổi hành động hoặc trạng thái đã xảy ra trên đối tượng. Bằng cách sử dụng một sự kiện, bạn cho phép người đăng ký khác nhau phản ứng khác nhau và bằng cách tách người đăng ký (và logic của nó) khỏi trình tạo sự kiện, đối tượng sẽ trở thành có thể sử dụng lại được.

Trong ví dụ Mixer của bạn, tôi muốn các sự kiện báo hiệu sự bắt đầu và kết thúc phát của hiệu ứng âm thanh. Nếu tôi sử dụng tính năng này trong ứng dụng dành cho máy tính để bàn, tôi có thể sử dụng các sự kiện đó để bật/tắt các điều khiển trong giao diện người dùng.

4

Sự khác biệt giữa Việc gọi một chương trình con và sự kiện nâng cao phải thực hiện với: Đặc điểm kỹ thuật, Bầu cử, Cardinality và cuối cùng, bên nào, người khởi xướng hoặc người nhận có quyền Kiểm soát.

Với cuộc gọi, người khởi xướng bầu để gọi thường xuyên tiếp nhận, và người khởi xướng định người nhận. Và điều này dẫn đến số lượng thẻ nhiều đối một, vì nhiều người gọi có thể chọn gọi cùng một chương trình con.

Với sự kiện mặt khác, người khởi xướng sẽ đặt ra một sự kiện sẽ được nhận bởi những thói quen có được bầu để nhận sự kiện đó. Người nhận chỉ định những sự kiện nào họ sẽ nhận được từ những người khởi xướng. Điều này sau đó dẫn đến cardinality là một trong những nguồn sự kiện có thể có nhiều người nhận.

Vì vậy, quyết định về Cuộc gọi hoặc Sự kiện, chủ yếu là phải làm gì với việc người khởi tạo có xác định người nhận hay người nhận xác định người khởi xướng.

3

Sự cân bằng giữa tính đơn giản và khả năng sử dụng lại. Cho phép lấy một ẩn dụ về quy trình "Gửi email":

Nếu bạn biết người nhận và họ hữu hạn về số bạn luôn có thể xác định, đơn giản như đưa họ vào danh sách "Tới" và nhấn nút gửi. Nó đơn giản như thats những gì chúng tôi sử dụng hầu hết thời gian. Điều này đang gọi hàm trực tiếp.

Tuy nhiên, trong trường hợp danh sách gửi thư, bạn không biết trước số lượng người dùng sẽ đăng ký email của bạn. Trong trường hợp đó, bạn tạo một chương trình danh sách gửi thư nơi người dùng có thể đăng ký và email sẽ tự động được gửi đến tất cả người dùng đã đăng ký. Đây là mô hình sự kiện.

Bây giờ, mặc dù, trong cả hai tùy chọn ở trên, email được gửi đến người dùng, bạn là một thẩm phán tốt hơn về thời điểm gửi email trực tiếp và thời điểm sử dụng chương trình danh sách gửi thư.Áp dụng cùng một phán quyết, hy vọng rằng bạn sẽ nhận được câu trả lời của bạn :)

Chúc mừng,

Ajit.

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