Утилита JSF - PullRequest
       6

Утилита JSF

4 голосов
/ 04 мая 2011

Что вы думаете о лучшем способе реализации служебных методов управляемых компонентов JSF 2.0, таких как:

public FacesContext getFacesContext() {
    return FacesContext.getCurrentInstance();
}

public Flash getFlash() {
    return getFacesContext().getExternalContext().getFlash();
}

public void addMessage(String clientId, String message) {
    FacesMessage facesMessage = new FacesMessage(FacesMessage.SEVERITY_INFO, message,
    message);
    getFacesContext().addMessage(clientId, facesMessage);        
}

Я думаю, что это либо абстрактный класс, либо обычный класс со статическими методами.

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

Меня интересует лучший дизайн ОО и наименьшая нагрузка на сервер.Спасибо

Ответы [ 2 ]

2 голосов
/ 04 мая 2011

Насколько я понимаю, объект, являющийся результатом расширения классов, потребляет больше памяти

Это не правда. Только государство потребляет больше памяти. Эти методы не имеют / не используют дополнительное состояние - именно поэтому вы можете сделать их static, не беспокоясь о проблемах безопасности потоков.

И да, вы видите, что это действительно решается двумя основными способами:

  1. Поместите их в abstract class, который позволяет расширять все управляемые bean-компоненты.

    public class Bean extends BaseBean {
        public void submit() {
            addInfoMessage("Submit successful");
        }
    }
    
  2. Поместите их в служебный класс, который вы в конечном итоге сможете импортировать с помощью import static (нет, не путайте его с одноэлементным, поскольку у синглтона есть состояние, а у вспомогательного класса нет).

    public class Bean {
        public void submit() {
            Jsf.addInfoMessage("Submit successful");
        }
    }
    

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

2 голосов
/ 04 мая 2011

Я не думаю, что вы должны быть слишком обеспокоены дополнительным воздействием на производительность суперкласса с JSF 2.0. В моем проекте мы создали абстрактный базовый класс, который расширяет все «базовые компоненты», которые действуют как контроллер. Методы похожи на то, что вы добавили, и включают другие. Лично я бы пошел на подход абстрактного базового класса, например. назовите его GenericBean или GenericPageCode, и отношения IS-A сохраняются. Я предполагаю, что один потенциальный недостаток заключается в том, что этот абстрактный базовый класс будет частью структуры, и все его реализации будут чувствительны к изменениям в нем ... но это должно быть просто прекрасно, так как методы в базовом классе вряд ли часто меняются и ломают конкретные реализации.

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

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