您认为实现 JSF 2.0 托管 Bean 实用程序方法的最佳方式如何,例如:
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);
}
Run Code Online (Sandbox Code Playgroud)
我正在考虑作为抽象类或具有静态方法的普通类。
我的理解是,扩展类产生的对象将消耗更多内存,但大多数(几乎全部)都是请求范围的,因此一旦呈现响应就可以进行垃圾回收。
我对最好的面向对象设计和对服务器负担最小的设计感兴趣。谢谢
我的理解是,扩展类产生的对象会消耗更多内存
这不是真的。只有状态消耗更多的内存。这些方法没有/使用额外的状态 - 这正是您可以创建它们static而不用担心线程安全问题的原因。
是的,您会看到这个问题确实通过两种主要方式得到解决:
将它们放在一个abstract class让所有托管 bean 扩展的地方。
public class Bean extends BaseBean {
public void submit() {
addInfoMessage("Submit successful");
}
}
Run Code Online (Sandbox Code Playgroud)将它们放入最终可以导入的实用程序类中import static(不,不要将其与单例混淆,因为单例有状态,但实用程序类没有)。
public class Bean {
public void submit() {
Jsf.addInfoMessage("Submit successful");
}
}
Run Code Online (Sandbox Code Playgroud)两者都是可以接受的,主要区别只是抽象类方式更容易通过测试框架进行模拟/测试,可能这是严格的业务需求。
| 归档时间: |
|
| 查看次数: |
1791 次 |
| 最近记录: |