-
Notifications
You must be signed in to change notification settings - Fork 20
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #25 from RachaneeSaeng/development-practices
- Loading branch information
Showing
4 changed files
with
92 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
# Design Patterns | ||
Design Patterns เป็นชุดของวิธีการแก้ไขปัญหาที่ใช้บ่อยในวิศวกรรมซอฟต์แวร์ ซึ่งออกแบบมาเพื่อเพิ่มความสามารถในการนำกลับมาใช้ใหม่และความยืดหยุ่นของโค้ด โดยเฉพาะในการแก้ปัญหาที่มีลักษณะเดียวกันและมีความซับซ้อน โดยมีรูปแบบการใช้งานที่เป็นไปตามหลักการที่ได้รับการยอมรับว่าเป็นวิธีการที่ดีในการแก้ปัญหาลักษณะนั้นๆ | ||
|
||
## ประเภทของ Design Patterns | ||
Design Patterns ที่ออกแบบโดย Gang of Four ประกอบด้วย 23 รูปแบบ ซึ่งแบ่งออกเป็น 3 กลุ่มหลักๆ ดังนี้: | ||
|
||
1. **Creational Patterns**: เกี่ยวข้องกับวิธีการสร้าง object | ||
2. **Structural Patterns**: เกี่ยวข้องกับการจัดโครงสร้าง class และ object | ||
3. **Behavioral Patterns**: เกี่ยวข้องกับการสื่อสารและการทำงานร่วมกันระหว่าง object | ||
|
||
ซึ่ง patterns ทั้งหมดมีการอธิบายอย่างละเอียดรวมทั้งมีภาพประกอบในเวบไซต์ [Refactoring Guru](https://refactoring.guru/design-patterns) | ||
แต่ถ้ายังไม่มีเวลาศึกษาทั้งหมด สามารถเริ่มต้นจาก Cheat sheet ด้านล่างนี้ได้เลย | ||
|
||
## Design Pattern Cheat Sheet | ||
ผู้เขียน: คุณ [เปิ้ล](https://medium.com/@rachanee) | ||
|
||
ในบทความ [Design Pattern Cheat Sheet](https://medium.com/@rachanee/design-pattern-cheatsheet-8a8ea94e3777) มีสรุป Design Patterns ทั้ง 23 รูปแบบให้สั้นกระชับ เข้าใจง่าย มีรูปภาพประกอบพร้อมคำอธิบาย รวมทั้งข้อดีและข้อควรระวังของแต่ละ pattern ไว้ให้ด้วย แนะนำให้พิมพ์เก็บไว้ใช้อ้างอิงเวลาออกแบบ class และ object ได้เลย | ||
|
||
## ตัวอย่างการใช้ Design Patterns | ||
- ใช้ Singleton Pattern ในการจัดการการเข้าถึงทรัพยากรที่ใช้ร่วมกัน เช่น การเชื่อมต่อฐานข้อมูล เพื่อหลีกเลี่ยงการสร้างหลาย instance ที่ไม่จำเป็น | ||
- ใช้ Observer Pattern ในการออกแบบระบบที่ต้องการการแจ้งเตือนและการตอบสนองต่อการเปลี่ยนแปลงของสถานะ เช่น ในระบบการแจ้งเตือน (notification system) | ||
- ใช้ Factory Method เพื่อสร้างอ็อบเจ็กต์ในลักษณะที่ทำให้การสร้างอ็อบเจ็กต์นั้นยืดหยุ่นและสามารถปรับเปลี่ยนได้ตามความต้องการ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
--- | ||
outline: deep | ||
title: 'Software Development Practices' | ||
description: กระบวนการ วิธีการ และหลักการที่ใช้ในการพัฒนาและดูแลรักษาซอฟต์แวร์ | ||
--- | ||
|
||
# Software Development Practices | ||
**Software Development Practices** คือ แนวคิด กระบวนการ วิธีการ และหลักการที่ใช้ในการพัฒนาและดูแลรักษาซอฟต์แวร์ให้มีคุณภาพสูง สามารถตอบสนองความต้องการของผู้ใช้ได้อย่างดี และช่วยให้ทีมพัฒนาทำงานได้อย่างมีประสิทธิผลเพื่อบรรลุเป้าหมายที่กำหนดไว้ | ||
|
||
## ความสำคัญของ Software Development Practices | ||
1. **คุณภาพของซอฟต์แวร์**: การใช้วิธีการที่เหมาะสมช่วยให้ซอฟต์แวร์มีความเสถียร ปลอดภัย และทำงานได้ตรงตามความต้องการของผู้ใช้ | ||
2. **ประสิทธิภาพการทำงาน**: การมีแนวทางและขั้นตอนที่ชัดเจนทำให้ทีมสามารถทำงานร่วมกันได้อย่างมีประสิทธิภาพ ลดความสับสน และช่วยให้โครงการเสร็จทันตามกำหนดเวลา | ||
3. **การจัดการความเสี่ยง**: การใช้แนวทางปฏิบัติที่ดีช่วยในการตรวจสอบและลดความเสี่ยงที่อาจเกิดขึ้นในการพัฒนาซอฟต์แวร์ในทุกขั้นตอน ตั้งแต่การวางแผน การจัดลำดับความสำคัญ การเขียนโค้ด การทดสอบ ไปจนถึงการ deploy และ maintenance | ||
|
||
## ตัวอย่าง Software Development Practices | ||
### Ways of Working | ||
- **Agile Methodologies**: เช่น Scrum และ Kanban ที่เน้นการพัฒนาแบบ Iterative Development และการปรับปรุงอย่างต่อเนื่อง | ||
- **Pair Programming**: การทำงานคู่กัน 2 คน(หรือมากกว่า) เพื่อเพิ่มคุณภาพและลดข้อผิดพลาด | ||
|
||
### Coding Practices | ||
- **Automated Testing**: การเขียนเทสอัตโนมัติเพื่อตรวจสอบความถูกต้องแทนการใช้การทดสอบด้วยมือเพื่อทดสอบระบบอย่างต่อเนื่องและมีประสิทธิภาพ | ||
- **Test-Driven Development (TDD)**: การเขียนเทสก่อนแล้วจึงเขียนโค้ดเพื่อให้เทสนั้นๆ ผ่าน ช่วยให้โค้ดที่เขียนมีคุณภาพและทดสอบได้ง่ายขึ้น (testable code) รวมทั้งทำให้มั่นใจว่าเทสที่เขียนสามารถจับข้อผิดพลาดได้จริง (red-green-refactor) | ||
- **Version Control**: การใช้ระบบควบคุมเวอร์ชัน เช่น Git เพื่อจัดการการเปลี่ยนแปลงของโค้ด และทำให้ทีมสามารถทำงานร่วมกันได้ง่ายขึ้น | ||
- **Code Refactoring**: การปรับปรุงโค้ดเพื่อเพิ่มความเข้าใจ ลดความซับซ้อน และเพิ่มประสิทธิภาพของโค้ดอย่างต่อเนื่อง | ||
- **Code Review**: การตรวจสอบโค้ดโดยเพื่อนร่วมทีมเพื่อเพิ่มคุณภาพและลดข้อผิดพลาดก่อนการ merge โค้ดเข้า main branch | ||
|
||
### Design Practices | ||
- **Design Patterns**: ใช้รูปแบบการออกแบบที่ได้รับการยอมรับว่าเป็นวิธีการที่ดีในการแก้ปัญหาที่คล้ายกัน | ||
- **Domain-Driven Design (DDD)**: การออกแบบระบบโดยให้ความสำคัญกับโดเมนของระบบ และแบ่งระบบออกเป็นโดเมนย่อยๆ | ||
- **Microservices Architecture**: การออกแบบระบบเป็นส่วนย่อยๆ ที่เป็นอิสระกัน ทำให้ง่ายต่อการปรับปรุง และลดความซับซ้อนของระบบ | ||
|
||
### Deployment Practices | ||
- **Continuous Integration (CI)**: การ integrate โค้ดที่พัฒนาใหม่เข้าสู่ระบบหลัก หรือ main branch บ่อยๆ เพื่อตรวจสอบความถูกต้องและลดปัญหาการ merge conflicts | ||
- **Continuous Deployment (CD)**: การ deploy โค้ดใหม่เข้าสู่ production อยู่เรื่อยๆ โดยไม่รอ deploy ที่เดียวเยอะๆ (big-bang release) เพื่อลดความเสี่ยงและช่วยให้เห็นปัญหาได้เร็วขึ้น | ||
|
||
### Other Practices: | ||
- **Containerization**: การใช้เทคโนโลยี container เช่น Docker เพื่อแยกแยะและจัดการทรัพยากรอย่างมีประสิทธิภาพ | ||
- **Infrastructure as Code (IaC)**: การจัดการ infrastructure ในรูปแบบของโค้ดซึ่งมี version control และสามารถ deploy ได้โดยอัตโนมัติ | ||
- **Living Documentation**: การอัปเดตเอกสารประกอบการพัฒนาซอฟต์แวร์อยู่เสมอเพื่อให้สอดคล้องกับโค้ดปัจจุบันจะช่วยให้ทีมพัฒนาและผู้มีส่วนเกี่ยวข้องสามารถเข้าใจระบบและการเปลี่ยนแปลงของระบบได้ตลอดเวลา | ||
- **Error Handling and Logging**: จัดการข้อผิดพลาดในระบบและการบันทึกข้อมูลเพื่อการ investigate ปัญหาอย่างมีประสิทธิภาพ | ||
- **Continuous Monitoring**: การมีระบบตรวจสอบและ monitor ระบบที่มีประสิทธิภาพ เพื่อให้สามารถเห็นและแก้ปัญหาได้อย่างรวดเร็ว | ||
- **Security Best Practices**: การปฏิบัติตามแนวทางที่ดีในเรื่องความปลอดภัยของระบบเพื่อป้องกันปัญหาด้านความปลอดภัย เช่น การโจมตีหรือการเข้าถึงข้อมูลที่ไม่เหมาะสม | ||
- **Performance Optimization**: การปรับปรุงประสิทธิภาพของระบบเพื่อความพอใจของผู้ใช้งานและการประหยัดทรัพยากรของระบบ |