این اصطلاح اولین بار در سال ۱۹۹۷ توسط «برایان فوت» و «جوزف یودر» در مقالهای کلاسیک مطرح شد. آنها استدلال کردند که برخلاف تمام آموزشهای آکادمیک، رایجترین معماری نرمافزار در جهان، نه لایهبندی شده است و نه شیءگرا؛ بلکه مجموعهای درهمتنیده، بدون ساختار و شلخته از کدهاست که فقط «کار میکند».
در این مقاله عمیق، به بررسی چیستی این آنتیپترن، دلایل پیدایش، پیامدها و راههای نجات از آن خواهیم پرداخت.
Big Ball of Mud (BBoM) سیستمی است که فاقد هرگونه معماری قابل تشخیص باشد. در این سیستم:
مرزهای بین اجزا (Components) وجود ندارد یا بسیار مبهم است.
دادهها بهصورت آزادانه بین بخشهای مختلف سیستم میچرخند.
تغییر در یک گوشه از کد، باعث خرابی در دورترین نقطه ممکن میشود (اثر پروانهای منفی).
همه چیز به همه چیز متصل است (High Coupling).
به زبان ساده، اگر کد شما شبیه به یک کلاف کاموای گرهخورده است که نمیتوانید سر و ته آن را پیدا کنید، شما با یک گلوله بزرگ گلولای طرف هستید.
هیچ برنامهنویسی روز اول با قصد نوشتن کد کثیف پشت میز نمینشیند. پس چطور به اینجا میرسیم؟
الف) فشار زمان و ضربالاجلها (Time Pressure)
رایجترین دلیل، عجله برای رساندن محصول به بازار (Time to Market) است. وقتی بیزنس فشار میآورد که یک ویژگی جدید باید «تا فردا» آماده باشد، برنامهنویس وقت نمیکند به معماری فکر کند. او فقط یک وصله (Patch) به کد قبلی میزند. تکرار این کار در طول ماهها، فاجعه میآفریند.
ب) فرسایش تدریجی (Architecture Erosion)
ج) فقدان تجربه یا رهبری فنی
تیمهایی که بدون ارشد (Senior) یا معمار نرمافزار کار میکنند، معمولاً متوجه نمیشوند که در حال غرق شدن در لجنزار هستند تا زمانی که دیگر خیلی دیر شده است.
د) تغییرات مداوم در نیازمندیها
چگونه بفهمیم پروژه ما به یک Big Ball of Mud تبدیل شده است؟
ترس از تغییر: برنامهنویسها میترسند دست به کد بزنند. جملاتی مثل «به اون قسمت دست نزن، معلوم نیست چی میشه» زیاد شنیده میشود.
آبجکتهای خداگونه (God Objects): کلاسهایی دارید که ۵۰۰۰ خط کد دارند و همه کار انجام میدهند (از اعتبارسنجی تا اتصال به دیتابیس).
منطق نشتکرده (Leaky Abstractions): منطق بیزنس شما در همه جا پخش شده است؛ در UI، در دیتابیس (Stored Procedures) و در کنترلرها.
زمان طولانی Onboarding: وقتی یک برنامهنویس جدید استخدام میکنید، ۳ ماه طول میکشد تا بفهمد سیستم اصلاً چطور کار میکند.
نکته جالب مقاله «فوت و یودر» این است که آنها میگویند این آنتیپترن از نظر اقتصادی در کوتاهمدت کارآمد است! ساختن یک معماری تمیز هزینه دارد، زمان میبرد و نیاز به تخصص بالا دارد. در مقابل، «گلوله گلولای» اجازه میدهد محصول سریع بالا بیاید. برای یک استارتاپ که شاید یک ماه دیگر وجود نداشته باشد، نوشتن کد کثیف اما سریع، گاهی منطقیتر از معماری میکروسرویس پیچیده است.
اما مشکل اینجاست: این بدهی فنی (Technical Debt) نرخ بهره بسیار بالایی دارد. بعد از مدتی، سرعت توسعه به صفر نزدیک میشود.
اگر در حال حاضر در چنین پروژهای هستید، خودکشی نکنید! راههایی برای بهبود وجود دارد:
۱. معرفی مرزها (Bounded Contexts)
با استفاده از مفاهیم Domain-Driven Design (DDD)، سعی کنید بخشهای مختلف بیزنس را از هم جدا کنید. مثلاً بخش «پرداخت» نباید مستقیم به جداول «انبار» دسترسی داشته باشد.
۲. تستنویسی (The Safety Net)
قبل از هر تغییری، برای بخشهای حیاتی تست بنویسید. تستها به شما جرات میدهند که کد را ریفکتور (Refactor) کنید بدون اینکه نگران فروپاشی کل سیستم باشید.
۳. استراتژی ریفکتور تدریجی
۴. استفاده از لایههای واسط (Anti-Corruption Layer)
امروزه بسیاری فکر میکنند با کوچ کردن به Microservices از شر گلوله گلولای خلاص میشوند. اما واقعیت تلخ این است که اگر دانش معماری نداشته باشید، فقط گلولههای کوچک گلولای تولید میکنید که با شبکه به هم وصل شدهاند! به این وضعیت Distributed Big Ball of Mud میگویند که به مراتب خطرناکتر و دیباگ کردن آن سختتر است.
Big Ball of Mud دشمن شماره یک کیفیت نرمافزار است، اما همزمان واقعیترین شکلی است که نرمافزارها به خود میگیرند. شناخت این آنتیپترن به ما کمک میکند تا بفهمیم کد تمیز یک هدف نهایی نیست، بلکه یک فرایند مداوم برای زنده ماندن است.
اگر اجازه دهید کدهایتان به گلوله گلولای تبدیل شوند، در واقع دارید تاریخ انقضای تخصص و محصول خود را امضا میکنید.
0 نظر
هنوز نظری برای این مقاله ثبت نشده است.