Struts Framework – The Model in MVC

อย่างที่เราทราบกัน Struts เป็น framework ที่ใช้ในการสร้างโปรแกรม
ให้มีพื้นฐานบนสถาปัตยกรรม Model-View-Controller (MVC)
แต่เราจะไม่สามารถใช้งาน Struts ได้เต็มที่หากไม่เข้าใจนิยามของ MVC
ซึ่งบทความนี้ จะมาอธิบายนิยามของคำว่า Model

อะไรคือ Model
Model เป็น layer ที่สำคัญที่สุดของโปรแกรมที่เป็นแบบ MVC
เพราะว่า Model ได้ถูก Design ให้เป็นที่อยู่ของ Business Logic
และ Code ที่ใช้ในการเข้าถึงข้อมูล ด้วยเหตุนี้มันจึงสำคัญที่สุด

ตัวอย่างเช่น
เราพัฒนาโปรแกรมคำนวณเกรดขึ้นมา Model Layer ก็จะ
เป็นส่วนที่ใช้ในการคำนวณ หรือถ้าเป็นตัวอย่างโปรแกรมของบทความที่แล้ว
หากมีการเพิ่มการทำงาน ให้สามารถบันทึกข้อมูลหนังสือลงฐานข้อมูลได้
ส่วน Model Layer ก็จะเป็นคนติดต่อกับฐานข้อมูล

สถาปัตยกรรม MVC จะบังคับให้ Model layer จะต้องมีทุกอย่าง
พร้อมในตัวเอง และการทำงานจะต้องไม่ขึ้นอยู่กับ View และ
Controller layer ด้วยเหตุนี้ แกนหลักของโปรแกรม จะต้องสามารถ
ทำงานได้โดยไม่ขึ้นกับหน้าจอ เช่น Model ตัวนี้ต้องรันเฉพาะแบบเว็บ
เท่านั้น รันแบบ stand-alone ไม่ได้ ตามหลักของ MVC แล้ว เราจะ
ต้องแยกการทำงานและลดความขึ้นต่อกัน (Coupling) ระหว่าง Layer อื่นๆ

เราสามารถแยก Model ออกเป็น 3 Layer ย่อยได้ดังนี้
1 - model extract

โดยแต่ละ Layer ไม่จำเป็นต้องแยกเป็นคลาสย่อยก็ได้
ขึ้นอยู่กับความจำเป็นหรือความใหญ่ ความซับซ้อนของโปรเจค
โดยหน้าที่ของแต่ละ Layer ย่อยมีดังนี้

  • External interface ประกอบด้วยโค้ดที่ใช้เป็นเงื่อนไขในการติดต่อกับ Model
  • Business logic เป็นกลุ่มโค้ดของ Model ที่มีกระบวนกาารทำงานของ business สำหรับโปรเจค
  • Data access ประกอบด้วยโค้ดที่ใช้ในการติดต่อกับแหล่งข้อมูลขอบระบบ เช่น Database

Struts Framework ไม่ได้เตรียม feature ที่ใช้ในการพัฒนา Model
Layer ซึ่งนั่นก็เป็นข้อดีคือ Struts ไม่ได้บังคับเราว่าต้องพัฒนาตัว Model ด้วยวิธีใดวิธีหนึ่ง
เทคโนโลยีที่ใช้ในการสร้าง Model เช่น

  • Object-Relational Mapping (ORM) framework เช่น Hibernate
  • Enterprise JavaBeans (EJB)
  • Java Data Objects (JDO)
  • Data Access Object (DAO) pattern

Model ของเราสามารถเข้าถึงได้จาก subclass ของ Action ซึ่งเป็น
ส่วนหนึ่งของชั้น Controller ซึ่ง subclass ของ Action โดย subclass
ของ Action จะเป็นคนติดต่อกับ Model ของเราผ่านทางข้อตกลงต่างๆ
และใช้ Data Transfer Object ของ Struts เองในการส่งและรับข้อมูล

สิ่งหนึ่งที่เราต้องระลึกถึงในการพัฒนาส่วน Business หรือ Data
access ใน subclass ของ Action ก็คือ ให้แยก Model ออกจาก
Controller ดังนั้นโค้ด Model ของเราจะต้องไม่มี Reference ใดๆ ไปหาโค้ดของ Struts
หากเราไม่ทำก็จะเป็นผลให้เราไม่สามารถแยก
ส่วนหลัก (Business logic) ของเราออกจาก Struts ได้

ถ้าหากดูใน Document ของ Struts บท Introduction เองก็มีพูดไว้ว่า

we strongly recommend that you separate the business logic
(“how it’s done”) from the role that Action classes play (“what to do”). ’nuff said.

จากที่ผมเห็นหลายๆ โปรเจคไม่ใช่แค่ Struts ส่วนมากจะฝังโค้ด
Business logic ในส่วนของ Model เลย ทำให้เวลามีการอัพเดทเวอร์ชัน
หรือต้องการย้ายไปใช้ Framework ทำได้ยาก ลองคิดเล่นๆ ดูครับว่า
หากอยากลองเปลี่ยน framework ที่คุณใช้ เป็นตัวอื่น จะงานหนักขนาดใหน

ลองย้อนกลับไปดูโปรแกรม Mini book store ส่วนของ Business
logic ในคลาส BookSearchService จะเห็นว่า ไม่มีการ Import คลาสของ Struts เลย
แล้วผลการค้นหาก็ใช้ Data Transfer Object (DTO)
ในการเก็บผลลัพท์แล้วส่งมาให้ SearchAction ที่เป็นส่วนของ
Controller ซึ่งการทำแบบนี้ก็จะทำให้ส่วน Business logic ของเรา
สามารถ Reuse ได้นั่นเอง

One thought on “Struts Framework – The Model in MVC

Leave a Reply

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 / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s