Фло,
Не уверен, что вы вообще участвуете в волне Google, но, похоже, это одно место, где можно не отставать от текущих усилий. В частности, эта волна доступна для всех: RequestFactory Волна
Он охватывает детали (хорошо появляющиеся детали) об API RequestFactory.
Основная идея состоит в том, что объекты вашей модели предметной области необходимы как на стороне сервера, так и на стороне клиента. Использование гибернации может вызвать проблемы с файлами классов, и люди оказались с двумя наборами объектов модели и с использованием настраиваемого GWT-RPC для выполнения запросов к серверу и маршаллинга / отмены маршаллинга между объектами модели на стороне клиента и на стороне сервера. Не идеальное решение. Даже если вы можете использовать одни и те же объекты модели, накладные расходы на RPC - это перетаскивание.
Войдите в RequestFactory, и мы увидим, что инженеры Google, вероятно, получают столько, сколько они стоят. Взгляните на образец кода, сгенерированный из .roo, в частности ApplicationRequestFactory.java.
package com.springsource.extrack.gwt.request;
import com.google.gwt.requestfactory.shared.RequestFactory;
public interface ApplicationRequestFactory extends RequestFactory {
ReportRequest reportRequest();
ExpenseRequest expenseRequest();
EmployeeRequest employeeRequest();
}
Это интерфейс, который предоставляет методы запроса для каждого из объектов домена. В проекте не определена реализация этого класса. Он создается в EntryPoint с помощью вызова GWT.create (...):
final ApplicationRequestFactory requestFactory =
GWT.create(ApplicationRequestFactory.class);
requestFactory.init(eventBus);
Внутри пакета com.springsource.extrack.gwt.request
вы увидите ApplicationEntityTypesProcessor.java, который ловко использует универсальные шаблоны для упаковки ссылок на классы домена для использования позже в презентации. Остальная часть этого пакета - это события и обработчики для каждого объекта модели.
В частности, для каждого объекта существует четыре автоматически сгенерированных класса:
- EmployeeRecord.java - это DTO для объекта домена.
- EmployeeRecordChanged.java - это событие RecordChanged для предоставления метода перехвата onEmployeeChanged.
- EmployeeChangedHandler.java - это интерфейс, который будет реализован, когда потребуется определенное поведение для onEmployeeChanged.
- EmployeeRequest.java - это интерфейс, используемый ApplicationRequestFactory для упаковки различных методов доступа для данного объекта.
Имейте в виду, что за кулисами создается много кода для поддержки всего этого. И от M1 до M2 многое было очищено от того, что видно в проекте GWT. Я ожидал, что будет больше изменений, но не таких радикальных, как от M1 к M2.
Итак, наконец, эти события можно использовать, как в пакете пользовательского интерфейса, чтобы связать воедино домен и пользовательский интерфейс. ReportListActivity.java:
public void start(Display display) {
this.registration = eventBus.addHandler(ReportRecordChanged.TYPE, new ReportChangedHandler() {
public void onReportChanged(ReportRecordChanged event) {
update(event.getWriteOperation(), event.getRecord());
}
});
super.start(display);
}
Я снова отсылаю вас к волне для получения дополнительной информации. Кроме того, на сайте Funds.roo показано, как использовать Places, а также у него довольно удобная структура Activity. Счастливого GWTing.
С Уважением.
person
Jeff
schedule
21.07.2010