TỔNG QUAN
I. Mục đích
Tài liệu này nhằm:
- Thống nhất cách quản lý source code trong dự án
- Giảm xung đột khi làm việc nhóm
- Đảm bảo code dễ đọc, dễ review, dễ bảo trì
- Làm căn cứ xử lý khi vi phạm quy trình kỹ thuật
Quy định này áp dụng cho toàn bộ thành viên tham gia phát triển và chỉnh sửa source code của dự án.
II. Nguyên tắc chung
1. Không làm việc trực tiếp trên nhánh chính
- Không commit trực tiếp vào main
- Không commit trực tiếp vào develop
- Mọi thay đổi phải thông qua nhánh riêng và Pull Request
Vi phạm quy định này được xem là vi phạm quy trình kỹ thuật.
2. Mọi thay đổi đều phải trace được
- Mỗi commit phải gắn với task hoặc issue cụ thể
- Không commit không rõ mục đích
- Không chỉnh sửa code mà không có liên quan đến task
Code không trace được nguồn gốc được xem là không hợp lệ.
3. Code phải ưu tiên tính rõ ràng
- Viết code để người khác đọc được
- Không tối ưu hóa sớm khi chưa cần thiết
- Không viết logic phức tạp nếu có thể tách nhỏ
Code khó đọc, khó hiểu sẽ bị yêu cầu chỉnh sửa trong quá trình review.
PHẦN A – QUY ĐỊNH GIT WORKFLOW
III. Cấu trúc nhánh
Dự án sử dụng cấu trúc nhánh:
main: nhánh productiondevelop: nhánh tích hợp chungfeature/*: phát triển tính năngbugfix/*: sửa lỗihotfix/*: sửa lỗi khẩn cấp production
Không tạo nhánh tự do ngoài quy ước trên nếu chưa được thống nhất.
IV. Quy trình thực hiện task
4. Tạo nhánh
Nhánh phải được tạo từ develop:
Luôn pulldevelopmới nhất trước khi tạo nhánhKhông tạo nhánh từ nhánh cá nhân khác
Quy ước đặt tên nhánh:
feature/TASKID-mo-ta-nganbugfix/TASKID-mo-ta-nganhotfix/TASKID-mo-ta-ngan
Yêu cầu:
Không dùng tiếng Việt có dấuKhông viết hoa tùy ýKhông đặt tên chung chung như: fix, test, abc
5. Commit
Mỗi commit phải:
Có nội dung rõ ràngGắn với mã taskPhản ánh đúng thay đổi thực tế
Cấu trúc commit message:
[TASK-ID] Loại thay đổi: Mô tả ngắn
Loại thay đổi bao gồm:
AddFixUpdateRefactorRemoveOptimizeDocs
Không chấp nhận commit message không có ý nghĩa.
6. Pull Request
Khi hoàn thành task:
Push nhánh lên remoteTạo Pull Request vàodevelopMô tả rõ:Mục đích thay đổiPhạm vi ảnh hưởngĐiểm cần lưu ý
Không tự ý merge khi chưa được review.
7. Review
Mỗi Pull Request phải:
Có ít nhất 1 người reviewĐược approve trước khi merge
Reviewer có trách nhiệm:
Đọc và hiểu logicKiểm tra ảnh hưởng hệ thốngYêu cầu chỉnh sửa nếu cần
Approve hình thức hoặc không đọc kỹ được xem là không hoàn thành trách nhiệm review.
8. Merge và xử lý conflict
Người tạo PR chịu trách nhiệm xử lý conflictPhải test lại sau khi resolve conflictKhông force push vào nhánh chung
Sau khi merge, người thực hiện task chịu trách nhiệm theo dõi lỗi phát sinh liên quan.
PHẦN B – QUY ƯỚC CODE
V. Quy ước đặt tên
9. Biến
Sử dụng camelCaseTên phải có ý nghĩaKhông viết tắt khó hiểu
Không sử dụng tên như: a, data1, temp, test nếu không có ý nghĩa rõ ràng.
10. Class và Interface
Sử dụng PascalCaseTên phản ánh đúng chức năng
Ví dụ:
UserSyncServiceAuthControllerDataMappingRepository
Không đặt tên chung chung như: Service1, TestClass.
11. Tên file
Tên file trùng với class chínhKhông đặt tên file không rõ nghĩa
Không sử dụng các tên như: utils2, newfile, test.
VI. Cấu trúc và tổ chức code
12. Phân tầng rõ ràng
Controller không chứa business logic phức tạpService không truy cập database trực tiếp nếu đã có repository layerKhông viết toàn bộ logic trong một file duy nhất
Phải tuân thủ đúng kiến trúc đã thống nhất của dự án.
13. Hàm và logic
Một function chỉ nên thực hiện một nhiệm vụKhông viết function quá dài và khó theo dõiLogic phức tạp phải được tách nhỏ
Nếu một function vượt quá mức hợp lý và khó đọc, reviewer có quyền yêu cầu refactor.
14. Logging
Log phải có mục đích rõ ràngKhông log dữ liệu nhạy cảmKhông để log debug dư thừa trước khi merge
15. Xử lý lỗi
Không catch lỗi mà bỏ quaKhông throw lỗi chung chungMessage lỗi phải rõ ràng, có ngữ cảnh
Không để các khối catch rỗng hoặc bỏ qua exception.
16. Format và kiểm tra tự động
Bắt buộc sử dụng ESLint / Prettier theo cấu hình dự ánKhông merge nếu format saiKhông thay đổi format toàn bộ file nếu không liên quan đến task
VII. Trách nhiệm kỹ thuật
Code trước khi tạo PR phải:Chạy đượcKhông lỗi compileKhông làm hỏng chức năng cũNgười thực hiện task chịu trách nhiệm:Test lại trước khi mergeTheo dõi lỗi phát sinh sau khi mergeKhông đổ lỗi cho quá trình merge nếu chưa kiểm tra kỹ trước đó.
VIII. Xử lý vi phạm
17. Vi phạm mức độ 1 – Yêu cầu chỉnh sửa
Áp dụng khi:
Sai formatSai namingCommit message không đúng quy ướcPR thiếu mô tả
Hình thức xử lý:
Yêu cầu chỉnh sửa trước khi approve
18. Vi phạm mức độ 2 – Từ chối merge
Áp dụng khi:
Không tuân thủ workflowTự ý commit vào nhánh chínhKhông xử lý conflictKhông test trước khi tạo PR
Hình thức xử lý:
Từ chối mergeYêu cầu làm lại theo đúng quy trình
19. Vi phạm mức độ 3 – Đánh giá năng lực kỹ thuật
Áp dụng khi:
Lặp lại vi phạm nhiều lầnKhông tuân thủ quy ước dù đã được nhắcGây ảnh hưởng nghiêm trọng đến hệ thống
Hình thức xử lý:
Trao đổi trực tiếpĐánh giá lại mức độ phù hợp trong dự án
IX. Hiệu lực
Quy định này có hiệu lực kể từ ngày ban hành và áp dụng cho toàn bộ thành viên tham gia phát triển dự án.
Mọi thay đổi về workflow hoặc quy ước kỹ thuật phải được thống nhất trước khi áp dụng.