مبادئ SOLID في Kotlin: النظرية والتطبيق مع أمثلة الكود

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مبادئ SOLID في Kotlin: من النظرية إلى التطبيق



SOLID هو اختصار لخمسة مبادئ أساسية في التصميم الكائني التوجيه، صاغها روبرت مارتن (العم بوب). تساعد هذه المبادئ في إنشاء كود مرن وقابل للتوسع وسهل الصيانة. في هذه المقالة، سنشرح كل مبدأ من مبادئ SOLID مع أمثلة من عالم Kotlin، لتتمكن من تطبيقها فوراً في مشاريعك.



1. Single Responsibility Principle (SRP) — مبدأ المسؤولية الواحدة



النظرية: يجب أن يكون لكل class سبب واحد فقط للتغيير. بمعنى آخر، يجب أن يكون class مسؤولاً عن وظيفة واحدة محددة بوضوح.



التطبيق في Kotlin: لننظر إلى انتهاك نموذجي لـ SRP، حيث يتولى class معالجة البيانات والإخراج والتحقق معاً.



// ❌ انتهاك SRPclass UserManager {    fun registerUser(email: String, password: String) {        if (isValidEmail(email) && isValidPassword(password)) {            saveToDatabase(email, password)            sendWelcomeEmail(email)        }    }

private fun isValidEmail(email: String): Boolean = email.contains("@") private fun isValidPassword(password: String): Boolean = password.length >= 6 private fun saveToDatabase(email: String, password: String) { /* ... */ } private fun sendWelcomeEmail(email: String) { /* ... */ }}


إعادة الهيكلة مع الالتزام بـ SRP:



// ✅ الالتزام بـ SRPclass UserValidator {    fun isValidEmail(email: String): Boolean = email.contains("@")    fun isValidPassword(password: String): Boolean = password.length >= 6}

class UserRepository { fun save(email: String, password: String) { /* حفظ في قاعدة البيانات */ }}

class EmailService { fun sendWelcomeEmail(email: String) { /* إرسال البريد الإلكتروني */ }}

class UserRegistrationService( private val validator: UserValidator, private val repository: UserRepository, private val emailService: EmailService) { fun registerUser(email: String, password: String) { if (validator.isValidEmail(email) && validator.isValidPassword(password)) { repository.save(email, password) emailService.sendWelcomeEmail(email) } }}


2. Open/Closed Principle (OCP) — مبدأ الانفتاح/الانغلاق



النظرية: يجب أن تكون الكيانات البرمجية (classes، modules، functions) مفتوحة للتمديد ولكن مغلقة للتعديل. يجب أن تكون قادراً على إضافة وظائف جديدة دون تغيير الكود الموجود.



التطبيق في Kotlin: نستخدم interfaces وتعدد الأشكال. بدلاً من if-else أو when لمعالجة الأنواع المختلفة، سننشئ تسلسلاً هرمياً.



// ❌ انتهاك OCPclass DiscountCalculator {    fun calculateDiscount(customerType: String, amount: Double): Double {        return when (customerType) {            "Regular" -> amount * 0.05            "Premium" -> amount * 0.10            "VIP" -> amount * 0.20            else -> 0.0        }    }    // لإضافة "Gold"، يجب تعديل هذه الدالة!}


// ✅ الالتزام بـ OCPinterface DiscountStrategy {    fun applyDiscount(amount: Double): Double}

class RegularDiscount : DiscountStrategy { override fun applyDiscount(amount: Double): Double = amount * 0.05}

class PremiumDiscount : DiscountStrategy { override fun applyDiscount(amount: Double): Double = amount * 0.10}

class VIPDiscount : DiscountStrategy { override fun applyDiscount(amount: Double): Double = amount * 0.20}

// يتم إضافة نوع جديد دون تغيير الكود الموجودclass GoldDiscount : DiscountStrategy { override fun applyDiscount(amount: Double): Double = amount * 0.15}

class DiscountCalculator { fun calculateDiscount(strategy: DiscountStrategy, amount: Double): Double { return strategy.apply

المدونات

توصيات الكتب