ในการทำงานด้านการพัฒนาโปรแกรม รูปแบบการทำงานอาจจะพัฒนาคนเดียว หรือ ทำงานร่วมกันเป็นทีม ทุกระบบงานจะมีข้อกำหนดการทำงานร่วมกัน และเพื่อให้การพัฒนางานเป็นภาษาเดียวกัน จะมีการกำหนดสภาพแวดล้อมหรือโครงสร้างการทำงานก่อนเริ่มการพัฒนาระบบงาน
แนวคิดหลัก รูปแบบการกำหนดโครงสร้าง 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 | ||
| |- | Properties | launchSettings.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 ที่จำเป็น สำหรับงานบริการเว็บเซอร์วิส ดังนี้
- Microsoft.EntityFrameworkCore
- Microsoft.EntityFrameworkCore.Design
- Microsoft.EntityFrameworkCore.Tools
- ส่วนเชื่อมต่อระบบฐานข้อมูลเชิงสัมพันธ์ (เช่น SqlServer, MySQL, Oracle เป็นต้น)
ส่วนเพิ่มเติม (Option) สำหรับการจัดเก็บ Log การเข้าถึงที่มีฟีเจอร์มากกว่า Log พื้นฐานของเว็บเซิร์ฟเวอร์
- Serilog
- Serilog.AspNetCore
- Serilog.Settings.Configuration
- Serilog.Sinks.File

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

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