KRISS

ความรู้เป็นของโลก ไม่ใช่ของกู

KRISS header image 2

Patterns of Enterprise Application Architecture#3:Layering

July 26th, 2008 · Popularity: 41%

การแบ่ง layer เป็นเทคนิกที่ใช้ในการออกแบบสิ่งต่างๆมาตั้งแต่ดึกดำบรรพ์ ซึ่งประโยชน์หลักๆของมันคือการแบ่งองค์ประกอบของระบบที่ซับซ้อนออกเป็นส่วนๆ ลองนึกถึงการแบ่ง layer ในคอมพิวเตอร์เป็นตัวอย่างก็ได้ (เช่น 7 OSI layers)

เมื่อมองระบบเป็น layer เราจะนึกถึงเค้กที่แบ่งเป็นชั้นๆ (หิว!) โดยชั้นบนทับชั้นล่างขึ้นไปเรื่อยๆ ซึ่งตามโมเดลนี้ layer สูงกว่าจะใช้ service ต่างๆจาก layer ต่ำกว่า โดยที่ layer ต่ำกว่าไม่รู้จัก layer บน และอีกอย่างคือ layer หนึ่งๆจะเป็นตัวกั้นระหว่าง 2 layer ที่อยู่บนและอยู่ล่าง (จริงๆระบบไม่จำเป็นจะต้องกั้นกันชัดเจนงี้นะ แต่ระบบส่วนใหญ่นั้นกั้นส่วนใหญ่ของระบบอย่างชัดเจน อ๊าก งง)

เอาหละ ปล่อยให้มึนกันแล้ว ก็ยกตัวอย่างซะดีกว่า ฮ่าๆ

คอนโดสุดจ๊าบ

คอนโดสุดจ๊าบ

ในคอนโดข้างบนมีลักษณะแบบนี้ (คือมันแค่ตัวอย่างนะ ไม่ใช่โลกจริง)

  1. คนชั้น 2 ซื้อของสดจากคนชั้น 1 <layer สูงใช้ service จาก layer ต่ำ>
  2. คนชั้น 1 ไม่ต้องรู้ว่าคนชั้น 2 ทำอะไร <layer ต่ำไม่รู้จัก layer สูง>
  3. คนชั้น 3 ซื้อกระเพราหมูจากคนชั้น 2 <layer สูงใช้ service จาก layer ต่ำ>
  4. คนชั้น 2 ไม่รู้ว่าคนชั้น 3 นั้นแท้จริงแล้วเป็นนายกรัฐมนตรีน ของประเทศเทย <layer ต่ำไม่รู้จัก layer สูง>
  5. คนชั้น 1 ไม่รู้ว่าคนชั้น 3 นั้นซื้อข้าวจากคนชั้น 2 <การกั้น layer>
  6. คนชั้น 3 ไม่รู้ว่าคนชั้น 2 ซื้อของสดจากคนชั้น 1 <การกั้น layer>

อ่านมากๆเวียนหัว ดูไม่รู้จักที่ต่ำที่สูงไงไม่รู้ หะๆๆ

ข้อดีของการแบ่ง layer

  • เราสามารถเข้าใจระบบเป็นชั้นๆ โดยไม่ต้องสนใจชั้นอื่นมากนัก เช่นอยากขายของสดก็ไปเรียนรู้ที่ชั้น 1 อยากพูดจาไม่มีหูรูด ไปชั้น 3
  • เราสามารถเปลี่ยนยก layer ได้โดยไม่กระทบกระเทือนอะไรมาก ขอให้ layer นั้นๆทำงานได้เท่าเดิม เช่นเปลี่ยนร้านขายข้าวชั้น 2 เป็นร้านก๋วยเตี๋ยว ก็พอได้ เพราะยังใช้ของสด และ ทำกับข้าวเลี้ยงนายกชั้น 3 ได้
  • ซึ่งข้อที่แล้ว นำมาสู่ dependencies ที่น้อยลงระหว่างส่วนต่างๆของระบบ
  • ทำเป็น standard ได้ง่าย เพราะเราอธิบายทั้งระบบได้โดยการอธิบายทีละชั้น ดังนั้นมันคงง่ายที่จะสร้างคอนโดแบบนี้ในประเทศใดๆ (ตัวอย่างจริงๆก็คือ TCP และ IP ที่เป็น standard เพราะเรารู้ว่าแต่ละชั้นของมันทำงานยังไง)
  • เมื่อเราสร้าง layer ต่ำๆแล้ว เราเอาไปใช้ที่อื่นได้อีกโดยไม่ต้องทำใหม่ เช่นร้านของสดของเราที่อยู่ชั้น 1 หากมีร้านก๋วยเตี๋ยว ร้านส้มตำ ร้านอะไรก็แล้วแต่มาอยู่ชั้น 2 ก็ไม่ต้องสร้างร้านของสดที่ชั้น 2

ข้อเสียก็มีนะ

  • layer นั้น encapsulate บางอย่างได้ดี แต่ ไม่ทั้งหมด ซึ่งส่งผลโหดๆอย่าง cascading changes ตัวอย่างคือ หากเราต้องเพิ่ม 1 field บนหน้าจอ เราจะต้องใส่ใน database ด้วย และแน่นอน ทุกๆ layer ที่อยู่ระหว่าง 2 สิ่งนี้ต้องเพิ่ม field นี้ทั้งหมด
  • การเพิ่ม layer อาจทำให้ performance ตกได้ เพราะการส่งข้อมูลระหว่าง layer นั้นต้องมีการทำอะไรบางอย่างเสมอ แต่จริงๆข้อนี้ถูกชดเชยด้วยการที่เราสามารถปรับแต่ละ layer ได้โดยไม่กระทบ layer อื่น ดังนั้นหากเราปรับ layer ที่คุม transaction ก็อาจทำให้ทั้งระบบเร็วขึ้นได้

แต่สิ่งที่ยากที่สุดของการแบ่ง layer ก็คือ การคิดให้ออกว่าเราจะต้องมี layer อะไรบ้าง และแต่ละอันมีหน้าที่อะไร

จบแค่นี้ก่อนขรับ เดี๋ยวมาเล่าต่อ

เผื่อแผ่ชาวบ้าน:
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google

อ่านนี่ด้วยดิ:

Tags:

  • แสดงความเห็นเกี่ยวกับเรื่องนี้ได้ด้านล่าง:

แสดงความคิดเห็น

หากต้องการให้มีรูปอวตาร (avatar) ประจำอีเมล กรุณา สมัครที่ Gravatar