Как обрабатывать экземпляры сервисов и событий в GWT MVP Architecture? - PullRequest
2 голосов
/ 28 июня 2010

Мы разрабатываем приложение с использованием шаблона MVP, как описано в этом руководстве:

http://code.google.com/webtoolkit/articles/mvp-architecture.html

При создании экземпляра контроллера мы делаем следующее:

appController = new AppController(service, eventBus);
appController.go(RootPanel.get("SOME_SLOT"));

Теперь, когда контроллер создает определенного докладчика, он делает что-то вроде этого:

sthPresenter = new SthPresenter(service, eventBus, new SthView());
sthPresenter.go();

Презентатор затем сохраняет eventBus и службу в частную переменную поля и использует их по мере необходимости.

По мере роста приложения у нас появляется все больше докладчиков и представлений, поэтому вопрос заключается в том, можем ли мы использовать другой метод получения службы и eventBus в презентаторах, не передавая ссылку через конструктор каждого докладчика.

Например, создание статического поля в контроллере и просто вызов его с помощью чего-то вроде AppController.getService (). Может быть шаблон синглтона.

Будет ли статическое поле в контроллере (или где-то еще) плохой идеей для этого проекта. Имейте в виду, что код скомпилирован в javascript, если это имеет какое-либо значение.

Ответы [ 3 ]

1 голос
/ 28 июня 2010

Я бы настоятельно рекомендовал внедрение зависимости (DI).Это позволяет избежать стандартного кода (синглтонов и т. Д.), Глобального состояния и в целом приводит к более тестируемому коду. Misko Hevery имеет несколько очень интересных постов, в том числе очень информативное руководство по написанию тестируемого кода .

Для DI в GWT вы должны использовать Gin - обертка вокруг популярного Guice DI framework .Я использовал его для довольно сложного проекта, и просто использование DI / Gin (и размышления о том, как его следует применять наиболее эффективно) определенно привело к более «чистому», тестируемому коду.

0 голосов
/ 28 июня 2010

Эта ситуация очень часто встречается в приложениях GWT MVP.В моем приложении я использую внедрение зависимостей (с GIN ), чтобы внедрить шину событий в докладчиков.Сами докладчики являются одиночками и могут быть с готовностью созданы в случае необходимости.Однако это значительно уменьшит масштабируемость вашего приложения, так как большое приложение потребует от вас создания экземпляров многих докладчиков, как только оно запускается.

Возможно, правильное решение проблемы самостоятельно.Я предлагаю вам взглянуть на платформу GWT-платформы , которая решает многие из более сложных проблем, связанных с приложением GWT MVP, включая ленивое создание экземпляров презентаторов и представлений, управление историей, эффективное разделение кода и т. Д..

0 голосов
/ 28 июня 2010

Используйте шаблон Singleton и Observer. Убедитесь, что вы используете только высокоуровневые события для своих уведомлений, в противном случае у вас будет кошмар.

Код, компилируемый в JavaScript, действительно прозрачен для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...