2013-02-12 20 views
6

Tôi đang tạo một ứng dụng giống MVP trong GWT.Động lực cho Xe buýt Sự kiện trong GWT

  • Có nhiều bảng và mỗi bảng hiển thị mọi lúc.
  • Mỗi bảng có Trình bày và có một AppController duy nhất nằm phía trên tất cả Người trình bày.
  • Có một số sự kiện cấp ứng dụng phát sinh trong một Người thuyết trình nhưng có ý nghĩa đối với những Người thuyết trình khác.
  • Kiến trúc được đề xuất cho điều này dường như liên quan đến Xe buýt sự kiện. Tuy nhiên, tôi không chắc chắn tôi thấy lợi thế hơn một cái gì đó đơn giản hơn.
  • Đặc biệt, sẽ không đơn giản hơn nếu chỉ cho phép AppController (và chỉ AppController) đăng ký các sự kiện từ bất kỳ Người trình bày nào? AppController sau đó có thể nói cho mỗi Presenter biết phải làm gì, cho sự kiện này.
  • "Xe buýt sự kiện" có vẻ giống như một biến gần như toàn cầu. Nhưng nếu bạn có thể thực hiện điều tương tự với các phương thức được xác định chính xác hơn (tức là các phương thức mà AppController gọi trên mỗi Trình dẫn) không phải là thích hợp hơn?

Để đặt mối quan tâm của tôi chính xác hơn: tại sao lại giới thiệu Bus sự kiện, thay vì chỉ đơn giản là để sự kiện "bong bóng" lên cấp quyết định phù hợp? Với tôi, điều này có vẻ giống như phần mở rộng đơn giản nhất của khái niệm MVP, và nó không đòi hỏi ý tưởng mới của một Event Bus. Tôi không hiểu vấn đề Bus sự kiện đã được giới thiệu để giải quyết.

+0

Tôi đã tìm thấy tài liệu GWT cho MVP khó hiểu. Bạn có thể tìm thấy ở đây - https://developers.google.com/web-toolkit/articles/mvp-architecture – SSR

+0

SSR - Cảm ơn. Tôi đã đọc tài liệu này nhưng, thật thú vị, không có động lực thực sự nào được đưa ra cho xe buýt sự kiện trong tài liệu đó.Nó chỉ nói "bạn sẽ muốn dựa vào một Event Bus" mà không thực sự làm rõ mọi thứ. –

Trả lời

8

Ưu điểm của bus sự kiện là tách mã.

Bạn chỉ có thể kích hoạt sự kiện tùy chỉnh lên xe buýt và không cần quan tâm đến sự kiện của mình nữa. Mọi người trình bày chỉ đăng ký các sự kiện mà họ thực sự cần biết. Điều này sẽ dẫn đến mã sạch hơn bởi vì, bạn không cần phải tạo ra một điều phối viên mà phải biết tất cả người trình bày để đại biểu các sự kiện cho họ.

Theo tôi, eventbus là một điều thực sự tốt, để làm cho mã sạch sẽ và dễ hiểu.

+0

Cảm ơn bạn đã trả lời. Khi bạn nói cách khác là "tạo điều phối viên", tôi không rõ về những gì bạn đang đề cập đến. Bạn có nghĩa là một điều phối viên bên trong mỗi Người thuyết trình, mà phải biết về tất cả những người thuyết trình khác (đã đăng ký)? Tôi đồng ý rằng âm thanh xấu. Thay vào đó, điều tôi muốn nói là AppController nhận các sự kiện ứng dụng và sau đó chỉ đơn giản là nói cho người thuyết trình biết ** những điều ** (sử dụng các phương thức công khai được định nghĩa trong trình bày). Trong chương trình này, các thuyết trình viên không nghe các sự kiện từ các diễn giả khác. Xin lỗi nếu tôi thiếu điều gì đó ... –

+1

Cách tiếp cận này sẽ hiệu quả, nếu bạn chỉ có một vài người trình bày. Nhưng nếu bạn nghĩ ở quy mô lớn hơn, hãy nói hơn 20 - 100 người trình bày, bạn sẽ phải có nhiều logic trong AppController đơn này. Trong thực tế, lớp đơn này cần phải biết tất cả người trình bày và phải gửi các sự kiện ở đó. Nếu bạn thêm một sự kiện tùy chỉnh vào một người trình bày, bạn cũng sẽ phải cập nhật AppController của mình. –

+0

OK, điều này nghe có vẻ giống như một lý do khá tốt. Cảm ơn bạn đã làm rõ. –

3

Cách tiếp cận được đề xuất của bạn là tốt, với một hạn chế lớn: nó kêu gọi mã spaghetti khi ứng dụng của bạn phát triển.

This presentation là về Android nhưng các đối số cũng giữ cho GWT.

Xem thêm this famous presentation từ Google I/O 2009 mà nói một cách rõ ràng về Sử dụng một Bus tổ chức sự kiện để chiến đấu mì spaghetti đang (một -phải xem nếu bạn chưa có).

Cuối cùng, this blog post giao dịch với các quan sát viên vs hòa giải mẫu trong JS: trong GWT, mô hình quan sát được thực hiện bởi bộ xử lý sự kiện trong khi mô hình hòa giải được thực hiện bởi các xe buýt sự kiện. Dưới đây là tl; dr: «sử dụng người quan sát" cục bộ ", bên trong một thành phần, người hòa giải" từ xa "giữa các thành phần. »

+0

Cảm ơn, điều này rất hữu ích. Tuy nhiên, ít nhất là trong phiên bản PDF của bản trình bày Google I/O (tôi ở Ethiopia nên tôi không có băng thông để xem video), có vẻ như sự thay thế được mô tả cho Event Bus là người trình bày trực tiếp-to- truyền thông của người thuyết trình, mà tôi đồng ý trở thành giống như mì spaghetti. Những gì tôi đang cố gắng mô tả là không hoàn toàn - thay vào đó là một tình huống mà vẫn còn là "người hòa giải" hoặc "người môi giới" để ẩn người thuyết trình với nhau, nhưng người hòa giải đó là một phần của logic (AppController) "trên đầu" của tất cả các diễn giả. –