我正在使用Spring和Hibernate进行JSF项目开发,其中有一些遵循相同模式的转换器
鉴于有许多与此完全相似的
一种可能的解决方案是:
1-编写通用实现,我们称之为
2-将特定的转换器编写为
在写这篇文章的时候,我意识到可能并不真正需要泛型,因此也许我可以只编写一个基类,并实现这两种方法,根据需要进行子类化。
有一些非平凡的细节需要处理(例如,我必须以某种方式抽象出“MyService”类),因此我的第一个问题是:值得吗?
如果值得,是否有其他方法?
Converter
:
getAsObject
接收对象ID的字符串表示形式,将其转换为数字,并获取给定种类和ID的实体getAsString
接收实体并返回将对象ID转换为String
后的结果。
@ManagedBean(name="myConverter")
@SessionScoped
public class MyConverter implements Converter {
private MyService myService;
/* ... */
@Override
public Object getAsObject(FacesContext facesContext, UIComponent uiComponent, String value) {
int id = Integer.parseInt(value);
return myService.getById(id);
}
@Override
public String getAsString(FacesContext facesContext, UIComponent uiComponent, Object value) {
return ((MyEntity)value).getId().toString();
}
}
鉴于有许多与此完全相似的
Converter
(当然,除了MyService
和MyEntity
的类型),我在思考是否值得使用单个通用转换器。 通用实现本身并不困难,但我不确定正确的声明Bean的方法。一种可能的解决方案是:
1-编写通用实现,我们称之为
MyGenericConverter
,没有任何Bean注释2-将特定的转换器编写为
MyGenericConverter<T>
的子类,并根据需要进行注释:@ManagedBean(name="myFooConverter")
@SessionScoped
public class MyFooConverter implements MyGenericConverter<Foo> {
/* ... */
}
在写这篇文章的时候,我意识到可能并不真正需要泛型,因此也许我可以只编写一个基类,并实现这两种方法,根据需要进行子类化。
有一些非平凡的细节需要处理(例如,我必须以某种方式抽象出“MyService”类),因此我的第一个问题是:值得吗?
如果值得,是否有其他方法?