การแบ่ง layer เป็นเทคนิกที่ใช้ในการออกแบบสิ่งต่างๆมาตั้งแต่ดึกดำบรรพ์ ซึ่งประโยชน์หลักๆของมันคือการแบ่งองค์ประกอบของระบบที่ซับซ้อนออกเป็นส่วนๆ ลองนึกถึงการแบ่ง layer ในคอมพิวเตอร์เป็นตัวอย่างก็ได้ (เช่น 7 OSI layers)
เมื่อมองระบบเป็น layer เราจะนึกถึงเค้กที่แบ่งเป็นชั้นๆ (หิว!) โดยชั้นบนทับชั้นล่างขึ้นไปเรื่อยๆ ซึ่งตามโมเดลนี้ layer สูงกว่าจะใช้ service ต่างๆจาก layer ต่ำกว่า โดยที่ layer ต่ำกว่าไม่รู้จัก layer บน และอีกอย่างคือ layer หนึ่งๆจะเป็นตัวกั้นระหว่าง 2 layer ที่อยู่บนและอยู่ล่าง (จริงๆระบบไม่จำเป็นจะต้องกั้นกันชัดเจนงี้นะ แต่ระบบส่วนใหญ่นั้นกั้นส่วนใหญ่ของระบบอย่างชัดเจน อ๊าก งง)
เอาหละ ปล่อยให้มึนกันแล้ว ก็ยกตัวอย่างซะดีกว่า ฮ่าๆ
ในคอนโดข้างบนมีลักษณะแบบนี้ (คือมันแค่ตัวอย่างนะ ไม่ใช่โลกจริง)
- คนชั้น 2 ซื้อของสดจากคนชั้น 1 <layer สูงใช้ service จาก layer ต่ำ>
- คนชั้น 1 ไม่ต้องรู้ว่าคนชั้น 2 ทำอะไร <layer ต่ำไม่รู้จัก layer สูง>
- คนชั้น 3 ซื้อกระเพราหมูจากคนชั้น 2 <layer สูงใช้ service จาก layer ต่ำ>
- คนชั้น 2 ไม่รู้ว่าคนชั้น 3 นั้นแท้จริงแล้วเป็นนายกรัฐมนตรีน ของประเทศเทย <layer ต่ำไม่รู้จัก layer สูง>
- คนชั้น 1 ไม่รู้ว่าคนชั้น 3 นั้นซื้อข้าวจากคนชั้น 2 <การกั้น layer>
- คนชั้น 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 อะไรบ้าง และแต่ละอันมีหน้าที่อะไร
จบแค่นี้ก่อนขรับ เดี๋ยวมาเล่าต่อ

(4.5 จาก 5)
(3.5 จาก 5)
















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