ผมเขียน Web application แบบ MVC อยู่หลาย project แต่ว่าในหลายๆ project นั้น ก็ดันต้องใช้ controller และ model ร่วมกัน ที่เห็นเป็นสีเขียนใน diagram ข้างล่างนี่เอง. ถ้าเอาตัวอย่างจริงๆ controller กับ model ที่ว่าก็คือ Yaitron dictionary นี่เอง. มี code ที่ใช้ JPA เขียนสำหรับ query database แล้วทำ DAO มาครอบอีกที ให้ query แบบ abstract ขึ้นหน่อย.
ท่าเดิมที่ผมเคยใช้ก็คือแค่ copy & paste โปรแกรมส่วน controller กับ model ไปวางในอีก project แล้ว แก้ไข้ configuration ของ dependency injection หน่อย ไม่ว่าจะเป็น Spring หรือ Tapestry-IOC ก็ตาม. ก็เป็นอันใช้ได้. แต่พอแก้ทีก็ต้องเอามาปะใหม่เหนื่อยเหมือนกัน. :-P
ท่าแก้ท่านึงที่ทำได้คือ แยก controller กับ model ที่ว่าไปไว้อีก package เลย. เวลาจะใช้ก็แค่ copy jar เข้ามา หรือว่าแก้ dependency ใน pom.xml. แต่ว่าก็ยังมีปัญหาว่าต้องมาแก้ configuration ของ dependency inject เองอยู่ดี.
หลังจากเล่น Tapestry 5 ไปสักพักก็พบว่ามีท่าแก้ ที่ลอกเลียนมากจาก tapestry-hibernate. เราสามารถไปเขียน configuration แยกไว้ต่างหาก. แล้วบอกให้ Tapestry-IOC ไปอ่าน configuration หลายอันได้. เพื่อความเท่ยิ่งๆ ขึ้นไป เราสามารถเขียนบอกไว้ใน MANIFEST.MF เลยว่าต้องการให้ Tapestry ไป load configuration ไหนขึ้นมาบ้าง. และเท่ขึ้นไปอีกเราก็จะไปเขียนไว้ใน pom.xml.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifestEntries>
<Tapestry-Module-Classes>
org.kunyit.yaitron.services.YaitronModule
</Tapestry-Module-Classes>
</manifestEntries>
</archive>
</configuration>
</plugin>
พอทำแบบนี้แล้ว เวลาเรา include jar ของเราไปใน Tapestry project แล้ว YaitronModule ก็จะถูก load ขึ้นมาโดยทีไม่ต้องมานั่งแก้เอง.


เมนูของ vsatayamas




