Isriya Paireepairit / mk / markpeak
A Thai tech geek. Co-founder of Blognone and SIU. Blogging on almost everything.
หลังจากตะลุย Ruby on Rails ไปได้ซักพัก ผมก็ถึงเวลามาทบทวนว่า เราจะยังมุ่งไปบนเส้นทางของ Rails ดีรึเปล่า
Rails ไม่มีอะไรไม่ดี มันเป็น web application framework ที่ดีมากๆ ปัญหาอยู่ที่ Ruby ต่างหาก
ผมเป็นเด็กสาย Python เรียนจบก็ด้วย Python หลังจากเขียน Ruby มาได้ซักพัก ก็พบว่า Python เหนือกว่า Ruby ในเรื่อง syntax ที่ Ruby ยังเอาการเขียนเชิงสัญลักษณ์ของ Perl มาใช้อยู่เยอะ (ซึ่งผมเกลียดมาก)
เคยเขียนบล็อกไปทีนึงแล้ว (เรื่อง Web Framework) ถ้าไม่มุ่ง Ruby และกลับมา Python ก็มีตัวตายตัวแทนของ Rails ให้สามทางเลือก
Zope มีมานานแล้ว และได้ยินชื่อเสียงเรื่องความยิ่งใหญ่จนซับซ้อน ส่วนอีกสองตัวที่เหลือ ที่อ่านคร่าวๆ หลายคนบอกเป็นเสียงเดียวกันว่า Django ดีกว่าหน่อย พวกนี้ก็คงต้องตามอ่านตามลองต่อไป
สรุปความรู้ที่ได้จากการอ่านในวันนี้
| Framework (Language) |
Model (O/R mapping) |
View | Control | Optional |
|---|---|---|---|---|
| Ruby on Rails (Ruby) |
Active Record | Action Pack | Prototype | |
| Turbo Gears (Python) |
SQLObject | Kid | CherryPy | MochiKit |
| Django (Python) |
n/a | n/a | n/a | n/a |
| Zope (Python) |
n/a | n/a | n/a | n/a |
| CakePHP (PHP) |
n/a | n/a | n/a | n/a |
| Self Integrated (Java) |
Hibernate | Struts, Spring, Tapestry? | n/a | |
ป.ล. n/a คือ ไม่มีชื่อเรียก หรือยังไม่ได้อ่าน
ป.ล.2 แฟนจาวาช่วยอธิบายความสัมพันธ์ของ Struts, Spring และ Tapestry ก็ดีครับ อ่านบางที่บอกว่ามันทำงานร่วมกันได้ แต่บางที่ก็บอกว่ามันเป็นคู่แข่งกัน
Comments
Pittaya
1 April, 2006 - 09:01
Permalink
O/R ของ django
O/R ของ django ใช้ Active Record ครับ
View กับ Control นี่เหมือนว่าจะไม่มีชื่อเรียกเฉพาะน่ะครับ
pphetra
1 April, 2006 - 09:08
Permalink
strust
strust นี่เป็นแม่แบบ (อาจจะไม่ใช่ตัวแรก แต่เป็นตัวที่คนรู้จักมากสุด)
ของ MVC framework
มี style การทำงาน เป็นแบบ action oriented
เมื่อมี request วิ่งเข้ามา ก็จะถูก dispatch ให้กับ action ที่รับผิดชอบ
ซึ่งเมื่อทำงานเสร็จ ก็จะส่งต่อให้ view เป็นคน render
ถ้าใช้ struts เป็นแล้ว, การเปลี่ยนไปใช้ rails นี่แทบจะไม่ต้อง
เรียนรู้อะไรเพิ่มเลย (ยกเว้น ruby)
spring แยกเป็น 2 ส่วนคือ
ส่วน web กับส่วน container
ส่วน web มีลักษณะโดยรวมๆ คล้ายคลึงกับ struts
แต่เนื่องจากมาทีหลัง ก็เลยมี feature บางอย่างที่ดูดีกว่า
รวมทั้งเมื่อนำมาใช้ในแบบ dependency injection แล้ว
ก็เลยดู 'งาม' ดี
ส่วนของ spring container นั้น
สามารถนำไปใช้ร่วมกับ strust หรือ tapestry ก็ได้
โดยมักจะนำไปใช้เป็น layer ของการ implement business logic
ส่วน Tapestry เป็น Component Oriented
ลองเปรียบเทียบโดยใช้ภาพนี้แล้วกัน
ให้มี spectrum อยู่แถบหนึ่ง
ทางฝั่งซ้ายสุดเป็น struts
ส่วนขวาสุดเป้น swing
tapestry จะอยู่ค่อนมาทางฝั่ง swing
แต่ใช้วิธีการที่แยบยล ในการ integrate component
เข้ากับ template (html file)
แทนที่จะเป็นลักษณะการ construct object แบบ swing
( พวก JPanel p = new JPanel(); p.add(new JButton());)
ส่วนความเห็นสุดท้าย นี่ไม่รับรองความถูกต้อง
(เพราะผมไม่ได้เป็นผู้ใช้ของ .net)
ผมเคยดู tutorial ของ .net
รู้สึกว่า architecture มันเป็นไปในทำนองเดียวกับ tapestry เลย
(มี Page Object เป็น Container Component, มีการร้อย event ที่ UI เข้ากับ method ใน Page Object, Postback, viewstate, ฯลฯ)
pphetra
1 April, 2006 - 09:14
Permalink
ลืมบอกไป เ
ลืมบอกไป
เห็น mk นิยม product ทางค่าย apple
style ของ tapestry จะเหมือนกับ webobject ของ apple
(http://www.theserverside.com/news/thread.tss?thread_id=34621)
LewCPE
1 April, 2006 - 09:19
Permalink
ตอนนี้กำล
ตอนนี้กำลังสนใจ Symfony (PHP) อยู่ เพราะความที่มันเป็น PHP ส่วน Cake นี่เท่าที่ลองๆ ดูแล้วยังไม่ค่อยชอบเท่าใหร่
เท่าที่เคยศึกษามา รู้สึกว่าตัวที่ mature พอจะใช้งานได้จริงไม่นับ Java ก็น่าจะมีแค่ RoR กับ Zope เท่านั้นเอง ส่วนตัวอื่นๆ คงต้องรออีกสักปีขึ้นไป ถึงจะใช้งานระดับโปรดักชั่นได้
Wiennat
1 April, 2006 - 09:41
Permalink
ผมลองเล่น
ผมลองเล่นแล้วปรากฏว่าเซท Python ลำบากกว่า RoR ครับ พยายามเขียนอยู่พักนึงแต่ต้องเลิกเพราะเซทไม่ผ่าน
LewCPE : ผมว่า Symfony น่าใช้เหมือนกันครับแต่เสียดายที่เมืองไทยไม่ค่อยมี host ที่รับ php5 เลยแฮะ ผมเลยต้องหันไปใช้ CakePHP แทน
sugree
1 April, 2006 - 21:38
Permalink
จงศรัทธาใ
จงศรัทธาใน Drupal มันถูก implement มาดีที่สุดสำหรับงาน light-weight ผมคิดว่าถ้าทำเว็บแบบไม่ต้องรุนแรงนัก ก็ใช้ PHP ดีกว่า ถ้าหนักมากค่อยมา Python ส่วน Java ... ถ้าจำเป็นค่อยว่ากัน ว่าแต่อยากทำอะไรกันแน่
ปล. ตอนนี้กำลังวางแผนเขียน SCMSWeb ด้วย Drupal
deans4j
2 April, 2006 - 06:09
Permalink
ผมช่วยเสร
ผมช่วยเสริมละกันนะ เอาทีละส่วน ถ้า Struts นี่เรียกว่าเป็น WebMVC Framework ดั้งเดิมมานมนาน ผมทำโปรเจ็คจบเมื่อสองปีที่แล้ว ก็เกี่ยวกับ Struts นี่แหละ เรียกว่าฮิตกันสุดๆ เลยก็ว่าได้ พักหลังๆ เนื่องจากมันค่อนข้างเก่า และมีบางส่วนที่มันดีไซน์ไว้ไม่ดีถ้าเทียบกับ framework ใหม่ๆ จึงมีคนบ่นกันมาก กอปรกับมันเป็นแบบ page-centric ซึ่งทำให้ reuse ยากกว่าแบบ component based อย่าง Tapestry, JSF ปัจจุบัน Struts รวมเข้ากับ WebWork แล้วครับ แบ่งออกเป็นสองส่วนใหญ่ๆ แล้ว นั่นคือ Struts Action กับ Struts Shale แตกต่างกันคือ Struts Action ยังคงเป็น Struts+Webwork อยู่ ส่วน Struts Shale จะเป็น framework ที่ทำงานบน JSF แทน
Spring นั้นตัวมันเองค่อนข้างจะครบเครื่องในหลายๆ อย่าง มองมันเหมือน iPod ที่สามารถเอาไปต่อกับอะไรได้สารพัด โด่งดังได้เพราะมันเปรียบเสมือนเป็น glue framework ที่ช่วยประสานกันระหว่างงานใน layer ต่างๆ ได้ดี เช่น ส่วน Web Spring เตรียม SpringMVC ไว้ให้ แต่ถ้าคุณไม่ยากใช้คุณก็ใช้ Spring คู่กับ Web Framework อื่นๆ อย่าง Struts,WebWork,Tapestry,JSF ก็ได้ ส่วน presistance Layer ถ้าคุณถนัดการควบคุมผ่าน SQL และ JDBC Spring ก็เตรียมชุดคำสั่งที่คอยช่วยเหลือไว้ให้ แต่ถ้าถนัดพวก Object-Relational mapping framework อย่าง Hibernate,TopLink, JDO แล้วละก็ Spring ก็เตรียมไว้ให้เหมือนกัน ลำพัง Spring Core ก็จะเป็น dependency Injection framework ธรรมดาตัวนึงเท่านั้นเอง
ส่วน Tapestry ก็เป็น Web Framework ที่เป็นลักษณะ Component based จริงๆ มีข้อดีหลายๆ อย่างมากในเชิงเทคนิก ตอนนี้ก็กำลังเป็นที่นิยมเช่นเดียวกันกับ JSF
bact'
4 April, 2006 - 19:34
Permalink
what about Grails (formerly,
what about Grails (formerly, Groovy on Rails) ? :)
Groovy syntax is like Python + Ruby + Java.
do Rails things on Java platform -- without Java language.
But the big problem of all non-PHP options is hosting:
* while there's a lot of Python hosting .. but it far less than PHP
* for Java server-side hosting, it is not difficult as well ... but usually more expensive (the host that allow you to run "java" command (like standard DreamHost option) doesn't count, we count Servlet-equivalent only)
* Ruby hosting, not very widely available (it gets better though)
Sirick
8 April, 2006 - 20:43
Permalink
If you're rails' fan and
If you're rails' fan and .Net Developer
Please try Monorail....
See http://www.castleproject.org/
Vee Satayamas
2 July, 2006 - 19:43
Permalink
กำลังจะลง
กำลังจะลง Symfony :-)
crazygirl
18 November, 2006 - 12:24
Permalink
ใครสนใจลอ
ใครสนใจลองศึกษาดูได้ที่นี่ (ภาษาไทย)
http://wiki.nectec.or.th/giti/Knowledge/RubyOnRails
wornrawoot
3 January, 2007 - 10:21
Permalink
ผมอ่านแล้
ผมอ่านแล้งงนิดนึง คุณ mk's blog กำลังบอกว่า Ruby ยากในการเขียนมากกว่า Python อย่างงั้นหรือเปล่าครับตัวปัญหา
สำหรับผมแล้ว Ruby เข้าใจได้ง่ายแถมเขียนง่ายและสั้น ผมว่าปัญหาของมันคือช้ามากกว่านะครับ เคยอ่านที่คุณ เค้สคุยให้ฟังว่างานที่จะเขียนเจ้าตัว Basecamp เค้าไม่สามารถจบงานด้วยการใช้ PHP ได้ และมีคนแนะนำเค้ารู้สึกเป็นโปรแกรมเมอร์ชาวญี่ปุ่นแนะนำให้รู้จักภาษา Ruby เลยได้ Rails จากการแตกแขนงของ Basecamp สำหรับผมแล้ว Opensource ที่มาแรงอย่าง RoR แถมยังมีการนำไปใช้จริงหลายๆ ที่ผมชอบที่นึงครับ http://www.odeo.com มีประโยชน์มาก ตอนนี้มีบทความจากหลายๆ ที่ทั้ง IBM และ Oracle ที่ฝาก RoR เอาไว้ในไซต์
ติดอยู๋อย่างตอนนี้ Rais ไม่มี hosing ในไทย ผมหาไม่เจอจริงๆครับ ส่วนเรื่องการแสดงผลภาษาไทยมีปัญหานิดหน่อยแต่เรา render แบบ UTF-8 ได้
ผมไม่ค่อยเก่งเรื่องเขียนโปรแกรมแต่อ่านโค๊ดของ Ruby และเขียน Rais แล้ว สนุกอย่างบอกไม่ถูก มัน Agile เหมือน ชื่อหนังสือเล่มแรกเลยจริงๆ
อยากให้ลองมาใช้ Rails กัน เรื่องประสิทธิภาพน่าใช้ใช้ตัวพวก fast-cgi ช่วยได้
สำหรับการพัฒนาผมใช้
Dreamweaver 8
ผมว่าของเค้าดีจริงๆครับ
Add new comment