วิธีการสร้างสภาพแวดล้อมเพื่อการพัฒนาโปรแกรมการบริการเว็บเซอร์วิสด้วย ASP.NET Core Web API

ในการทำงานด้านการพัฒนาโปรแกรม รูปแบบการทำงานอาจจะพัฒนาคนเดียว หรือ ทำงานร่วมกันเป็นทีม ทุกระบบงานจะมีข้อกำหนดการทำงานร่วมกัน และเพื่อให้การพัฒนางานเป็นภาษาเดียวกัน จะมีการกำหนดสภาพแวดล้อมหรือโครงสร้างการทำงานก่อนเริ่มการพัฒนาระบบงาน

แนวคิดหลัก รูปแบบการกำหนดโครงสร้าง Folder การพัฒนาระบบ ดังนี้

Technical Role

  • แบ่งตามหน้าที่ทางเทคนิค เช่น controllers/, models/, views/, services/
  • เหมาะกับโปรเจกต์ขนาดเล็กถึงกลาง หรือโครงสร้างแบบ MVC มาตรฐาน

Feature / Domain

  • รวมทุกอย่างของฟีเจอร์นั้นไว้ด้วยกัน เช่น features/auth/, features/cart/
  • เหมาะกับโปรเจกต์ขนาดใหญ่ ช่วยให้ลบหรือขยายฟีเจอร์ได้โดยไม่กระทบส่วนอื่น

สำหรับการพัฒนาโปรแกรมการบริการข้อมูลเว็บเซอร์วิส ด้วย ASP.NET Core Web API ใช้โครงสร้างการพัฒนาแบบ MVC (Model-View-Controller) แบ่งส่วนการทำงานแยกโฟลเดอร์กัน เพื่อรองรับการขยายตัวและแยกการทำงานของทั้ง 3 ส่วนออกจากกันเป็นบริการย่อยได้ แต่ละไฟล์จะเป็นการเขียนโปรแกรมเชิงวัตถุ (Object Oriented) สร้างคลาสเพื่อควบคุมการทำงาน (Controller) เชื่อมต่อฐานข้อมูล (Model) และแสดงผลลัพธ์หน้าเว็บ (View)

การทำงานของ ASP.NET Core

ใน ASP.NET Core ทุก Request จะวิ่งผ่าน Middleware Pipeline แล้วแสดงผลลัพธ์ของข้อมูลในรูปแบบ JSON

HTTP Request
↓
[ CORS Middleware ]
↓
[ Authentication & Authorization ]
↓
[ Custom Exception Handling Middleware ]
↓
[ Routing / Endpoint Mapping ]
↓
[ Controller Action / Minimal API Handler ]
↓ (EF Core / Service Layer / Database)
HTTP Response (JSON)

การออกแบบและตั้งชื่อไฟล์สำหรับการเขียนโปรแกรม

ใช้รูปแบบการเขียนเมธอดและฟังก์ชันแบบ Camel case ทำให้โค้ดโปรแกรมอ่านง่าย ส่วน Attribute / Field ข้อมูลใช้แบบ Snake case จะมีการใช้ทั้ง Prefix และ Postfix ในการตั้งชื่อคลาส





เปรียบเทียบรูปแบบการตั้งชื่อยอดนิยม.
Source: Junior to Expert / Naming Convention, Camel Case & Kebab Case – Junior to Expert

camelCase

  • คำแรกขึ้นต้นด้วยตัวพิมพ์เล็ก ทุกคำถัดไปขึ้นต้นด้วยตัวพิมพ์ใหญ่ ติดกันทั้งหมด
  • Usecase: ชื่อตัวแปร, ชื่อฟังก์ชัน, ชื่อเมธอด, JSON Keys
  • ตัวอย่าง userProfileImage, calculateTotalPrice
  • รูปแบบใกล้เคียง PascalCase
    (ตัวแรกสุดเป็นตัวใหญ่ เช่น UserProfile)

snake_case

  • ทุกคำเขียนด้วยตัวพิมพ์เล็ก เชื่อมคำด้วยเครื่องหมายขีดล่าง (_)
  • Usecase: ชื่อตัวแปร, ชื่อฟังก์ชัน, ชื่อคอลัมน์ใน Database
  • ตัวอย่าง user_profile_image, calculate_total_price
  • รูปแบบใกล้เคียง SCREAMING_SNAKE_CASE
    (ตัวพิมพ์ใหญ่ทั้งหมด เช่น MAX_BUFFER_SIZE)

โครงสร้าง Folder

สำหรับ ASP.NET Core Web API หากผู้พัฒนาใช้โปรแกรม Visual Studio ในการพัฒนาโปรแกรม เครื่องมือก็จะมีส่วนช่วยสร้างให้การทำงานง่ายขึ้นโดยการเลือก Wizard สร้าง Project แบบ ASP.NET Core Web API โปรแกรมจะให้โครงสร้าง Folder ให้อัตโนมัติ มีรายละเอียดดังนี้

หมายเหตุ: ตัวอักษรสีดำ คือ ที่สร้างให้อัตโนมัติ ตัวอักษรสีน้ำเงิน คือ ที่สร้างเอง

WebApiชื่อ Solution / Project
|-appsettings.jsonค่าคงที่ที่กำหนดในโปรเจกต์
|-Program.csไฟล์หลักที่ทำงานเริ่มต้น
|-bin
|-obj
|-PropertieslaunchSettings.jsonคุณลักษณะของโปรเจกต์
|-Controllers..ไฟล์ Controllersเป็น Folder เก็บไฟล์ Controller บริการเว็บเซอร์วิส
|-Authens..ไฟล์ Classเป็น Folder เก็บไฟล์คลาสควบคุมการกำหนดสิทธิ์การเรียกใช้บริการข้อมูล การจัดเก็บ Log การใช้งาน
|-Models..ไฟล์ Context, Classเป็น Folder เก็บไฟล์คลาสส่วนการเชื่อมต่อฐานข้อมูล
|-Services..ไฟล์ Classเป็น Folder เก็บไฟล์คลาสส่วนการทำงานระหว่างไฟล์คลาส Model และ Controller
|-ViewModelsเป็น Folder เก็บไฟล์คลาสส่วนการกำหนด Attribute ข้อมูล ทำงานระหว่าง Service และ Controller
|-|-Commonเป็น Folder เก็บไฟล์คลาสกำหนด Attribute ที่ใช้ร่วมกันภายในโปรเจกต์
|-|-..ไฟล์ Modelsไฟล์คลาสกำหนด Attribute

เครื่องมือ Visual Studio ที่ใช้งานกันจะมีส่วนบริหารจัดการ Package และ Dependency ที่เรียกว่า NuGet ผ่านหน้าต่าง UI NuGet Package Manager ให้เราใช้งานได้สะดวก สามารถเลือกเวอร์ชันที่สามารถทำงานเข้ากันได้กับโปรเจกต์ของเรา นอกเหนือจากการใช้งานแบบ CLI (dotnet add package)

Note: nuget.org คล้ายกับ packagist.org (PHP) หรือ Npm (Node.js) หรือ Pip (Python) คือ ตัวจัดการ Package, Extension และ Dependency ที่ช่วยให้การพัฒนาโปรแกรมรองรับฟังชันก์หลักและส่วนเสริมในการทำงานของโปรแกรมได้ ไฟล์ที่ได้จากการติดตั้งผ่าน NuGet ส่วนที่ต่างจากภาษาอื่น ที่จะได้ Source code มาวางใน Folder ตรง ๆ แต่ NuGet ส่วนใหญ่จะให้ไฟล์ในรูปแบบไฟล์ DLL ที่คอมไพล์แล้ว และเก็บไว้ที่ cache ส่วนกลางของเครื่อง (~/.nuget/packages) แทนที่จะโหลดซ้ำลงในทุกโฟลเดอร์โปรเจกต์

Package ที่จำเป็น สำหรับงานบริการเว็บเซอร์วิส ดังนี้

  1. Microsoft.EntityFrameworkCore
  2. Microsoft.EntityFrameworkCore.Design
  3. Microsoft.EntityFrameworkCore.Tools
  4. ส่วนเชื่อมต่อระบบฐานข้อมูลเชิงสัมพันธ์ (เช่น SqlServer, MySQL, Oracle เป็นต้น)

ส่วนเพิ่มเติม (Option) สำหรับการจัดเก็บ Log การเข้าถึงที่มีฟีเจอร์มากกว่า Log พื้นฐานของเว็บเซิร์ฟเวอร์

  1. Serilog
  2. Serilog.AspNetCore
  3. Serilog.Settings.Configuration
  4. Serilog.Sinks.File

Note: ในการติดตั้ง Package และ Dependency ในการพัฒนาเราควรศึกษารายละเอียด เวอร์ชันที่สนับสนุน การอ้างอิงและติดตั้ง Package ที่ได้รับการรับรองและมีความปลอดภัยในการพัฒนาโปรแกรม

ตัวอย่างโครงสร้าง Folder ของโปรเจกต์

ประโยชน์ของการสร้างหรือจัดสภาพแวดล้อมในการพัฒนาโปรแกรม

  • ช่วยลดเวลาการเริ่มต้นใหม่ของนักพัฒนาใหม่ในทีม
  • ลดความขัดแย้งในการ Merge code
  • ง่ายต่อการค้นหาและแก้ไขปัญหาเฉพาะจุดได้
  • พัฒนาต่อยอดทำได้ง่าย

🙂 สำหรับนักพัฒนาที่เพิ่งเข้าวงการ สามารถใช้เป็นแนวทางการพัฒนา ประยุกต์ใช้งานได้กับทุกโปรแกรมภาษา ช่วยให้การสื่อสารระหว่างนักพัฒนาโปรแกรมระดับต้นและระดับชำนาญมีความเข้าใจในการสร้างสภาพแวดล้อมและโครงสร้างในงานพัฒนาโปรแกรมดีขึ้น

ผู้เขียน

Amornrat Uamanasakul
ฝ่ายระบบสารสนเทศ
สำนักคอมพิวเตอร์