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

كرة كبيرة من الطين: فهم النمط المضاد وكيفية تجنبه

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

من المحتمل أن يكون النمط المعماري الأكثر شهرة في تطوير الواجهة الأمامية هو كرة الطين الكبيرة. يتم تطبيق مصطلح Big Ball of Mud على الأنظمة التي ليس لها هيكل واضح أو تنظيم معياري. نمت قاعدة التعليمات البرمجية بشكل عضوي وفوضوي، لتصبح كابوسًا للصيانة. إنه موقف يجد العديد من المطورين أنفسهم فيه، خاصة عند الضغط عليهم بشدة للوفاء بالمواعيد النهائية وتطوير عدد كبير من الميزات.
هذا ما تتناوله المقالة الحالية: النمط المضاد لـ Big Ball of Mud مع مثال مأخوذ من تطوير الواجهة الأمامية، ولماذا هو شائع جدًا، ومتى يصبح مشكلة وكيفية معالجة هذه المشكلة.

Big Ball of Mud: Understanding the Antipattern and How to Avoid It

ما هي كرة الطين الكبيرة؟

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

في

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

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

تشمل العوامل الأخرى المساهمة في هذا النمط المضاد ما يلي:

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

مثال على كرة كبيرة من الطين في الواجهة الأمامية

إليك مثال تجريدي للنمط المضاد Big Ball of Mud في هندسة الواجهة الأمامية. فكر في مشروع React صغير تحول إلى حالة من الفوضى بمرور الوقت.

هيكل الملف:

/سرك /عناصر /Header.js /Footer.js /الشريط الجانبي.js /MainContent.js / ملف تعريف المستخدم.js /utils /api.js /constants.js /styles /globalStyles.css /App.js /index.js
/src
  /components
    /Header.js
    /Footer.js
/Sidebar.js
    /MainContent.js
    /UserProfile.js
  /utils
    /api.js
    /constants.js
  /styles
    /globalStyles.css
  /App.js
  /index.js
مشاكل مع هذه البنية:

  • عدم وجود حدود للوحدة: المكونات، على سبيل المثال، الرأس والتذييل وملف تعريف المستخدم، جميعها موجودة في مجلد واحد دون أي اعتبار للدور الذي يلعبه كل منها.
  • مزيج من الاهتمامات: المكونات مسؤولة عن جلب البيانات، أي استدعاءات واجهة برمجة التطبيقات (API) وعرض عناصر واجهة المستخدم. وبالتالي، يستمر الاقتران الوثيق بين طبقات المنطق والعرض.
  • الأنماط العامة: يعتمد المشروع على ملف CSS عام واحد. مع نمو تطبيقك، قد يؤدي ذلك إلى تعارض في الأنماط وسيكون من الصعب الحفاظ عليه. الاستخدام المباشر لواجهات برمجة التطبيقات في المكونات: يتم استيراد طريقة جلب البيانات وتحديثها مباشرة في مكونات مثل UserProfile.js، وبالتالي مزج منطق جلب البيانات مع كود واجهة المستخدم.
نموذج التعليمات البرمجية من UserProfile.js:

استيراد React, { useState, useEffect } من 'react'; استيراد { fetchUserData، updateUserProfile } من './utils/api'؛ استيراد "./styles/globalStyles.css"؛ ملف تعريف المستخدم الثابت = () => { const [user, setUser] = useState(null); const [loading, setLoading] = useState(true); استخدام التأثير (() => { جلب بيانات المستخدم () .ثم ((البيانات) => { setUser(data); setLoading(false); }) .catch((خطأ) => console.error('حدث خطأ أثناء جلب بيانات المستخدم:'، خطأ)); }, []); تحديث مقبض ثابت = () => { تحديثملف تعريف المستخدم (المستخدم) .then(() => تنبيه('تم تحديث الملف الشخصي!')) .catch((خطأ) => console.error('حدث خطأ أثناء تحديث الملف الشخصي:'، خطأ)); }; إذا (جاري التحميل) أرجع
جاري التحميل.
; يعود (

{user.name

); }; تصدير ملف تعريف المستخدم الافتراضي؛
/src
  /components
    /Header.js
    /Footer.js
/Sidebar.js
    /MainContent.js
    /UserProfile.js
  /utils
    /api.js
    /constants.js
  /styles
    /globalStyles.css
  /App.js
  /index.js

مشكلات في المدونة:

  • لا يوجد SoC: يتم تنفيذ جلب البيانات وإدارة الحالة وعرض واجهة المستخدم في مكان واحد داخل المكون.
  • اقتران محكم: سيؤدي تحديث واجهة برمجة التطبيقات (API) إلى تحديث مكونات متعددة، لأنه لا توجد طبقة تجريد بين واجهة برمجة التطبيقات (API) والمكونات.
  • لا يمكن إعادة استخدام المنطق: سيقوم مكون آخر يرغب في الوصول إلى بيانات المستخدم إما بإعادة تنفيذ استدعاء واجهة برمجة التطبيقات (API) أو ربط نفسه بإحكام بهذا المنطق.
من الصعب توسيع نطاق هذا الكود المتشابك والمترابط والمحافظة عليه، وهو ما يمثل كرة كبيرة من الطين.

متى تبدأ المشاكل؟

قد لا يكون للمشروع الذي يتميز بهذا النوع من الهندسة المعمارية علامات واضحة على وجود مشكلة على الفور. ولكن مع نمو المشروع، تتفاقم المشاكل فوق بعضها البعض:

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

كيفية تجنب كرة الطين الكبيرة

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

  1. البنية المعيارية:

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

  2. الملخصات

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

  3. حدود الوحدة

    : يجب أن تكون هناك حدود محددة جيدًا بين المكونات. بدلاً من وضع جميع المكونات ضمن مجلد واحد، قم بإنشاء مجلدات منفصلة لميزة أو مجال.

  4. إدارة الحالة العالمية:

    استخدم مكتبات مثل Redux أو MobX أو React's context API لإدارة الحالة المشتركة بين المكونات. وهذا يقلل بشكل كبير من الحاجة إلى مكون لإدارة الحالة نفسها.

  5. إعادة البناء:

    إعادة البناء بانتظام. لا تسمح للمشروع أن يصل إلى مرحلة يصبح من المستحيل فيها التعامل معه بعد الآن؛ قم بمعالجة هذه المخاوف مع الحفاظ على نظافة قاعدة التعليمات البرمجية.

  6. ماذا تفعل إذا كنت عالقًا بالفعل في كرة كبيرة من الطين

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

إعادة هيكلة قاعدة التعليمات البرمجية

بشكل مجزأ، ووضع المبادئ المعمارية حيثما أمكن ذلك. البدء بـ:

    تحديد نقاط الضعف:
  • ركز على تلك الأجزاء من الكود الأكثر صعوبة في العمل بها أو توسيعها.
  • تقسيم المكونات:
  • إعادة هيكلة المكونات بشكل تدريجي لفصل المخاوف والحد من التبعيات. الآن، قدم الاختبار: أضف اختبارات الوحدة والتكامل للتأكد من أن إعادة البناء لا تؤدي إلى تعطيل الوظائف الحالية.
باختصار، Big Ball of Mud هو نمط مضاد شائع جدًا يسبب الكثير من المتاعب في مشاريع الواجهة الأمامية. من المؤكد أن تقديم البنية المعيارية، وفصل الاهتمامات، وإعادة الهيكلة المنتظمة هي خطوات من شأنها أن تمنع الفوضى التي يسببها هذا النمط من قاعدة التعليمات البرمجية الخاصة بك، مما يجعلها أكثر نظافة وأكثر قابلية للإدارة.

بيان الافراج تم إعادة إنتاج هذه المقالة على: https://dev.to/m_midas/big-ball-of-mud-understanding-the-antipattern-and-how-to-avoid-it-2i?1 إذا كان هناك أي انتهاك، من فضلك اتصل بـ [email protected]
أحدث البرنامج التعليمي أكثر>

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

Copyright© 2022 湘ICP备2022001581号-3