Saeid Noormohammadi
Saeid Noormohammadi
خواندن ۲ دقیقه·۲ ماه پیش

قانون نشت انتزاع ها - 𝐓𝐡𝐞 𝐋𝐚𝐰 𝐨𝐟 𝐋𝐞𝐚𝐤𝐲 𝐀𝐛𝐬𝐭𝐫𝐚𝐜𝐭𝐢𝐨𝐧𝐬


انتزاع abstraction در طراحی نرم افزار به معنای پنهان کردن جزیات پیچیده و سطح پایین یک سیستم می باشد که کار با آن سیستم را برای کاربران ساده تر می کند. برای مثال وقتی با دیتابیس کار می کنیم نیازی به دانستن جزئیات آن مثل نحوه ذخیره سازی داده ها و دیگر عملیات ها نداریم. این جزئیات توسط انتزاع ها داخل library, زبان و... پنهان می شوند.

قانون نشت انتزاع ها (Leaky Abstraction) به چه معنی هستش؟
آقای جوئل اسپالسکی توضیح داده که هیچ انتزاعی کامل نیست. درسته انتزاع ها طراحی می شوند تا پیچیدگی ها را پنهان کنند اما گاهی اوقات این پیچیدگی ها به بیرون نشت می کنند و ما مجبور می شویم که از انتزاعات عبور کرده و با این جزئیات درگیر شویم.

برای درک بهتر موضوع ماشین و رانندگی را در نظر بگیرید. برای راندن یک ماشین هیچ نیازی به دانستن جزیات فنی موتور, گاز, ترمز و... نداریم. عملا اینجا ماشین به عنوان یک انتزاع عمل کرده و جزئیات را پنهان می کند. ما فقط با فرمان, پدال ها و دکمه ها اقدام به راندن ماشین می کنیم. ولی در نهایت زمانی که ماشین خراب می شود دیگر نمی توانیم با استفاده از موارد بالا مشکل را رفع کنیم و نیاز به درگیر شدن با جزئیات فنی داریم.

حال بیایید با یک مثال فنی به این موضوع نگاه کنیم. برای مثال در Django ORM به جای نوشتن کوئری های مستقیم SQL از Object ها و زبان برای کار با دیتابیس استفاده می کنیم. در اینجا ORM جزئیات مربوط به کار با SQL رو پنهان و کار ما را ساده تر کرده است. اما گاهی اوقات ORM پاسخگوی نیاز ما نیست و به خاطر برخی مشکلات (مانند N+1 Queries) مجبور می شویم که به سطح پایین تر رفته و کوئری های بهینه SQL خودمان را بنویسیم. اینجاست که می شود گفت جزئیات پیاده سازی نشت کرده و ما مجبور هستیم با کوئری های SQL کار کنیم.

در پایان, درسته که انتزاع ها بسیار کاربردی هستند و باعث ساده تر شدن طراحی و توسعه می شوند. اما باید توجه داشته باشیم که این انتزاع ها کامل نیستند و زمانی که شروع به نشت کردن می کنند, مجبور می شویم که با جزییات فنی پیچیده و بیشتری درگیر شویم. پس با توجه به آن داشتن یک درک از اصول اولیه و جزئیات در این موارد می تواند بسیار مفید و کمک کننده باشد.

نرم افزارsoftware design
شاید از این پست‌ها خوشتان بیاید