  | Mailing List | | Home | | Forum Home | | JBoss - Java Application Server | | Tomcat - JSP/Servlet container | | Struts - A MVC web framework | | iText - An open source PDF Java Library | | JDOM - JDOM XML Parser | | JSP - A mailing list about Java Server Pages specification and reference | | J2EE - A mailing list for Java(tm) 2 Platform, Enterprise Edition | | J2EE Pattern - An interest list for Sun Java Center J2EE Pattern Catalog | | Servlet - A mailing list for discussion about Sun Microsystem's Java Servlet API Technology | |
Struts & Hibernate
|
|
|
  | | | Refactor something that 's not quite a Template pattern | Refactor something that 's not quite a Template pattern 2006-08-25 - By Dan Marchant
Back why don't you just do this:
public static List fetchList(String key, Session pSession) throws HibernateException { String lListKey = key; List lCacheList = (List) getObjectValueOrNull(MISC_LISTS_CACHE .get(lListKey));
if(lCacheList==null) { lCacheList = MiscCodeDao.fetchList_A(pSession); MISC_LISTS_CACHE.put(new Element(lListKey,lCacheList)); } return lCacheList; }
public static List fetchList_A(Session pSession) throws HibernateException { String lListKey = "LIST_A"; return fetchList(IListKey,pSession); }
public static List fetchList_B(Session pSession) throws HibernateException { String lListKey = "LIST_B"; return fetchList(IListKey,pSession); }
- dan
On 8/25/06, snekse <snekse@(protected)> wrote: > Can anyone point me to a good way to refactor this? Currently these two > methods do exactly the same thing, except they use a different param as the > obj key ( lListKey ) and if it's not found in the cache, they need to call > separate methods ( MiscCodeDao.fetch*(..) ) to retrieve the object so it can > put it into the cache. > > > public static List fetchList_A(Session pSession) > throws HibernateException > { > String lListKey = "LIST_A"; > List lCacheList = (List) getObjectValueOrNull(MISC_LISTS_CACHE > .get(lListKey)); > > if(lCacheList==null) > { > lCacheList = MiscCodeDao.fetchList_A(pSession); > MISC_LISTS_CACHE.put(new Element(lListKey,lCacheList)); > } > return lCacheList; > } > > public static List fetchList_B(Session pSession) > throws HibernateException > { > String lListKey = "LIST_B"; > List lCacheList = (List) > getObjectValueOrNull(MISC_LISTS_CACHE.get(lListKey)); > > if(lCacheList==null) > { > lCacheList = MiscCodeDao.fetchList_B(pSession); > MISC_LISTS_CACHE.put(new Element(lListKey,lCacheList)); > } > return lCacheList; > } > > The reason I want to refactor this is because we are going to have 10-20 > list stored in the cache. Here's the rub: I need to avoid hardcoding a > string for the method name (i.e. > invokeMethod("fetchList_A",MiscCodeDao.class, paramArray) ). We've found > issues with refactoring when the method names are hardcoded as a String > variable. If possible, I'd also like to avoid a switch as well (i.e. > fetchList("LIST_A") ) > > Any thoughts? > > Thanks, > snekse > ==================================================================== > Companion Site: http://www.corej2eepatterns.com J2EE BluePrints: > http://java.sun.com/blueprints/corej2eepatterns List > Archive: > http://archives.java.sun.com/archives/j2eepatterns-interest.html > Unsubscribing: email "signoff J2EEPATTERNS-INTEREST" to > listserv@(protected)
==================================================================== Companion Site: http://www.corej2eepatterns.com J2EE BluePrints: http://java.sun.com/blueprints/corej2eepatterns List Archive: http://archives.java.sun.com/archives/j2eepatterns-interest.html Unsubscribing: email "signoff J2EEPATTERNS-INTEREST" to listserv@(protected)
|
|
 |