Content is user-generated and unverified.

Quy tắc chuẩn thiết kế Frontend & Backend

1. Định dạng ngày tháng

Trường hợpFrontend DisplayBackend APIDatabase StorageVí dụ
Ngày hiển thịdd/MM/yyyyISO 8601DATETIME/TIMESTAMP15/07/2025, 2025-07-15T10:30:00Z
Ngày sinhdd/MM/yyyyyyyy-MM-ddDATE15/07/1990, 1990-07-15
Thời gian realtimeHH:mm dd/MM/yyyyISO 8601TIMESTAMP10:30 15/07/2025, 2025-07-15T10:30:00Z
Ngày tạo/cập nhậtdd/MM/yyyy HH:mmISO 8601TIMESTAMP15/07/2025 10:30, 2025-07-15T10:30:00Z

2. Quy tắc chữ hoa/thường

Trường hợpFrontendBackendQuy tắcVí dụ
EmaillowercaselowercaseLuôn chuyển về lowercaseuser@example.com
UsernamelowercaselowercaseChỉ cho phép a-z, 0-9, _john_doe123
Passwordgiữ nguyênhash + saltKhông thay đổi caseMyPassword123!
URL/SluglowercaselowercaseLowercase, dấu gạch ngangbai-viet-moi
Tên ngườiTitle Casegiữ nguyênChữ đầu viết hoaNguyễn Văn An
Tên công tygiữ nguyêngiữ nguyênTheo đúng tên thương hiệuCÔNG TY ABC
Code/IDUPPERCASEUPPERCASEMã định danhUSER_001, ORD_20250715

3. Định dạng tiền tệ

Loại tiền tệFrontend DisplayBackend StorageAPI FormatVí dụ
VND123.456.789 ₫DECIMAL(15,2)number1000000.00
USD$1,234.56DECIMAL(15,2)number1234.56
EUR€1.234,56DECIMAL(15,2)number1234.56
Multi-currency123.456 VNDamount + currency{amount: number, currency: string}{amount: 1000000, currency: "VND"}

4. Validation Rules

Field TypeFrontend ValidationBackend ValidationRegex PatternVí dụ
EmailRequired, Email formatRequired, Email format, Unique^[^\s@]+@[^\s@]+\.[^\s@]+$user@domain.com
Phone (VN)Required, 10-11 digitsRequired, VN format`^(0[35
PasswordMin 8 chars, 1 upper, 1 lower, 1 numberHash + Salt, Strength check^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d@$!%*?&]{8,}$MyPass123!
URLValid URL formatValid URL, Sanitize^https?://.*https://example.com
Số CMND/CCCD9 hoặc 12 sốRequired, Unique`^[0-9]{9}$^[0-9]{12}$`

5. Naming Conventions

ScopeConventionFormatVí dụ
Database Tablessnake_caseSố nhiềuusers, order_items
Database Columnssnake_caseSố ítuser_id, created_at
API Endpointskebab-caseRESTful/api/v1/users, /api/v1/order-items
JSON FieldscamelCaseSố ítuserId, createdAt
CSS Classeskebab-caseBEM methodology.user-card, .btn--primary
JavaScript VariablescamelCaseDescriptiveuserInfo, isLoggedIn
JavaScript FunctionscamelCaseVerb + noungetUserInfo(), validateEmail()
JavaScript ConstantsUPPER_SNAKE_CASEDescriptiveAPI_BASE_URL, MAX_FILE_SIZE

6. File & Folder Structure

ScopeConventionFormatVí dụ
Frontend ComponentsPascalCaseDescriptiveUserCard.vue, LoginForm.jsx
Frontend PagesPascalCaseDescriptiveHomePage.vue, UserProfile.jsx
Frontend UtilscamelCaseDescriptiveformatDate.js, validateEmail.js
Backend ModelsPascalCaseSingularUser.php, OrderItem.js
Backend ControllersPascalCaseController suffixUserController.php, AuthController.js
Backend ServicesPascalCaseService suffixUserService.php, EmailService.js
Imageskebab-caseDescriptiveuser-avatar.jpg, logo-primary.png
CSS/SCSS Fileskebab-caseDescriptiveuser-card.scss, main-layout.css

7. Status & State Management

Trạng tháiFrontend DisplayBackend ValueColor CodeVí dụ
ActiveHoạt độngactive#28a745User status
InactiveKhông hoạt độnginactive#6c757dUser status
PendingĐang chờpending#ffc107Order status
CompletedHoàn thànhcompleted#28a745Order status
CancelledĐã hủycancelled#dc3545Order status
DraftBản nhápdraft#6c757dContent status
PublishedĐã xuất bảnpublished#28a745Content status

8. Error Handling

Loại lỗiFrontend MessageBackend ResponseHTTP StatusVí dụ
ValidationVui lòng nhập email hợp lệ{field: "email", message: "Invalid email format"}400Email format
AuthenticationVui lòng đăng nhập{message: "Unauthorized"}401Login required
AuthorizationBạn không có quyền thực hiện thao tác này{message: "Forbidden"}403Access denied
Not FoundKhông tìm thấy dữ liệu{message: "Resource not found"}404Resource missing
Server ErrorĐã có lỗi xảy ra, vui lòng thử lại{message: "Internal server error"}500System error

9. API Response Format

Trạng tháiFormatVí dụ
Success{success: true, data: {}, message: ""}{success: true, data: {user: {...}}, message: "User created successfully"}
Error{success: false, error: {}, message: ""}{success: false, error: {field: "email"}, message: "Email already exists"}
Pagination{success: true, data: [], pagination: {}}{success: true, data: [...], pagination: {page: 1, limit: 10, total: 100}}

10. Security Standards

ScopeRuleImplementationVí dụ
PasswordMin 8 chars, complexityHash với bcrypt/argon2bcrypt.hash(password, 12)
API KeysEnvironment variablesKhông hardcodeprocess.env.API_KEY
SQL InjectionPrepared statementsParameterized queriesSELECT * FROM users WHERE id = ?
XSSInput sanitizationHTML encodinghtmlspecialchars($input)
CSRFToken validationCSRF tokenscsrf_token()
CORSRestricted originsWhitelist domainsorigin: ['https://mydomain.com']

11. Performance Guidelines

ScopeRuleImplementationVí dụ
DatabaseIndex optimizationIndex các column thường queryCREATE INDEX idx_user_email ON users(email)
APICachingRedis/Memcachedcache.set('user:123', userData, 3600)
FrontendLazy loadingDynamic importsconst Component = lazy(() => import('./Component'))
ImagesOptimizationWebP format, compressionimage.webp, quality: 80
BundleCode splittingChunk optimizationsplitChunks: {chunks: 'all'}

12. Accessibility (A11y)

ElementRequirementImplementationVí dụ
ImagesAlt textalt attribute<img src="..." alt="User avatar">
FormsLabelslabel for inputs<label for="email">Email</label>
ButtonsDescriptive textClear action<button>Đăng nhập</button>
ColorsContrast ratioMin 4.5:1color: #333; background: #fff;
FocusKeyboard navigationTab ordertabindex="0"

Lưu ý quan trọng:

  • Luôn validate dữ liệu ở cả frontend và backend
  • Sử dụng TypeScript để type safety
  • Implement logging đầy đủ cho debug
  • Regular security audit và dependency updates
  • Test coverage tối thiểu 80%
  • Document tất cả API endpoints
  • Backup database định kỳ
Content is user-generated and unverified.
    Quy tắc chuẩn thiết kế Frontend & Backend | Claude