Качели и ленивые загрузки компонентов - PullRequest
3 голосов
/ 25 августа 2010

Я использовал плагин Eclipse Визуальный редактор для создания интерфейсов Java Swing. Поскольку я не большой поклонник кода, сгенерированного редакторами WYSIWYG (UI), я хотел оптимизировать его, когда заметил, что редактор реализовал все элементы с использованием отложенной загрузки следующим образом:

private JPanel getSomePanel ()
{
    if ( somePanel == null )
    {
        somePanel = new JPanel();
        // construct the panel
    }
    return somePanel;
}

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

В Visual Editor добавлен вызов initialize в конструкторе корневого контейнера, в котором создается корневая панель и добавляются все остальные элементы (с помощью отложенной загрузки). Таким образом, на самом деле все компоненты создаются прямо при создании корневого контейнера, просто вкладываются в несколько методов.

Есть ли какая-то польза от ленивой загрузки в этом случае? В каких случаях пользовательского интерфейса я должен использовать ленивую загрузку? И когда я использую отложенную загрузку, мне даже разрешено напрямую обращаться к переменным-членам или я должен каждый раз вызывать метод получения?

Спасибо!

Ответы [ 2 ]

5 голосов
/ 25 августа 2010

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

Однако в данном случае, как вы описали, нет смысла использовать отложенную загрузку. Я должен задаться вопросом, не был ли у автора Visual Editor какой-то вещи для отложенной загрузки, где он чувствовал, что ее всегда нужно использовать, или просто решил, что он хочет использовать ее в инструменте по какой-то произвольной причине.

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

Очевидно, что происходит нечто иное, когда вы говорите о загрузке данных. Если у вас есть раскрывающийся список, который скрывается, когда панель появляется, и в нем много информации, если она загружена, вы можете не загружать раскрывающийся список, пока он не станет видимым. Я до сих пор не вижу причин не создавать экземпляр раскрывающегося списка сразу, хотя он и скрыт.

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

3 голосов
/ 25 августа 2010

Я не большой поклонник кода, который генерируют редакторы WYSIWYG (UI)загрузка в этом случае?

Я так не думаю, создание компонента не занимает много времени, поэтому все компоненты должны быть видны при отображении графического интерфейса.

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

...