"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > جعل SOLID بسيطًا: دليل جافا سكريبت لتنظيف مبادئ التعليمات البرمجية

جعل SOLID بسيطًا: دليل جافا سكريبت لتنظيف مبادئ التعليمات البرمجية

تم النشر بتاريخ 2024-08-27
تصفح:973

Making SOLID Simple: A JavaScript Guide to Clean Code Principles

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

لذا، إليك وجهة نظري حول مبادئ SOLID في JavaScript - وهو دليل عملي لا معنى له وأتمنى لو كان لدي عندما بدأت.

1. مبدأ المسؤولية الفردية (SRP): وظيفة واحدة تتم بشكل جيد

ما هذا؟

ينص مبدأ المسؤولية الفردية على أن الفصل يجب أن يكون لديه سبب واحد فقط للتغيير، وهذا يعني أنه يجب أن يكون لديه وظيفة أو مسؤولية واحدة فقط.

تشبيه واقع الحياة

فكر في باريستا في المقهى المفضل لديك. وظيفتهم هي صنع القهوة. إذا اضطروا فجأة إلى البدء في إصلاح ماكينة الإسبريسو، وتقديم المعجنات، وإخراج القمامة، فستصبح الأمور فوضوية. تمامًا كما يجب أن يركز صانع القهوة على صنع القهوة، يجب أن يركز فصلك على القيام بشيء واحد بشكل جيد.

مثال في جافا سكريبت:

تخيل أن لديك فئة مستخدم تتعامل مع مصادقة المستخدم والتحقق من صحة البيانات وتخزين قاعدة البيانات. إنه يفعل الكثير! من خلال تقسيم هذه المسؤوليات إلى فئات منفصلة، ​​يمكنك تسهيل إدارة التعليمات البرمجية الخاصة بك وصيانتها.

class UserAuthenticator {
  login(user) {
    // handle login
  }
}

class UserDataValidator {
  validate(user) {
    // validate user data
  }
}

class UserDatabase {
  save(user) {
    // save user to the database
  }
}

2. المبدأ المفتوح/المغلق (OCP): قم بالتوسيع، وعدم التعديل

ما هذا؟

ينص المبدأ المفتوح/المغلق على أن الكيانات البرمجية يجب أن تكون مفتوحة للتوسيع ولكنها مغلقة للتعديل. بمعنى آخر، يجب أن تكون قادرًا على إضافة وظائف جديدة دون تغيير التعليمات البرمجية الموجودة.

تشبيه واقع الحياة:

تخيل وحدة التحكم في الألعاب المفضلة لديك. يمكنك إضافة ألعاب وأجهزة تحكم وملحقات جديدة، ولكن لا يتعين عليك فتحها وإعادة توصيلها للقيام بذلك. وبالمثل، يجب أن تكون قادرًا على إضافة ميزات جديدة إلى التعليمات البرمجية الخاصة بك دون تغيير بنيتها الأساسية.

مثال في جافا سكريبت:

لنفترض أن لديك فئة شكل مع طريقة لحساب المساحة. إذا كنت بحاجة إلى إضافة شكل جديد، مثل المثلث، فلن تضطر إلى تعديل الفئة الحالية. بدلاً من ذلك، قم بتوسيع نطاقه.

class Shape {
  area() {
    throw "Area method not implemented";
  }
}

class Rectangle extends Shape {
  constructor(width, height) {
    super();
    this.width = width;
    this.height = height;
  }

  area() {
    return this.width * this.height;
  }
}

class Circle extends Shape {
  constructor(radius) {
    super();
    this.radius = radius;
  }

  area() {
    return Math.PI * this.radius * this.radius;
  }
}

3. مبدأ استبدال ليسكوف (LSP): اجعله قابلاً للاستبدال

ما هذا؟

ينص مبدأ استبدال ليسكوف على أن كائنات الفئة الفائقة يجب أن تكون قابلة للاستبدال بكائنات فئة فرعية دون التأثير على صحة البرنامج.

تشبيه واقع الحياة:

تخيل استئجار سيارة. سواء حصلت على سيارة سيدان أو سيارة دفع رباعي، فإنك تتوقع أن تتمتع بالوظائف الأساسية للسيارة: يجب أن تقود، وتوجه، وتتوقف. إذا كانت سيارتك المستأجرة تتطلب مجموعة مختلفة تمامًا من أدوات التحكم، فستكون في مشكلة! وبالمثل، يجب أن تتصرف الفئات الفرعية بطريقة لا تخالف التوقعات التي حددتها الفئة الأم.

مثال في جافا سكريبت:

إذا كان لديك فئة الطيور وفئة البطريق التي تمددها، فيجب أن يظل البطريق يتصرف مثل الطائر حتى لو لم يكن قادرًا على الطيران. يجب أن يستمر في المشي، وتناول الطعام، وربما حتى السباحة.

class Bird {
  move() {
    console.log("Flies in the sky");
  }
}

class Penguin extends Bird {
  move() {
    console.log("Swims in the water");
  }
}

const myBird = new Bird();
const myPenguin = new Penguin();

myBird.move(); // Flies in the sky
myPenguin.move(); // Swims in the water

4. مبدأ فصل الواجهة (ISP): واجهات مصممة خصيصًا

ما هذا؟

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

تشبيه واقع الحياة:

تخيل مطعمًا حيث يجب أن يكون الطاهي أيضًا هو النادل والنادل وغسالة الأطباق. إنه أمر ساحق وغير فعال! وبدلا من ذلك، يجب أن يكون لكل دور مهامه المحددة. وبالمثل، يجب أن تكون واجهاتك متخصصة ومركزة.

مثال في جافا سكريبت:

إذا كانت لديك واجهة عاملة تتضمن أساليب مثل buildHouse، وpainHouse، وdesignHouse، فلا ينبغي للعامل الذي يقوم بطلاء المنازل فقط أن ينفذ جميع الطرق الأخرى. قم بتقسيمها إلى واجهات أصغر.

class Builder {
  build() {
    console.log("Building house...");
  }
}

class Painter {
  paint() {
    console.log("Painting house...");
  }
}

class Designer {
  design() {
    console.log("Designing house...");
  }
}

5. مبدأ انعكاس التبعية (DIP): الاعتماد على التجريدات

ما هذا؟

ينص مبدأ انعكاس التبعية على أن الوحدات عالية المستوى لا ينبغي أن تعتمد على الوحدات منخفضة المستوى. كلاهما يجب أن يعتمد على التجريدات.

تشبيه واقع الحياة:

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

مثال في جافا سكريبت:

إذا كان لديك فئة LightBulb التي تتحكم بشكل مباشر في فئة Switch، فأنت تقوم بإنشاء اقتران محكم. بدلاً من ذلك، يجب أن يعتمد كلاهما على واجهة مثل PowerSource.

class LightBulb {
  turnOn(powerSource) {
    powerSource.provideElectricity();
    console.log("Light is on");
  }
}

class Switch {
  constructor(powerSource) {
    this.powerSource = powerSource;
  }

  operate() {
    this.powerSource.togglePower();
  }
}

class PowerSource {
  provideElectricity() {
    console.log("Providing electricity");
  }

  togglePower() {
    console.log("Toggling power");
  }
}

خاتمة

إن إتقان مبادئ SOLID يشبه تعلم الطبخ باستخدام مجموعة من الوصفات المثبتة. بمجرد فهمها، يمكنك إعداد تعليمات برمجية ليست عملية فحسب، بل أنيقة وسهلة الصيانة. لذا، في المرة القادمة التي تجد فيها نفسك في معضلة تتعلق بالبرمجة، تذكر: هناك مبدأ لذلك!

ترميز سعيد! ?

بيان الافراج تم إعادة إنتاج هذه المقالة على: https://dev.to/suryanshsingh2001/make-solid-simple-a-javascript-guide-to-clean-code-principles-1n6j?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ Study_golang@163 .com لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3