การออกแบบซอฟแวร์แบบมัลติเทียร์

เป็นการออกแบบโดยฟังก์ชันการทำงานออกเป็นส่วนๆ โดยแยกออกจากกัน โดยสามารถแบ่งได้ 4 ลำดับชั้น
n-tier 1.Presentatin Layer [PL] หรือ User Interface : ส่วนของการแสดงผลหรือส่วนที่ติดต่อกับผู้ใช้
2.Business Logic Layer [ BLL] ใช้สำหรับการจัดการกับข้อมูลดิบโดยผ่านทาง Data Access Layer(DAL) ที่ทำหน้าที่ในการเชื่อมต่อและเข้าถึงแหล่งข้อมูล โดยซ่อนรายละเอียดเชิงเทคนิคไว้เบื้องหลังการทำงาน
3.Data Access Layer [DAL] สำหรับเข้าถึงหรือเชื่อมต่อกับแหล่งข้อมูล เพื่อเรียกใช้ข้อมูลและจัดการข้อมูล
4.Data Store Layer [DL] แหล่งจัดเก็บข้อมูล

การออกแบบตามแนวคิดนี้ขึ้นอยู่กับขนาดของโปรเจ็ต ถ้าโปรเจ็ตขนาดเล็ก อาจมีความคาบเกี่ยวกับระหว่าง DAL กับ BLL แต่ถ้าโปรเจ็ตขนาดใหญ่จะต้องแบ่งออกให้ชีดเจนเพื่อความง่ายต่อการ แก้ใข ดูแลรักษา

 

 

เรามาดูความหมายระหว่างคำว่า เทียร์ และคำว่า เลเยอร์ นั้นมีความหมายว่าอย่างไร
เทียร์ [TIER] : ส่วนประกอบอื่นที่ไม่มีได้อยู่ในโปรเจ็ตของเรา เช่น *.DLL, *.Exe หรืออื่นๆ ดังนั้นเมื่อตีความหมายรวมกันจะหมายถึง การแยกส่วนประกอบทางกายภาพของซอฟแวร์ที่ใช้ในการ Deploy(การติดตั้ง)
เลเยอร์ [Layer] : การแยกส่วนประกอบออกเป็นส่วนประกอบต่างๆ เช่น มีการแยกเป็น NameSpace แยกออกเป็นขั้นๆ หรือชั้นๆตามแนวทางการออกแบบ Software แบบ N-Tier Design ดังนั้นเมื่อตีความหมายก็คือ การแบ่งแยกส่วนประกอบทางนามธรรมออกเป็นส่วนๆเพื่อให้เป็นระบบนั้นเอง

2 ในการออกแบบซอฟแวร์นั้นจะมีความคาบเกี่ยวกันระหว่าง DAL  กับ BLL โดยจะมี Custome Collection มีเหมือนกัน และใน BLL กับ PL หรือ UI ซี่งส่วนมากจะเกิดขึ้นกับโปรเจ็ตที่มีขนาดกลาง – ขนาดใหญ่ ซึ่งในบางครั้งเราก็อาจมีการแบ่ง DAL ออกเป็นหลาย Provider เพื่อให้สามารถรองรับกับหลายๆ แหล่งจัดเก็บข้อมูล ทำให้ง่ายต่อการดูแลรักษา เมื่อมีการเปลี่ยนแหล่งจัดเก็บข้อมูล ซึ่งเป็นการยากมากถ้าใช้ OLEDB ในการจัดการซึ่งใน Code ของเราจะเต็มไปด้วยคำสั่ง IF….ELSE หรือคำสั่งแบบ State ment มากกมาย เพื่อเลือกแหล่งข้อมูล ดังนั้นเราจึ่งควรสร้างส่วนติดต่อกับแหล่งข้อมูลหรือสร้าง Database Provider ไว้

Database Provider 
คือ การสร้างส่วนติดต่อกับแหล่งข้อมูลโดยเฉพาะไว้ โดยการสร้างส่วนติดต่อสำหรับ BLL เอาไว้จากนั้นสร้างคลาสเพื่อสืบทอดจากคลาสนั้นจากฐานนั้น โดยบรรจุ Source code สำหรับการเชื่อมต่อไว้ที่คลาสที่สอง โดยคลาสที่สองนี้เรียกว่า Database Provider ที่สร้างเฉพาะเจาะจงกับระบบฐานข้อมูลแต่ละแบบ

 

ระหว่าง Dataset กับ Custom Entities เลือกอย่างไหนดี
เมื่อมีการสร้าง BLL เพื่อเรียกใช้ข้อมูลผ่าน DAL จะต้องเลือกระหว่าง Dataset/DataTable หรือใช้ Custome Entities เพื่อห่อหุ้มฟิลด์ในฐานข้อมูลไว้ ซึ่งทั้งสองวิธีมีข้อได้เปรียบที่แตกต่างกันออกไป หากเลือกใช้ Dataset/Datatable เพื่อรับส่งข้อมูลระหว่าง BLL กับ DAL ต้องใช้ ADO.NET ในการเรียกใช้ข้อมูลจาก BLL แต่ถ้าเลือกใช้ Custome Entities จะง่ายและปรหยัดทรัพยากรกว่าการเรียกใช้ข้อมูลผ่าน Dataset/DataTable เพราะอะไร การที่ว่าให้ใช้ Custome Entities นั้นใช่ว่าการเรียกใช้ Dataset/DataTable นั้นจะใช้ไม่ได้ การเรรียกใช้ Dataset/DataTable นั้นขึ้นอยู่กับความสะดวก และความจำเป็นของข้อมูลมากกว่า แต่เมื่อการเรียกใช้ จำเป็นจะต้องยอมเสียทรัยากรที่มากกว่าการใช้แบบ Custom Entities ไปซึ่งอาจส่งผลให้ประสิทธิ์ภาพของระบบตกไปได้

แล้วระหว่าง Store Procedure กับ SQL Text Quiries อย่างไหนดีกว่า

ทางเลือกในการออกแบบฐานข้อมูลมี 2 แบบคือ เก็บคำสั่ง SQL ไว้ที่ Store Procedure และใช้ Object SqlCommand เรียกใช้ Store Procudure และแบบที่สอง เก็บคำสั่งไว้ที่ SQL แบบ Text แล้วใช้ Object Sqlcommand รันชุดคำสั่ง เราๆคงเคยได้ยินกันมาก่อนว่าการใช้ Store Procudure นั้นทำงานได้เร็วกว่า เพราะถูกคอมไพล์ไว้ก่อนแล้ว  ถ้าเรามีการเพิ่ม Parameter ให้ในคำสั่ง SQL แล้วทั้งสองวิธีไม่ได้แตกต่างกันเลย แต่อย่างไรก็ดีการเรียกสั่ง Run Store Procudeure ด้วยชื่อนั้นสั้นกว่าการรันชุดคำสั่ง SQL ทั้งแถวยาว ทำให้ Database Server ค้นหาข้อมูลใน Cache ได้เร็วกว่า แต่ความเร็วแค่นี้ก็ไม่ได้สร้างความแตกต่างอะไร แต่ข้อได้เปรียบอย่างเห็นได้ชัดเรื่องการใช้ Store Procudure นั้นจะทำให้เราใช้ DAL ไม่กี่คำสั่ง เมื่อต้องการปรับแต่งก็สามารถปรับแต่งที่ Store Procudure โดยไม่ส่งผลกระทบต่อ DAL แต่อย่างใด แต่อย่างไรก็ดี Store Procudure นั้นไม่ใช่ทางออกที่แก้ปัญหาได้ทุกกรณีได้ ซึ่งข้อได้แบบของเท็กซ์คือ ความยืดหยุ่นในการใช้ Object Sqlcommand

สรุป ในการเลือกใช้ เราจะพยายามใช้ Store Procudure ทำงานกับฐานข้อมูล ยกเว้นกรณีการใช้ Store Procudure นั้นซับซ้อนยุ่งยากจนเกินไป หากเป็นเช่นนั้นเราจะเลือกใช้ SqlCommand และ SqlParameter แทน

4 thoughts on “การออกแบบซอฟแวร์แบบมัลติเทียร์

  1. เห็นด้วยครับ ผมว่าผมก็ทำแบบนี้นะ แต่ทำไม user บอกว่าโปรแกรมพี่ช้าจัง (1 ปีให้หลัง)

กรุณา Comment สักหน่อยเถอะ จะได้ปรับปรุ่งให้ดีขึ้น

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