ColdSpring, IOC สำหรับ ColdFusion ขยายความ

January 8th, 2009 by Weerasak Chongnguluam Leave a reply »

ColdSpring ก็ได้แรงบัลดาลใจมาจาก Spring นั่นเองครับ วิธีการใช้ก็แถบเรียกได้ว่าลอกมาเช่นกัน คือใช้ xml ในการ config bean

เดี๋ยวผมจะเอาตัวอย่าง MovieLister ใน post นี้   Inversion Of Control และ Dependency Injection มาเขียนในแบบ coldfusion

ใน coldfusion ถ้าเราจะเขียนในลักษณะ oop คือมีการสร้างคลาส มีการสร้าง object นั้น จะสร้างได้โดยไปเขียน coldfusion component ซึ่งก็ concept เดียวกันกับ class นั่นเองครับ คือมี properties มี method (หรือ function) ประกาศไว้ ให้เราไป createObject ขึ้นมาเรียกใช้งานได้
ตัวอย่าง component MovieLister (MovieLister.cfc)


<cfcomponent>
    <cffunction name="setFinder">
        <cfargument name="finder" require="true" />
        <cfset variables.finder = arguments.finder />
    </cffunction>

    <cffunction name="getFinder" >
        <cfreturn variables.finder />
    </cffunction>

    <cffunction name="moviesDirectedBy" >
        <cfargument name="arg" require="true" />
        <cfset var allMovies = variables.finder.findAll() / >
        <cfset var findResult = ArrayNew(1) / >
        <cfset var movie = "" / >
        <cfset var i = "" / >
        <cfloop from="1" to="#ArrayLen(allMovies)#" index="i" >
            <cfset movie = allMovies[i] / >
            <cfif movie.getDirector() eq arguments.arg >
                <cfset arrayAppend(findResult,movie) / >
            </cfif>
        </cfloop>
        <cfreturn findResult />
    </cffunction>
</cfcomponent>

และ สมมุติมี component ColonMovieFinder ที่มีฟังก์ชัน findAll อยู่

<cfcomponent>
    <cffunction name="setFilename" >
        <cfargument name="fileName" require="true" >
        <cfset variables.fileName = arguments.fileName >
    </cffunction>
    <cffunction name="findAll">
        ...
    </cffunction>
</cfcomponent>

ส่วนการ config นั้นใช้ xml เหมือน spring (ลอกมาเลย)

<beans>
        <bean id="MovieLister" class="spring.MovieLister">
            <property name="finder">
                <ref bean="MovieFinder"/>
            </property>
        </bean>
        <bean id="MovieFinder" class="spring.ColonMovieFinder">
            <property name="filename">
                <value>movies1.txt</value>
            </property>
        </bean>
</beans>

เวลาเอาไปใช้ก็แบบนี้

<cfset coldspringConfig = '/coldspring/examples/quickstart/config/coldspring.xml' />
<cfset beanFactory = CreateObject('component', 'coldspring.beans.DefaultXmlBeanFactory').init() />
<cfset beanFactory.loadBeans(coldspringConfig) />

<cfset lister = beanFactory.getBean('MovieLister')>
<cfset movies = lister.moviesDirectedBy('Sergio Leone') >

ประมาณนี้ครับ นอกจากนั้น coldspring ยังช่วยให้เขียนแบบ AOP ด้วย coldfusion ก็ได้ด้วย แล้วก็ ใช้จัดการกับ Remote Component ได้ด้วยครับ

Advertisement

1 comment

  1. admin says:

    ว๊าก ตัวอย่างสุดเทพ น้องป้อ ขอบคุณครับ

Leave a Reply

You must be logged in to post a comment.