Refactor something that 's not quite a Template pattern 2006-08-25 - By snekse
Back 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)
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 . <br><br><br> <span style="color: rgb(153, 51, 153); font-weight: bold;">public static</span> List fetchList_A(Session pSession) <br> throws HibernateException <br> {<br> String lListKey = <span style="color: rgb(51, 51, 255);">"LIST_A"</span>;<br > List lCacheList = (List) getObjectValueOrNull(<span style="color: rgb(51, 51, 255);">MISC_LISTS_CACHE< /span>
.get(lListKey));<br> <br>   ; <span style="font-weight: bold; color: rgb(153, 51, 153);" >if</span>(lCacheList==<span style="font-weight: bold; color: rgb(153, 51, 153); ">null</span>)<br> {<br> lCacheList = MiscCodeDao.fetchList_A(pSession);<br> MISC_LISTS_CACHE.put(<span style="font-weight: bold; color: rgb(153, 51, 153);">new</span> Element(lListKey,lCacheList));<br> }<br> <span style ="font-weight: bold; color: rgb(153, 51, 153);">
return</span> lCacheList;<br> }<br> <br> <span style="color: rgb(153, 51, 153); font-weight: bold;" >public static</span> List fetchList_B(Session pSession) <br> throws HibernateException<br> {<br> String lListKey = <span style="color: rgb(51, 51, 255);">"LIST_B"</span>;<br> List lCacheList = (List) getObjectValueOrNull( <span style="color: rgb(51, 51, 255);">MISC_LISTS_CACHE</span>.get(lListKey)); <br> <br> <span style="font-weight: bold; color: rgb(153, 51, 153);">if</span>(lCacheList ==<span style="font-weight: bold; color: rgb(153, 51, 153);">null</span>)<br> {<br> lCacheList = MiscCodeDao.fetchList_B(pSession); <br> MISC_LISTS_CACHE .put(<span style="font-weight: bold; color: rgb(153, 51, 153);">new</span> Element(lListKey,lCacheList));<br> }<br> <span style="font-weight: bold; color: rgb (153, 51, 153);">
return</span> lCacheList;<br> }<br><br>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") )<br> <br> Any thoughts?<br><br>Thanks,<br>snekse<br>
==================================================================== 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)
|
|