Clean Code
Osztályok és struktúra
Single Responsibility Principle, God Object elkerülése, kis, fókuszált osztályok.
Osztályok és struktúra
Az objektumorientált kódban az osztályok a kód szervezésének alapegységei. A tiszta osztályok a Single Responsibility Principle (SRP) mentén épülnek fel.
Single Responsibility Principle (SRP)
Egy osztálynak egyetlen oka legyen a változásra.
// ❌ Rossz – az osztály egyszerre felelős adatkezelésért, mentésért és megjelenítésért
class User {
constructor(name, email) {
this.name = name;
this.email = email;
}
saveToDatabase() {
db.insert('users', { name: this.name, email: this.email });
}
renderProfileCard() {
return `<div class="profile">${this.name} - ${this.email}</div>`;
}
sendWelcomeEmail() {
emailService.send(this.email, 'Welcome!', `Hi ${this.name}`);
}
}// ✅ Javított – minden osztály egy felelősséggel rendelkezik
class User {
constructor(name, email) {
this.name = name;
this.email = email;
}
}
class UserRepository {
save(user) {
db.insert('users', { name: user.name, email: user.email });
}
}
class UserProfileRenderer {
render(user) {
return `<div class="profile">${user.name} - ${user.email}</div>`;
}
}
class UserNotificationService {
sendWelcome(user) {
emailService.send(user.email, 'Welcome!', `Hi ${user.name}`);
}
}Kis, összefókuszált osztályok
// ❌ Rossz – az osztály mindenért felelős (God Object anti-pattern)
class ApplicationManager {
handleUserAuth() { ... }
processPayment() { ... }
generateReport() { ... }
sendNotifications() { ... }
manageInventory() { ... }
}// ✅ Javított – szétválasztott, egyértelmű felelősségek
class AuthService { handleUserAuth() { ... } }
class PaymentProcessor { processPayment() { ... } }
class ReportGenerator { generateReport() { ... } }
class NotificationService { sendNotifications() { ... } }
class InventoryManager { manageInventory() { ... } }Rövid összefoglaló
- Egy osztálynak egy felelőssége legyen – ez a Single Responsibility Principle lényege.
- Kerüld a „God Object" anti-patterneket: az osztály ne próbáljon mindent csinálni.
- A kis, fókuszált osztályok könnyebben tesztelhetők és karbantarthatók.