Naming Conventions
!!! info “Guideline Metadata”
**Version**: 1.0.0
**Last Modified**: 2025-01-19T00:00:00Z
**Category**: Core Guidelines
**Priority**: Critical
Standardized naming patterns across all projects and technologies.
General Rules
Universal Principles
-
Descriptive over Short -
getUserById()
notgetUser()
-
No Abbreviations -
userManager
notusrMgr
- Consistent Language - All names in English
- No Magic Numbers - Use named constants
Casing Standards
- camelCase: Variables, functions, methods
- PascalCase: Classes, interfaces, components, types
- kebab-case: Files, URLs, CSS classes
- SCREAMING_SNAKE_CASE: Constants, environment variables
- snake_case: Database tables, columns
Files and Folders
File Naming
# Good
user-provider.ts
order-manager.ts
payment-service.ts
user-profile.component.svelte
# Bad
UserProvider.ts
orderMgr.ts
payment_service.ts
Folder Structure
src/
├── providers/
├── managers/
├── io/
├── models/
├── mappers/
├── helpers/
├── constants/
└── types/
Functions and Methods
Naming Patterns
// CRUD Operations
getUserById(id: string)
createUser(userData: CreateUserRequest)
updateUser(id: string, changes: UpdateUserRequest)
deleteUser(id: string)
// Boolean Functions
isValid(data: unknown): boolean
hasPermission(user: User, action: string): boolean
canAccess(resource: Resource): boolean
// Async Functions
async fetchUsers(): Promise<User[]>
async saveUser(user: User): Promise<void>
// Validation
validateEmail(email: string): ValidationResult
validatePassword(password: string): ValidationResult
// Transformation
mapUserToDto(user: User): UserDto
parseUserInput(input: string): ParsedUser
Function Categories
- get/fetch: Retrieve data (get = sync, fetch = async)
- create/add: Create new entities
- update/modify: Change existing entities
- delete/remove: Remove entities
- validate: Check data validity
- parse: Convert data formats
- map: Transform data structures
- calculate: Perform computations
- generate: Create derived data
Variables
Descriptive Names
// Good
const userAccountBalance = 150.50;
const isUserLoggedIn = checkAuth();
const maxRetryAttempts = 3;
// Bad
const balance = 150.50;
const loggedIn = checkAuth();
const max = 3;
Collection Names
// Arrays/Lists
const users = []; // plural
const userList = []; // explicit list
const activeUsers = []; // descriptive
// Maps/Objects
const userById = new Map();
const configByEnvironment = {};
// Sets
const uniqueUserIds = new Set();
const visitedPages = new Set();
Classes and Interfaces
Classes
// Service classes
class UserProvider {}
class OrderManager {}
class PaymentService {}
// Model classes
class User {}
class Order {}
class PaymentRequest {}
// Helper classes
class DateHelper {}
class ValidationHelper {}
class CryptoHelper {}
Interfaces
// Data contracts
interface User {}
interface CreateUserRequest {}
interface UserResponse {}
// Behavior contracts
interface UserProvider {}
interface PaymentGateway {}
interface Logger {}
// Configuration
interface DatabaseConfig {}
interface ApiSettings {}
Database Naming
Tables
-- Use singular, snake_case
users
user_accounts
order_items
payment_transactions
-- Not plural or camelCase
user -- singular
userAccounts -- camelCase
Columns
-- Descriptive, snake_case
user_id
email_address
created_at
updated_at
is_active
account_balance
-- Foreign keys with table prefix
user_id (references users.id)
order_id (references orders.id)
Indexes
-- Pattern: idx_table_column(s)
idx_users_email
idx_orders_user_id_created_at
idx_payments_status_date
Constants and Enums
Constants
// Application constants
const MAX_LOGIN_ATTEMPTS = 3;
const DEFAULT_PAGE_SIZE = 20;
const API_BASE_URL = 'https://api.example.com';
// Error messages
const ERROR_USER_NOT_FOUND = 'User not found';
const ERROR_INVALID_CREDENTIALS = 'Invalid credentials';
Enums
// Status enums
enum UserStatus {
Active = 'active',
Inactive = 'inactive',
Suspended = 'suspended'
}
// Action enums
enum PaymentAction {
Charge = 'charge',
Refund = 'refund',
Authorize = 'authorize'
}
Component Naming (Svelte/React)
Component Files
// PascalCase.svelte
UserProfile.svelte
OrderSummary.svelte
PaymentForm.svelte
// Page components
UserDashboard.svelte
OrderHistory.svelte
Component Properties
// Props use camelCase
interface UserProfileProps {
userId: string;
showActions: boolean;
onUserUpdate: (user: User) => void;
}
API Naming
Endpoints
// RESTful patterns
GET /api/users # Get all users
GET /api/users/{id} # Get specific user
POST /api/users # Create user
PUT /api/users/{id} # Update user
DELETE /api/users/{id} # Delete user
// Action endpoints
POST /api/users/{id}/activate
POST /api/orders/{id}/cancel
POST /api/payments/{id}/refund
Request/Response Types
// Request DTOs
interface CreateUserRequest {}
interface UpdateOrderRequest {}
interface ProcessPaymentRequest {}
// Response DTOs
interface UserResponse {}
interface OrderListResponse {}
interface PaymentStatusResponse {}
Environment Variables
Naming Pattern
# Pattern: COMPONENT_PURPOSE_DETAIL
DATABASE_CONNECTION_STRING
API_BASE_URL
REDIS_CACHE_HOST
SMTP_SERVER_HOST
JWT_SECRET_KEY
# Environment specific
DEV_DATABASE_URL
PROD_DATABASE_URL
TEST_API_KEY
Test Files
Test File Names
# Pattern: [component].test.[ext]
user-provider.test.ts
order-manager.test.ts
payment-service.test.ts
# Integration tests
user-api.integration.test.ts
payment-flow.e2e.test.ts
Test Function Names
describe('UserProvider', () => {
describe('getUserById', () => {
it('should return user when id exists', () => {});
it('should return null when id does not exist', () => {});
it('should throw error when id is invalid', () => {});
});
});
Anti-Patterns to Avoid
Bad Naming Examples
// Too generic
const data = fetchStuff();
const result = doThing();
// Misleading
const getUsersAsync(); // Not actually async
const user = getUsers(); // Returns array
// Abbreviations
const usrMgr = new UserManager();
const btnClk = handleClick;
// Inconsistent
const user_id = 1; // mixing snake_case in camelCase context
const UserID = 2; // inconsistent casing
Good Alternatives
// Specific and clear
const userAccounts = fetchUserAccounts();
const validationResult = validateUserInput();
// Accurate naming
const getUsers(); // sync function
const fetchUsersAsync(); // async function
// Full words
const userManager = new UserManager();
const handleButtonClick = handleClick;
// Consistent casing
const userId = 1;
const userAccountId = 2;