Mã nào của mùi nào có mùi của vùng đó là một triệu chứng mà một mô hình người nghe sự kiện được yêu cầu?


10

Các triệu chứng trong một cơ sở mã chỉ ra rằng một cách tiếp cận người nghe sự kiện là cần thiết?

Dường như với tôi rằng khi có nhiều lớp cần được gọi bằng nhiều lớp, không được xác định tại tập hợp thời gian thiết kế của các lớp khác, bạn cần một số khung báo hiệu, nhưng tôi muốn nghe những tình huống khác sẽ xảy ra ở đó cải thiện bằng cách thay đổi thành một mô hình dựa trên sự kiện.

Câu trả lời:


8

Aproach của Event / Listener cố gắng tránh khớp nối chặt chẽ , vì vậy tất cả các mã có mùi chỉ ra rằng, sẽ trỏ đến appoach.

Dựa vào đó, tôi sẽ đề xuất các triệu chứng sau:

  • các nhà xây dựng lớn , vì mọi đối tượng cần biết mọi đối tượng khác và không thể hoạt động mà không có. Có thể ngụy trang như nhiều người obj.set_dependecy(x)ngay sau cuộc gọi của nhà xây dựng.

  • phụ thuộc hai chiều , bởi vì, không có sự kiện, trong một ngôn ngữ bắt buộc, luồng thông tin về cơ bản là 'đẩy' (gọi phương thức của ai đó)

  • "Hệ thống kiến ​​thức" rất khó xác định . Đây là sự phụ thuộc hai chiều , chỉ là một trọng tâm khác: nếu có A, nghe B, A biết về B, nhưng B không thuộc về A, vì vậy có một 'hierachy': một số đối tượng không biết gì, một số đối tượng khác biết , v.v. Ví dụ: khi triển khai MVC như thế này: http://en.wikipedia.org/wiki/Model_View_Cont kiểm , mô hình chỉ biết chính nó, khung nhìn biết mô hình và trình điều khiển biết khung nhìn và mô hình.


1
Cho đến nay, sự phụ thuộc hai chiều là dấu hiệu rõ ràng nhất mà bạn cần chuyển sang mô hình hướng sự kiện. Sự phình to của nhà xây dựng có thể có nghĩa như vậy, nhưng thường xuyên hơn không chỉ có nghĩa là bạn cần phải làm nhiều hơn theo cách tổng hợp, thành phần và / hoặc trừu tượng hóa chung (nghĩa là tái cấu trúc, không thay đổi thiết kế).
Aaronaught

Bạn đúng. Tôi đã cố gắng đặt hàng nó bởi sự dễ dàng phát hiện, và các nhà xây dựng lớn rất đơn giản, chúng có thể bị bắt bởi các biểu thức thông thường.
keppla

6

Khi bạn không thể hoặc không nên biết điều gì sẽ phản ứng với một tập hợp các thông điệp / tín hiệu / sự kiện.

Thường thì đó là khi bạn muốn "thế giới" biết về một thứ gì đó trong một mô-đun (một lớp hoặc một hệ thống các lớp) nhưng bạn không muốn bận tâm về những gì được gọi.

Cụ thể, mùi mã liên quan là khi bạn cảm thấy rằng bạn bắt đầu trộn mã từ các mô-đun độc lập, người ta làm điều gì đó mà người kia nên phản ứng. Khi bạn thấy rằng bạn phải gọi mã từ mô-đun B tùy thuộc vào trạng thái / sự kiện của mô-đun A, bạn cần người nghe sự kiện.


3

Tôi sẽ thay đổi câu hỏi của bạn và nói: khi một sự kiện dựa trên không phải là giải pháp phù hợp cho một ứng dụng hướng đối tượng? Tôi nghĩ rằng hầu hết các ứng dụng OO có thể có lợi nếu chúng được thiết kế như nhà sản xuất sự kiện và người tiêu dùng.

Cuối cùng, một "cuộc gọi phương thức" trên thực tế là một thông điệp đến một đối tượng và đối tượng chịu trách nhiệm quyết định liệu nó có thực hiện điều gì với thông điệp đó hay không và thực hiện thao tác. Điều này không rõ ràng lắm trong các ngôn ngữ được gõ mạnh như Java, nhưng nó trở nên rõ ràng hơn trong các ngôn ngữ động như Ruby.

Một điểm thú vị khác của việc thiết kế một ứng dụng dựa trên sự kiện là thông thường các thành phần bên trong phải được cách ly và kết hợp chính xác, nếu không, mã sẽ trở thành một mớ hỗn độn rất, rất nhanh. Ví dụ, tôi thực sự thích khái niệm Kiến trúc lục giác được sử dụng bởi Alistair Cockburn, vì thông thường mẫu này tạo ra sự đóng gói tốt hơn và lực lượng (theo quan điểm của tôi) các thành phần gắn kết hơn.

Tôi nghĩ (nhưng có lẽ tôi đã sai) rằng điều này cũng liên quan đến khái niệm Thiết kế hướng miền của các sự kiện miền , trong đó các lớp miền phát ra các sự kiện được bắt bởi các đối tượng khác và các đối tượng này phát ra các sự kiện khác (bạn thấy ở đâu đây là: D). Những gì tôi thích về mẫu này là nói rằng các giao diện nên mô hình Vai trò, không phải triển khai.

Xin lỗi nếu tôi không có ý nghĩa nhiều, tôi đã thử nghiệm các mẫu này trong vài tháng qua với kết quả tuyệt vời, nhưng tôi vẫn đang cố gắng để hiểu các khái niệm và khoảng cách chúng đạt được.


2

Hãy suy nghĩ về những gì bạn phải làm nếu người nghe sự kiện (còn gọi là Mẫu quan sát viên) không tồn tại.

Nếu bạn có một đối tượng có tham chiếu đến danh sách các đối tượng khác và gọi một phương thức trên chúng tại một điểm nhất định trong quy trình, bạn chắc chắn nên có một sự kiện ở đó.

Nếu bạn có một lá cờ trên một đối tượng để nói rằng một cái gì đó đã được thực hiện và bạn đang xem lá cờ đó từ các đối tượng khác, bạn chắc chắn nên sử dụng một mô hình hướng sự kiện.

Tuy nhiên, đừng nhầm lẫn điều này với một cuộc gọi lại. Nếu bạn gọi một phương thức trên một đối tượng khác và truyền cho nó một phương thức trên đối tượng khởi tạo để gọi lại tại một thời điểm nhất định, bạn nên để nó theo cách đó, thay vì sử dụng một trình lắng nghe sự kiện.

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.