สวัสดีครับเพื่อนๆ
ผมไม่ได้เข้ามาเขียนบันทึกเสียนาน กลับมาอีกที G2K เปลี่ยน ui ไปอีกขั้นหนึ่งแล้ว
ขอให้พัฒนายิ่งๆขึ้นไปนะครับ เป็นกำลังใจให้ทีมพัฒนาทุกท่านครับ
เป็น Developer นี่ทำงานปิดทองหลังพระครับ
หาก engine ดีแต่ user interface ไม่ง่ายต่อผู้ใช้ ก็เป็นอันจบข่าวเหมือนกันนะครับ
เรื่องที่ผมมาเล่าสู่กันฟังรอบนี้เป็เรื่องเกี่ยวกับ
Web application
ASP
ASP.Net
ผมเคยเร่ถาม Developer ท่านอื่นๆทั้ง pantip.com , thaiadmin.org ,
และจากเว็บไซท์แหล่งอื่นๆ
เป็นปัญหาเกี่ยวกับ Web application ครับ
เป็นการสร้างกระบวนการ การตรวจสอบ username ของสมาชิกในฐานข้อมูลครับ
เพียงต้องการนำ username ที่สมาชิกผู้สมัคร
ไปตรวจสอบกับ username อื่นๆในฐานข้อมูลว่า
ซ้ำหรือเปล่า
ไม่ยากใช่ใหมครับ หากเป็น asp ยิ่งไม่ยากเลยครับ
แต่ที่เป็นปัญหาเพราะผมใช้ asp.net หากถามผมว่าทำไมถึงใช้ asp.net
ก็คงต้องตอบว่า ก็อยากลองของน่ะครับ :> และสถานการณ์บังคับ
หากท่านผู้อ่านสงสัยว่ามันดียังไง ผมว่าลองไปหาอ่าน benefit จาก www.microsoft.com
จนกระทั่ง...วันหนึ่งผมได้อ่านเรื่อง Data Access Layer จาก www.asp.net ชีวิตผมก็เปลี่ยนไป....
จะแบ่งส่วนการทำงานออกเป็นชั้นย่อยๆ
ในแต่ละชั้นจะแบ่งการทำงานออกเป็นส่วนๆ
ตัวอย่างนะครับเช่น ผมไปซื้อหนังสือที่ร้านแห่งหนึ่ง
1.เมื่อผมเลือกหนังสือมาแล้วผมนำหนังสือไปชำระเงินที่หน้าร้าน
2.ผมชำระเงินให้กับพนักงานขาย
3.พนักขายงานออกบิลให้ผม
4.พนักงานควบคุมคลังสินค้าตัดรายการหนังสือที่ผมซื้อ
5.พนักงานบัญชีของร้านทำสรุปยอดรายการขาย โดยอาจเป็นรายวัน หรือ เดือน หรือ ปี
จากตัวอย่างที่ผมยกมาพนักงานขายจะส่งต่อรายการขายไปให้พนักงานสินค้าคงคลังเพื่อตัดยอดหนังสือและส่งต่อรายการไปให้ฝ่ายบัญชีเพื่อสรุปยอด
แต่ละฝ่ายในร้านจะทำงานตามแต่หน้าที่ของตนเองและส่งมอบงานนั้นๆไปตามลำดับขั้น
การทำงานของ Data Access Layer ก็ทำงานในลักษณะนี้เช่นกันครับ
ไม่จำเพราะ ASP.Net นะครับที่ทำได้ ไม่ว่า Technology ของฝั้ง WinApp หรือ WebApp ทั้ง php / jsp / asp / ... ก็สามารถทำได้เช่นกัน
DAL จะแบ่งส่วนการทำงานออกเป็น LAyer ครับ แยกกันทำงานไปแต่ละส่วนเลย
จะเป็น Database ครับ
จะมีฐานข้อมูลของระบบของเราอยู่ที่นี่
ทำหน้าที่เก็บคำสั่งเพื่อจัดการกับฐานข้อมูลเช่น insert , update ,delete,select
ที่ชั้นนี้จะมีหน้าที่รับคำสั่ง รับค่าที่ผู้ใช้ระบบป้อนเข้ามาเรียกใช้ data access layer อีกทีหนึ่ง
ในชั้นนี้เราสามารถใส่เงื่อนไขพิเศษ ตามที่เราต้องการที่ชั้นนี้ได้
ทำหน้าที่ติดต่อกับผู้ใช้รับค่าข้อมูลเช่นรับข้อความ ตัวเลข ภาพที่ป้อนเข้ามา
และยังทำหน้าที่แสดงข้อมูลให้แก่ผู้ใช้ ด้วย
ที่ชั้นนี้ก็คือ web form ของเราที่มี control ที่ใช้แสดงค่าข้อมูล ใช้รับข้อมูลวางอยู่
ผมเคยสงสัยครับว่าทำไมมีชั้นที่ 3 อีก ในเมื่อรับส่งค่าจาก presentation layer ได้โดยตรงเลย ในทางปฏิบัติเราอาจจะสร้างชั้นที่ 3 กับ 4 เป็น ชั้นเดียวกันเลยก็ได้ครับ
เพียงแต่การแก้ไขน่าจะยุ่งยากกว่า การแบ่งออกเป็นส่วนๆแบบนี้
ย้อนไปที่ปัญหาของผมครับ ที่ผมเคยถามคนอื่นๆ
ผมแก้ไขด้วยการใส่ Function การตรวจสอบ username
ลงไปที่ชั้น Bussiness logic layer นี้โดยรับค่ามาจาก Presentation layer
เรื่อง n Tier นี้มีประโยชน์กับ Developer ทุกท่านนะครับ
หากเราจัดวางกระบวนการต่างๆไว้ดีแล้ว จะช่วยให้การดำเนินการพัฒนาไม่กระเทือน(มาก)นัก
หากมีการขอให้แก้ไขจากผู้ว่าจ้างพัฒนาระบบ หรือผู้ใช้
ดีครับ แบ่งปันความรู้ให้เพื่อน ๆ ทราบ
ขอบคุณมากครับ
ยินดีครับ
ขอบคุณที่เข้ามาเม้นนะครับ
แล้วถ้าเทียบกับ mvc หละคับ ต่างกันรึป่วา
เป็นคำถามที่ดีมากครับ
ลักษณะโดยรวมแนวคิดคือการแยกส่วนการทำงานคล้ายกันครับ
แต่วิธีการนั้นไม่เหมือนกัน
1.Physical / Logical
การทำงานแบบ n Tier มักมีการเชื่อมต่อแบบ Physical
คืออาจมี db server ที่ทำหน้าที่ Tier ล่างสุด ,
มี Web App Server ทำหน้าที่ Business Logic
และใช้ Web Browser เป็น Presentation Tier
ในขณะที่แบบ mvc เป็นการนำ Software มาทำงานร่วมกันแบบแยกส่วน (แบบ Logical)
ภายในมี Model-View-Control ที่ทำหน้าที่ร่วมกัน
โดยทั้งสามส่วนนี้เป็นเพียง File ที่ทำหน้าที่ของแต่ละส่วนเท่านั้น
ลักษณะการเชื่อมต่อของ n Tier เป็นการส่งผ่านจาก Layer ล่างไปหาบน หรือบนลงมาล่าง ไม่มีกระโดดข้าม
แต่การทำงานของ MVC จะมีการทำงานโดยตรงและอ้อมดูจากลิ้งด้านล่าง
http://en.wikipedia.org/wiki/Model%E2%80%93View%E2%80%93Controller
การทำงานจะมี Controller เป็นตัวกลางในการจัดการ
โดยรับ input จาก View และให้ส่งข้อมูล output จาก model ไปยัง View
ลองศึกษาจาก
http://stackoverflow.com/questions/698220/mvc-vs-n-tier-architecture
ดูครับ
ขอบคุณมากสำหรับคำตอบครับ
ขอถามอีกข้อนะ คือ Service layer คือส่วนที่แยกออกมาจาก Controller ของ MVC ใช่ป่าวครับ
ซึ่งจะย้ายมาอยู่ในส่วนของ Model แทน ทำหน้าที่เป็นตัวกลางละหว่าง Controller กับ Repository
แล้วถ้าเทียบกับแบบ 3-Tier ละครับจะจัดอยู่ในชั้นใหนหรอครับ ตอนนี้กำลังศึกษาเรื่อง MVC อยู่
ขอบคุณล่วงหน้าสำหรับคำตอบครับ
จะอยู่ใน BLL ครับ