--
### فراتر از کدنویسی؛ هنر معماری با اصل Single Responsibility (SRP)
در دنیای برنامهنویسی وب، نوشتن کدی که «کار کند» فقط ۲۰ درصد ماجراست. ۸۰ درصد باقیمانده، توانایی نگهداری (Maintenance) و توسعهپذیری آن کد است. امروز به سراغ اولین و مهمترین اصل از اصول SOLID میرویم.
#### 🛠 اصل مسئولیت واحد (SRP) چیست؟
این اصل میگوید: «هر کلاس یا ماژول باید فقط و فقط یک دلیل برای تغییر داشته باشد.»
به زبان ساده: یک قطعه کد نباید همزمان هم با دیتابیس حرف بزند، هم محاسبات ریاضی انجام دهد و هم خروجی را برای کاربر نمایش دهد!
#### ❌ نمونه کد غیرحرفهای (Spaghetti Code):
در این مثال، یک کلاس هم وظیفه مدیریت کاربر و هم وظیفه اعتبارسنجی و ذخیره در فایل را دارد:
#### ✅ نمونه کد حرفهای (Refactored):
در سطح حرفهای، ما وظایف را تفکیک میکنیم. این کار باعث میشود اگر روزی متد ذخیرهسازی از فایل به دیتابیس تغییر کرد، نیازی نباشد منطق نمایش پروفایل را دستکاری کنیم.
#### 🚀 چرا این سبک کدنویسی برای شما مهم است؟
۱. تستپذیری: تست کردن یک تابع کوچک که فقط یک کار انجام میدهد، بسیار راحتتر است.
۲. کاهش باگ: وقتی تغییری در بخش دیتابیس ایجاد میکنید، خیالتان راحت است که بخش UI خراب نمیشود.
۳. کار تیمی: در پروژههای بزرگ (مثل پروژههای درس آزمایشگاه مهندسی نرمافزار)، هر کس میتواند روی یک بخش مستقل کار کند.
---
#برنامه_نویسی #مهندسی_نرم_افزار #CleanCode #SOLID #WebDevelopment #شب_تاب
@init_code هزاران آموزش برنامه نویسی
### فراتر از کدنویسی؛ هنر معماری با اصل Single Responsibility (SRP)
در دنیای برنامهنویسی وب، نوشتن کدی که «کار کند» فقط ۲۰ درصد ماجراست. ۸۰ درصد باقیمانده، توانایی نگهداری (Maintenance) و توسعهپذیری آن کد است. امروز به سراغ اولین و مهمترین اصل از اصول SOLID میرویم.
#### 🛠 اصل مسئولیت واحد (SRP) چیست؟
این اصل میگوید: «هر کلاس یا ماژول باید فقط و فقط یک دلیل برای تغییر داشته باشد.»
به زبان ساده: یک قطعه کد نباید همزمان هم با دیتابیس حرف بزند، هم محاسبات ریاضی انجام دهد و هم خروجی را برای کاربر نمایش دهد!
#### ❌ نمونه کد غیرحرفهای (Spaghetti Code):
در این مثال، یک کلاس هم وظیفه مدیریت کاربر و هم وظیفه اعتبارسنجی و ذخیره در فایل را دارد:
class User {
constructor(name, email) {
this.name = name;
this.email = email;
}
// مدیریت دادههای کاربر
saveToDatabase() {
console.log(`Saving ${this.name} to DB...`);
}
// اعتبارسنجی - این وظیفه کلاس User نیست!
validateEmail() {
return this.email.includes('@');
}
// نمایش - این هم وظیفه این کلاس نیست!
showProfile() {
return `<h1>${this.name}</h1>`;
}
}#### ✅ نمونه کد حرفهای (Refactored):
در سطح حرفهای، ما وظایف را تفکیک میکنیم. این کار باعث میشود اگر روزی متد ذخیرهسازی از فایل به دیتابیس تغییر کرد، نیازی نباشد منطق نمایش پروفایل را دستکاری کنیم.
// ۱. کلاس موجودیت کاربر (فقط داده)
class User {
constructor(name, email) {
this.name = name;
this.email = email;
}
}
// ۲. سرویس اعتبارسنجی
class UserValidator {
static validateEmail(email) {
return email.includes('@');
}
}
// ۳. سرویس ذخیرهسازی (Persistance)
class UserRepository {
save(user) {
console.log(`Saving ${user.name} to Database...`);
}
}
// ۴. سرویس نمایش (UI/Presentation)
class UserView {
renderProfile(user) {
return `<div>User: ${user.name}</div>`;
}
}
#### 🚀 چرا این سبک کدنویسی برای شما مهم است؟
۱. تستپذیری: تست کردن یک تابع کوچک که فقط یک کار انجام میدهد، بسیار راحتتر است.
۲. کاهش باگ: وقتی تغییری در بخش دیتابیس ایجاد میکنید، خیالتان راحت است که بخش UI خراب نمیشود.
۳. کار تیمی: در پروژههای بزرگ (مثل پروژههای درس آزمایشگاه مهندسی نرمافزار)، هر کس میتواند روی یک بخش مستقل کار کند.
---
#برنامه_نویسی #مهندسی_نرم_افزار #CleanCode #SOLID #WebDevelopment #شب_تاب
@init_code هزاران آموزش برنامه نویسی