Files
sys-analysis-design/.claude/skills/sa-3-enablement/templates/architecture-guidelines.md
Leonard-ThindPad-P50 c81f249920 init git
2026-09-08 10:26:21 +07:00

6.6 KiB

AGD — Architecture Guidelines —

Version 1.0
Date YYYY-MM-DD
Author (skill sa-3-enablement)
Status 🟡 Draft
Approved by Tech Lead: —
Source SAD_… v1.0 · ADR-001..0nn · ICD_… v1.0 · FAIL_… v1.0
Scope
Confidence 🟢

Change Log

Version Date Người sửa Thay đổi ADR
1.0 Bản đầu —

Tài liệu này chỉ chứa thứ truy được về một ADR hoặc QAS. Quy ước đặt tên biến, thứ tự import, độ dài hàm thuộc Tech Lead và nằm ở tài liệu khác. Trộn hai loại làm dev ngừng phân biệt cái nào quan trọng.


1. Đọc gì trước

Bạn là Đọc theo thứ tự
Dev mới vào dự án §2 → reference implementation → SAD §4
Dev thêm một tính năng §3 (ràng buộc) → ICD cho interface liên quan
Dev sửa một bug §4 (đường lỗi) → FAIL
Người review PR §3 + bảng FIT

2. Reference implementation

Đường dẫn <repo>/<module mẫu>
Chạy thử <lệnh>
Thể hiện các quyết định ADR-002, ADR-004, ADR-007

Module mẫu thể hiện đủ sáu thứ. Thiếu thứ nào thì dev sẽ tự bịa thứ đó:

# Thể hiện Ở file nào
1 Cấu trúc module chuẩn
2 Xử lý lỗi + mã lỗi theo ICD §3
3 Log có correlation id
4 Gọi phụ thuộc ngoài có timeout/retry theo FAIL
5 Kiểm tra quyền theo SEC §3
6 Kiểm thử ở đủ các mức

🔴 Code luôn thắng văn bản về khả năng được đọc. Mọi thứ giải thích dài hơn 10 dòng nên chuyển thành code mẫu.

3. Ràng buộc kiến trúc

Bốn cột bắt buộc. Ràng buộc không có nguồn là sở thích cá nhân, và team sẽ nhận ra.

3.1 Ranh giới module & phụ thuộc

# Ràng buộc Nguồn Ví dụ đúng / sai Cách kiểm
1 Tầng domain không import tầng infra ADR-002 ✅ domain/Order.ts không import infra/ · ❌ import infra/db FIT-01
2 Module chỉ giao tiếp qua interface công khai ADR-004 FIT-02

3.2 Dữ liệu

# Ràng buộc Nguồn Ví dụ đúng / sai Cách kiểm
Chỉ hệ thống chủ được ghi thực thể X DAT §1
Truy vấn danh sách phải có phân trang QAS-001
Không dùng dữ liệu production ở non-prod SEC §5 FIT-nn

3.3 Interface & contract

# Ràng buộc Nguồn Ví dụ đúng / sai Cách kiểm
Số lớn (id, tiền) truyền dạng string ICD §1 ✅ "1234567890123456789" · ❌ 1234567890123456789 FIT-nn
Thời gian dùng ISO-8601 UTC ICD §1
Lỗi nghiệp vụ trả HTTP 4xx ICD §1 ❌ 200 kèm {success:false}
Đổi contract breaking phải qua ADR ICD §3 FIT-nn (Pact)

3.4 Bảo mật

# Ràng buộc Nguồn Ví dụ đúng / sai Cách kiểm
Không có secret trong mã nguồn SEC §6 FIT-nn
Kiểm quyền ở tầng service, không chỉ ở gateway SEC §3 ⚠️ Khuyến nghị
Không log dữ liệu PII SEC §5 ⚠️ Khuyến nghị

3.5 Ràng buộc chỉ là khuyến nghị

Quy tắc D8: không kiểm tự động được ⇒ phải ghi nhãn, kèm cách kiểm thủ công.

Ràng buộc Vì sao không tự kiểm được Kiểm thủ công thế nào Tần suất

4. Đường lỗi — dev phải làm gì

Trích từ FAIL. Đây là chỗ dev hay tự bịa nhất, nên viết cực cụ thể.

Gọi tới Timeout Retry Idempotent Hết retry Người dùng thấy gì
CSDL chính … ms 0 — trả 503
API ngoài … … ms 3 · mũ + jitter ✅ khoá … vào hàng đợi

Mẫu code chuẩn: <đường dẫn trong reference implementation>

🔴 Không tự đặt timeout. Ngân sách timeout theo tầng ở FAIL §2 — đặt sai một tầng làm sai cả chuỗi.

5. Log, metric, trace

Quy tắc Nguồn
Định dạng log JSON, các trường bắt buộc: ts, level, correlationId, service, msg SAD §9
Correlation id lấy từ header …, truyền xuống mọi lời gọi SAD §9
Mức log error cho lỗi cần người xử lý · warn cho lỗi tự hồi phục
Cấm log PII, secret, toàn bộ request body SEC §5
Metric bắt buộc mỗi endpoint số request, tỉ lệ lỗi, phân vị độ trễ QAS

6. Kiểm thử

Mức Kiểm gì Bắt buộc khi nào Ngưỡng
Đơn vị logic nghiệp vụ thuần mọi rule trong BR của BA
Tích hợp ranh giới với CSDL/hàng đợi mọi repository
Contract IF-nnn không đổi breaking mọi interface công khai FIT-nn
Hiệu năng QAS mức Must trước mỗi release FIT-nn

7. Khi nào phải hỏi SA

Ranh giới rõ ràng giúp team không bị chặn, và SA không thành nút thắt.

Tình huống Quyết định bởi
Đặt tên, cấu trúc thư mục trong module, chọn thư viện tiện ích Dev / Tech Lead — không cần hỏi
Thêm một bảng vào CSDL của chính module mình Tech Lead
Thêm một endpoint theo đúng chuẩn ICD Tech Lead
Gọi trực tiếp dữ liệu của module khác Hỏi SA — chạm ADR-004
Thêm một phụ thuộc hạ tầng mới (cache, queue, dịch vụ ngoài) Hỏi SA
Đổi contract công khai theo hướng breaking Hỏi SA — cần ADR
Bỏ qua một ràng buộc ở §3 vì gấp Hỏi SA — thành TD-nn có hạn

Chấm nhanh: ../../sa-lifecycle/references/decision-radar.md §2. Điểm ≥ 5 ⇒ hỏi SA.

8. Ngoài phạm vi

Những gì tài liệu này KHÔNG quy định:

  • Quy ước đặt tên, format code, độ dài hàm ⟶ tài liệu của Tech Lead
  • Quy trình Git, đặt tên nhánh, mẫu commit ⟶ tài liệu quy trình
  • Thiết kế giao diện, design system ⟶ tài liệu thiết kế

9. Open Questions

ID Câu hỏi Hỏi ai Từ ngày Chặn gì