GWT использует интерфейс вместо виджета - PullRequest
2 голосов
/ 05 июня 2010

в определении виджета, что является лучшей практикой и почему, используйте сам виджет или тип "выше", например, лучше сделать

1) Кнопка myButton; или же 2) Hastext myButton; (и установите кнопку позже)

спасибо за ваш ответ.

Ответы [ 2 ]

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

Обычно рекомендуется использовать «более высокие» типы или интерфейсы. Делая это правильно, вы можете скрыть детали реализации . Код, который использует объект, смотрит на него как на код более высокого типа, и не важно, что на самом деле скрывается за ним. Это хорошо, потому что вы можете легко изменить реализацию объекта, ничего не нарушая.

Например, при определении панели в приложении вы должны использовать класс Panel вместо его реализации, например. HorizontalPanel или VerticalPanel.:

Panel myPanel; 

Затем вы можете создать правильную реализацию, например, HorizontalPanel:

myPanel = new HorizontalPanel();

Если впоследствии вы решите изменить myPanel на VerticalPanel, вам не придется ничего менять в коде, который использует myPanel. Все будет работать просто отлично.

Однако вы должны помнить, что вы сможете использовать только методы, доступные в Panel классе. Дополнительные методы, определенные, например, в HorizontalPanel не будет доступно. И это на самом деле то, что вы должны помнить при выборе типа ваших виджетов. Ваши виджеты должны быть тех типов, которые предоставляют методы, которые вы хотите использовать.

В вашем примере использование HasText вместо Button, вероятно, не очень хорошая идея, поскольку HasText имеет только методы для установки и получения текста, и вы, вероятно, также хотите иметь доступ к методу addClickHandler, доступному в Button и еще несколько.

Итак, для подведения итогов полезно использовать «высшие типы», но они не должны быть «слишком высокими», чтобы быть полезными.

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

Ответ на этот вопрос лежит в паттерне Model-View-Presenter, который был представлен Рэйем Райаном в презентации Google IO последних лет. Есть также официальный учебник / документы - часть 1 и часть 2 . Здесь также есть несколько вопросов по SO, которые охватывают эту тему:)

И быстрый ответ на ваш вопрос (который станет более понятным, как только вы познакомитесь с MVP): используйте интерфейсы в Presenter и их реализации в View :) Таким образом, ваш Presenter будет оставаться в стороне от базовой реализации фактически использовался (это был Button? или Label? Неважно, они оба реализуют HasText).

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