Convention over configuration (Coc)

สมัยก่อนเวลาเขียนโปรแกรมทีนึงต้องฝังทุกอย่างไว้ใน source code เปลี่ยนแปลงอะไรที ต้อง compile และ deploy ใหม่ สร้างความน่าสะพรึงกลัวให้กับทีมพัฒนาและผู้เกี่ยวข้องว่า deploy แล้วมันพังจะทำยังไง เพราะปกติถ้าระบบมันทำงานได้อยู่ก็ไม่มีใครอยากไปแตะมัน

ต่อมาก็มีคนมีความคิดว่าเอาสิ่งที่สามารถเปลี่ยแปลงได้ ออกมาไว้ใน configuration file ทำให้การใช้งานโปรแกรมทำได้ง่ายขึ้น ผู้ดูแลระบบสบายใจมากขึ้น พอมาถึงยุค XML เราก็เอา XML มาใช้เป็น configuration file เพื่องจากมันทำอะไรได้มากกว่า configuration file แบบเดิม ทั้งในแง่ของโครงสร้างที่ซับซ้อน และการเขียน Parser เรื่องนี้ผมซึ้งมากๆตอนแก้ Parser ของ Squid เพื่อจะเพิ่มจำนวน IP ของ router แต่คนที่เป็น admin และไม่ชำนาญกับ xml ก็จะบอกว่าเกลียด xml ทั้งๆที่มันดีจริงๆนะ😉

มายุคนี้เรากลับมาบ่นอีกแล้วว่ามันเยอะเกินไป ทำอะไรทีเขียน configuration file มากกว่า code อีก แต่ลืมมองไปว่ามันเกิดมาจากความต้องการความยืดหยุ่นในการใช้งาน (ซึ่งบางทีเราก็ไม่ได้ต้องการมันเท่าไหร่) ทางเลือกมีหลายทางถ้าผมเก่งหน่อยก็จะเขียน framework ใหม่ หรือลดลอนจากของเดิมให้มันเหมาะกับสิ่งที่ผมจะใช้ หรือไปใช้พวก Annotation ซึ่งส่วนตัวไม่ได้ชอบเท่าไหร่ เพราะดันเอา configuration กับไปฝังไว้ใน code อีกแล้ว แต่ก็ไม่ผิดหรอกถ้าเรามั่นใจว่ามันจะไม่เปลี่ยนบ่อยๆ

Convention over configuration (CoC) เป็นรูปแบบของการพัฒนา software ที่จะช่วยลดจำนวนของการตัดสินใจที่นักพัฒนาจะต้องทำใน configuration file ก่อนที่ software จะทำงานได้ โดยที่ยังคงความยืดหยุ่นของตัว software นั้นไว้ ถ้าพูดให้ง่ายเข้าก็คือ มันจะมีค่า default ของงานบางอย่างไว้ให้เราแล้ว ถ้าเราไม่แก้ไข มันก็ใช้ค่า default นั้นๆ

Framework ที่มีรูปแบบตาม Coc ได้แก่ Ruby on Rails Grails และ CakePHP เป็นต้น

ใส่ความเห็น

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out / เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out / เปลี่ยนแปลง )

Google+ photo

You are commenting using your Google+ account. Log Out / เปลี่ยนแปลง )

Connecting to %s