Trong đồ án này, tôi sử dụng một open source mà sử dụng các công nghệ trên đó là GWT-Platform được đăng kí trên Google code. Framework này áp dụng triệt để mô hình MVP bằng việc sử dụng lại mô hình GWT-Presenter đồng thời về phía server GAE, framework sử dụng Google-dispatch để mapping các action gọi từ web client thông qua servlet, Objectify-appengine để truy xuất vào database BigTable.
Việc xây dựng một chức năng được làm qua các bước sau, đúng với mô hình MVP đã nêu trên:
4.1. Presenter
Bạn có thể bắt đầu làm việc trên một Presenter. Tạo MainPagePresenter với PresenterImpl <MainPagePresenter.MyView, MainPagePresenter.MyProxy> như một superclass. Điều này có nghĩa bạn phải xác định các interface bên trong, cụ thể MyView và MyProxy:
public interface MyView extends View {}
public interface MyProxy extends Proxy<MainPagePresenter>, Place {} Tạo hàm khởi tạo với chú thích @Inject.
Bạn cũng cần phải xác định hàm revealInParent(). Hàm này sẽ được gọi đến khi bạn gọi đến Presenter này.
public class MainPagePresenter extends
PresenterImpl<MainPagePresenter.MyView, MainPagePresenter.MyProxy> { public interface MyView extends View {}
public interface MyProxy extends ProxyPlace<MainPagePresenter> {} @Inject
public MainPagePresenter(EventBus eventBus, MyView view, MyProxy proxy) { super(eventBus, view, proxy);
}
@Override
protected void revealInParent() {
RevealRootContentEvent.fire( eventBus, this ); }
}
4.2. View
Tạo mới class MainPageView implements từ MainPagePresenter.MyView. Đăng kí view với Google-gin bằng cách đánh dấu constructor của nó với chú thích @Inject.
4.3. Proxy
Đây là một chìa khóa cho việc dứt bỏ điểm yếu lớn nhất của AJAX trong việc giao tiếp với trình duyệt, việc sử dụng nút back mà người sử dụng vẫn quen dùng khi muốn quay lại trang trước đó hay hành động trước đó.
Tạo mới class MainPageProxy implements từ MainPagePresenter.MyProxy. Cần đánh dấu construtor với chú thích @ProxyStandard hoặc @ProxyCodeSplit để xác định xem muốn presenter và view sử dụng cách chia code nào. Để xác định vị trí của presenter, trên thanh địa chỉ, ta cần đánh dấu với annotation @Name Token(“main”).
4.4. Model
ở đây chúng ta dùng Gwt-dispatch, một servlet lắng nghe các lệnh gọi từ GWT RPC dựa trên regex.
Phía server, khi làm việc với GAE, chúng ta có thể sử dụng JDO hoặc JPA. Ở đây chúng ta sử dụng JPA kết hợp với một opensource Objectify-Appengine được đăng kí trên Google.
Phần II:Xây dựng hệ thống