Posts Tagged ‘coldfusion’

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

January 8th, 2009

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 ได้ด้วยครับ

ColdSpring, IOC สำหรับ ColdFusion

January 8th, 2009

เพิ่งอ่านข่าวนี้จาก TheServerSide ครับ ต๊กก่ะใจเคยฮ่ะว่ามีคนเอาแนวคิดเรื่อง IOC หรือ DI ไปยัดใส่ ColdFusion ตัวผมเองไม่มีความรู้เรื่อง ColdFusion นะครับแต่ที่สำคัญคือขณะนี้แคินวคิดเดรื่อง IOC ได้รุกคืบไปทุกสารทิศแล้ว

รายละเอียดของเฟรมเวิร์คนี้สามารถอ่านได้ที่ ColdSpringFramework.org