Google


Tag Archive for 'Hoffman'

Page 2 of 8

Hoffman Framework เอา Smarty ออกจาก Components หลักแล้ว

ช่วงนี้ไม่ได้บอกถึงความเปลี่ยนแปลงของ Framework ตัวนี้เลยเกือบ ๆ เดือน เพราะว่าผมเปลี่ยนงานใหม่ครับ เลยต้องนั่งเคลียร์งานที่ค้างกับบริษัทเก่า เลยแทบไม่ได้จับเลย แต่ก็หาเวลาว่ามานั่งไล่ดูระบบภาพรวมโดยทั้งหมด สิ่งที่ผมเปลี่ยนแปลงตัวระบบ runtime มากที่สุดครั้งหนึ่งในการทำ Framework ตัวนี้คือเอา Smarty ออกไป (แต่ถ้าอยากเอากลับมาก็ทำได้ไม่ยาก เดี่ยวจะเขียนวิธีการอีกทีนึงสำหรับคนที่อยากเอา Smarty หรือ Template-engine ตัวอื่น ๆ มาใส่) ซึ่งตัวโครงสร้าง RenderView นี่ไม่ได้เปลี่ยนแปลงอะไรมาก นอกจากเอา Smarty ออกไป และสร้าง method ที่ render ของตัวเองมาอีก 2-3 ตัวเท่านั้นเอง เลยเอากลับมาใส่ได้ไม่ยากครับ

เหตุผลที่เอาออกไปเนื่องจากมันไปหยุดวิธีการทำงานของแนวคิด php เดิม ๆ ไปไว้ฝั่ง designer และทำให้ learning curve ของทั้งฝั่ง developer และ designer เพิ่มมากขึ้น เพราะ Smarty มี syntax เป็นของตัวเอง และสิ่งที่ทำให้ผมรู้สึกว่าต้องเอาออกจริง ๆ นั้นคือการสร้าง Helpers ของ RenderView ที่ยากกว่าปกติมาก ๆ -_-’ การ register function/class/object/class->method เข้าไปเป็น function/modifier ต่าง ๆ พวกนี้ทำได้ยาก และงงสุด ๆ ซึ่งจริง ๆ มันก็ไม่ยากหรอกครับ แต่ว่ามันเสียเวลามากกว่าปกติเวลาต้องคิดพวก Helpers เพราะมี guide-line ของมันเอง ซึ่งทำให้มึน ๆ งง ๆ ได้ง่าย ๆ เลย จริง ๆ 9Aum ก็บอกแบบนี้เหมือนกัน ผมก็ว่าจริง ;P

โดยที่ผมเอาออกไป ก็ไปนั่งแกะเจ้า Smarty และ Template-engine ของค่ายอื่น ๆ บ้าง รวมถึง CodeIgniter ด้วย เพื่อเขียนเองซะเลย พบว่าใช้ output-buffer แทนแล้วกัน แต่คาดว่าผมต้อง manage ตัว buffer นี้ด้วย ไม่งั้นมีปัญหาแน่ ๆ ซึ่งจริง ๆ Template-engine ทุกตัวก็ใช้แนวคิดไม่ต่างกันอยู่แล้วครับ คือทำ runtime ให้เสร็จแล้วเอาผลของการทำงานออกมาทีเดียวเลยเพื่อแยกระหว่าง process กับ presentation ออกจากกันอย่างชัดเจน โดยแนวคิดหลัก ๆ เอามาจาก PHPTemplate ของ Drupal ครับ

ต่อมาก็ทำ Acl เสร็จแล้วรวมถึง Authen ด้วย (เพราะทั้งส่วนนี้ต้องทำคู่กันครับไม่งั้น ไม่มีประโยชน์แน่นอน) กำลังปรับแต่งให้ config ง่ายที่สุด และรองรับทั้ง file-base และ db-base ครับ

ส่วน Error Handle และ Logs นั้นเพิ่มและใช้ได้ดี ในระหว่างทำ demo-app และ production-app ครับ (ตอนนี้ผมทำ production-app อยู่ 2-3 ตัวครับผม) โดย Logs จะช่วยได้เยอะมาก ๆ ในเรื่องการ track-error ครับ และ Error Handle มี 2 mode คือ production และ developer ครับ ถ้า environment เป็น production พวก error ต่าง ๆ จะไม่โชว์ออกมาเลย แต่จะ redirect ไปหน้าหลักอย่างเดียว (หรือ control ไปหน้าอื่น ๆ ก็ได้ แต่อันนี้เดี่ยวใส่เพิ่มอีกที)  แต่พวก error พวกนี้จะบันทุกอยู่ใน logs ตลอดครับ ทั้ง 2 mode เลย ทำให้ถ้ามี error ใน production mode จะไม่โดน hack จากการเกิด error ได้ง่ายครับ

ส่วนของ Third Party Components นี่กำลังใส่ทำ Baseclass-Components  อยู่ครับ จะได้สะดวก ๆ หน่อยน่ะครับ ;)

เดี่ยวจะมาเล่าพวกการ config อีกทีครับว่ามีส่วนไหนบ้างครับผม ;)

image

l10n และ i18n อาจทำพิษ จนออก Hoffman Framework pre-alpha ช้าลง

ทำ HMF เอง แถมทำข่าวเองเลย ฮา ….

วันนี้นั่ง implement ตัว Form Component และ DateTime Component ของ HMF ซึ่งกำลังไปได้ดี แต่สิ่งที่ผมลืมไปคือเรื่อง l10n และ i18n ไปสนิท เลยไล่ปรับใหม่สำหรับ Form และ DateTime (ผม note ใส่ใน TODO ของ project ไว้แล้ว แต่ไม่ได้สังเกตเลย) ทำให้ไล่หลายส่วนใหญ่ ซึ่งต้องไล่ส่วน Runtime, Configuration-file และ Component ที่เกี่ยวกับ l10n และ i18n ทั้งหมด เพื่อให้มันรองรับได้ตั้งแต่ต้น เหตุผลง่าย ๆ ในการรองรับ l10n และ i18n ตั้งแต่ pre-version เพราะผมอยากให้มันทำงานได้หลายภาษาตั้งแต่ต้นเลย และการมาไล่ปรับทีหลังหลังจากปล่อย pre ไปแล้ว อาจทำให้ app ของนักพัฒนาที่เอา pre-version ไปก่อนอาจมีปัญหาความเข้ากันไม่ได้เมื่อออก version ใหม่ ๆ ออกมา ซึ่งจริง ๆ มันก็มีความเสี่ยงอยู่แล้ว ไม่ว่าจะมี version ใด ๆ ออกมา แต่อยากให้น้อยที่สุดใน pre-version เพราะถือว่าเป็นการออกตัวครั้งแรก อยากให้ประทับใจในหลาย ๆ ส่วน

แต่ก็ยังมีข่าวดีตรงที่ผมทำ content-page แบบ multiple ได้แล้วในตอนนี้ ด้วยเหตุผลที่ว่า ถ้าทำ sigle master/content-page นี่มันดูเฉย ๆ และน่าจะยุ่งยาก ผมเลยนั่งไล่ปรับตัว content-page ของ RenderView ให้รองรับ multiple ของ content-page ได้ตั้งแต่ต้นเลย โดยส่วนของ RenderView หลายส่วน นั้นได้แนวคิดจาก PHPTemplate ของ Drupal มาด้วย โดยเอามาผสมกับ MasterPage ของ ASP.NET ครับ

ส่วนตัว Form Component กะว่าจะทำให้มันคล้าย ๆ กับ Rails (Ruby) แต่ไป ๆ มา ๆ ไม่เอาดีกว่า ทำตามแนวทางเดิม แต่เพิ่มความสะดวกลงไป น่าจะ work กว่า และกะจะ build-in ลงใน Smarty เป็น function นึงที่มา call กับ Form Component แต่ ไป ๆ มา ๆ ไม่เอาดีนั้นแหละ ใช้วิธีสร้าง object ในตัว Controller  แล้วโยนใส่ View ไปเลยง่ายกว่าเยอะ (ไม่เสียเวลาด้วย)

ตอนนี้ไล่ปรับหลายส่วนพยายามให้เท่ากับ version 0.1 ให้ได้ (ตัวนี้ไม่ได้ปล่อยออกมา เพราะใช้ยาก แต่ก็เป็นตัวที่เอาไว้รับงานประทังชีวิตไว้หลายงานเหมือนกัน)

Get Ready Hoffman Framework pre-alpha

ตอนนี้ส่วน RenderView ที่พัฒนาตรงตามแบบที่ต้องการพอสมควรแล้ว โดยใช้ Smarty มาช่วยในส่วนนี้โดยใช้ Instant ของ Smarty ในการทำ 2 ตัวด้วยกันทำ master-page กับ content-page อย่างละตัว แต่ในอนาคตจะทำ multiple content-page ด้วยคาดว่าหลังจากปล่อย beta โน้นเลย

ส่วน FlowController เพิ่มความสามารถเข้ามาพอสมควร ในส่วนของการให้ Controller นั้นควบคุมการแสดงผลส่วน View ได้ผ่าน Controller ซะ (คือตั้งค่าผ่าน Controller เลยเช่น ใส่ javascript, stylesheet หรือพวก title ต่าง  ๆ) เดี่ยวขอทดสอบกับ app จริง ๆ แล้วมา demo สักตัวนึงครับ

ส่วนของ Model นั้น ตัว LogicModel หลังจาก defend ตัวเองมานาน สรุปโดยแยกออกเป็น DB กับ Static ครับ โดยผมมองว่าบาง Model มันไม่ได้เกี่ยวกับ DB เลย ก็ควรไม่ต้องมี function ของ DB ติดมาด้วย เลยแยกออกจากกันไปซะ อะไรประมาณนั้นครับ

เหลือทดสอบกับ App จริง ๆ สัก 1-2 ตัวน่าจะ ok ปล่อยออกมาให้โหลดกันได้ครับ (เริ่มแรกน่าจะเป็นพวกเล็ก ๆ อย่าง register form กับ booking system ครับ) เดี่ยวถ้าเสร็จกับตัวนี้แล้วเอา demo ขึ้น พร้อมกับ commit เข้า svn และ link download เลยครับ

[สถานนะของ  SVN บนเครื่องผมคือ Revision.74 แล้ว]