<$BlogRSDUrl$>

Wednesday, May 11, 2005

Tambahan Spring

OK, version kedua utk class ServiceProviderFactory:

package org.company;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class ServiceProviderFactory
{
private static final String[] ZONES = new String[] {"poslajuZone", "fedexZone", "tntZone"};
private static final String[] RATES = new String[] {"poslajuRates", "fedexRates", "tntRates"};

private static ApplicationContext context = new ClassPathXmlApplicationContext("appsContext.xml");

public static ISPZone getSPZone(PriceCriteriaData pcd)
{
return (ISPZone)context.getBean(ZONES[pcd.getServiceProviderType()-1]);
}

public static ISPRates getSPRates(PriceCriteriaData pcd)
{
return (ISPRates)context.getBean(RATES[pcd.getServiceProviderType()-1]);
}
}


Class di atas dah lebih ringkas dan kemas. Apa2 penambahan jenis class ISPZone dan ISPRates hanya akan menambah kat constant ZONES dan RATES shj (selain penambahan kat class PriceCriteriaData utk tambah constantnya dan file appsContext).

Saya merasakan cara ini lebih kemas krn class factory ini semamangnya mempunyai coupling dgn id dlm file appsContext.xml. Jadi, id-id ini tak leh dibuang. Instead of ia bercampur dgn code if - else, dgn meletakkan ia dlm constant class ini, coupling masa sama, tapi code lebih kemas. Itu aje la reasoning saya. Boleh terima???


Tambahan lagi

OpenLDAP

ApacheDS dan perbincangan tentangnya kat theserverside.


Tambahan Spring

Perrgghh!! Massive betul penambahan kpd Spring. Banyak betul yg dah diintegratekan dgnnya. Jenuh nak baca dan mencuba setiap satu. Spring ni macam runaway train. Boleh kejar ke ni...?


Macam2

P2P RMI

SwingX: Consider JXHyperlink As An Alternative To Buttons

Spring Web Flow

Buku Spring Live dgn sample chapter yg menarik tentang Spring, Hibernate dan Struts.

Spring Framework 1.1.5 sekarang dah mempunyai support yg agak baik utk AspectJ! Best! Dan mereka akan tambah support dlm Spring ver 1.2 yg sedang dibuat sekarang. Semakin best! :D


Spring, percubaan pertama

Setelah begitu lama menangguh, akhirnya saya mencuba juga, menggunakan Spring IoC. Percubaan saya ialah terhadap satu class Factory yg memulangkan class utk cari zon dan harga.

Kelas asal berwajah spt berikut:

package org.company;

public class ServiceProviderFactory
{
public static ISPZone getSPZone(PriceCriteriaData pcd)
{
if (pcd.getServiceProviderType() == PriceCriteriaData.TNT)
return new TntZone();
else if (pcd.getServiceProviderType() == PriceCriteriaData.POSLAJU)
return new PosLajuZone();
return null;
}

public static ISPRates getSPRates(PriceCriteriaData pcd)
{
if (pcd.getServiceProviderType() == PriceCriteriaData.TNT)
return new TntRates();
else if (pcd.getServiceProviderType() == PriceCriteriaData.POSLAJU)
return new PosLajuRates();
return null;
}
}



Selepas dimasukkan Spring IoC ke dlm class ini, rupanya begini plak:

package org.company;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class ServiceProviderFactory
{
private static ApplicationContext context = new ClassPathXmlApplicationContext("appsContext.xml");

public static ISPZone getSPZone(PriceCriteriaData pcd)
{
if (pcd.getServiceProviderType() == PriceCriteriaData.FEDEX)
return (ISPZone)context.getBean("fedexZone");
else if (pcd.getServiceProviderType() == PriceCriteriaData.TNT)
return (ISPZone)context.getBean("tntZone");
else if (pcd.getServiceProviderType() == PriceCriteriaData.POSLAJU)
return (ISPZone)context.getBean("poslajuZone");
return null;
}

public static ISPRates getSPRates(PriceCriteriaData pcd)
{
if (pcd.getServiceProviderType() == PriceCriteriaData.FEDEX)
return (ISPRates)context.getBean("fedexRates");
else if (pcd.getServiceProviderType() == PriceCriteriaData.TNT)
return (ISPRates)context.getBean("tntRates");
else if (pcd.getServiceProviderType() == PriceCriteriaData.POSLAJU)
return (ISPRates)context.getBean("poslajuRates");
return null;
}
}


File appsContext.xml plak berada dlm web-inf/classes:
<beans>
<bean id="tntZone" class="org.company.TntZone"/>
<bean id="poslajuZone" class="org.company.PosLajuZone"/>
<bean id="tntRates" class="org.company.TntRates"/>
<bean id="poslajuRates" class="org.company.PosLajuRates"/>
</beans>


Tak nampak banyak beza. Tapi, ada 1 cara mudah utk perkemaskan code ini. Bersambung...

Comments:
OK gak kalau nak guna properties. Saya berminat nak guna gabungan ApplicationContext dan properties file, macam cara nak "externalizing the conifguration", seksyen 2.4.3 tu. Ini krn rasanya, banyak gak keadaan yg memerlukan properties file instead of semuanya dlm spring appsContext file spt hibernate nak auto create table memerlukan properties file yg ada settings utk connect ke db.

Tapi belum sempat2 mencari cara camna.
 
Post a Comment

This page is powered by Blogger. Isn't yours?