DRY: خودتان را تکرار نکنید – انجمن DEV

یک اصل مهندسی نرم افزار
مشکل
به عنوان یک توسعه دهنده نرم افزار، همه چیز در مورد آن است یافتن راه حل برای مشکلات. توانایی ساختن چیزی که یک کار خاص را حل کند.
هنگامی که شما به تازگی سفر خود را شروع می کنید، اغلب فقط یافتن راهی برای حل یک مشکل است و کاری می کند که با استفاده از یک زبان/فناوری خاص کار کند.
اما در مرحلهای از سفر شما، این نه تنها به کارکردن آن مربوط میشود، بلکه این است که مطمئن شوید میتوانید بر روی آن بسازید. تکرار کنید و همچنین به افراد اجازه دهید بدون ایجاد مانع در کار مشارکت کنند. این الگوریتم وجود دارد که به کدی که سالها پیش نوشتید برگردید و چیزی متوجه نشدید، فکر میکنم برای اکثر ما در صنعت نرمافزار صحبت میکند.
بنابراین این فقط در مورد کدنویسی نیست، بلکه ساخت چیزی است که می تواند با استفاده از ابزارها و اصول دوام بیاورد. درست مثل ساختن یک ماشین، یک خانه. و به آن می گویند مهندسی نرم افزار
در ویکی پدیا مهندس نرم افزار به این صورت تعریف می شود
شخصی که اصول مهندسی نرم افزار را برای طراحی، توسعه، نگهداری، آزمایش و ارزیابی نرم افزار کامپیوتری به کار می گیرد. اصطلاح برنامه نویس گاهی اوقات به عنوان مترادف استفاده می شود، اما ممکن است مفاهیمی از تحصیلات یا مهارت های مهندسی را نیز نداشته باشد.
یکی از آن اصول نام دارد خشک(Dدر آرخوردن Yخودمان)
DRY چیست؟
این خشک اصلی که توسط کتاب رایج شد برنامه نویس عملگرا توسط اندی هانت و دیو توماس (که البته من شما را به خواندن آن تشویق میکنم)، در آن کتاب بیان میکنند که:
“هر دانشی باید یک بازنمایی واحد، بدون ابهام و معتبر در یک سیستم داشته باشد.”
اصولا فقط یک بار بنویسید. یک قانون سرانگشتی این است که اگر متوجه شدید که چیزی را دو بار مینویسید (یک دانش)، باید آن را مجدداً ساخته شود (یک تابع، ماژول، چکیده و غیره) و در همه جا دوباره استفاده شود.
به این مثال نگاهی بیندازید:
// not DRY
//file 1
export function infoOfRectange(rectange) {
const area = rectangle.length * rectangle.width;
return {
area,
name: rectangle.name
}
//file 2 use the area to compare two rectangle
export function compare_area(rectangle1, rectangle2){
const area_rectangle1 = rectangle1.length * rectangle1.width;
const area_rectangle2 = rectangle2.length * rectangle2.width;
if(area_rectangle2 > area_rectangle2) return `${rectangle2.name} has a greater area than ${rectangle1.name}`
.....
}
در اینجا ما دو تابع مختلف داریم که از حوزه از مستطیل، طبق تعریف، مساحت اینجا a است دانش به طوری که دانش نیاز به یک نمایش واحد دارد.
بنابراین در زمینه ما، به کارگیری اصل DRY به معنای داشتن یک منبع حقیقت واحد برای آن است.
//dry
export function rectangle_area(length, width){
return length * width;
}
//calling that function in `compare_area`
export function compare_area(rectangle1, rectangle2){
const area_rectangle1 = rectangle_area(rectangle1.length, rectangle1.width);
const area_rectangle2 = rectangle_area(rectangle2.length, rectangle2.width);
.....
}
بیش از حد مهندس نکنید
اکنون که ما در مورد Dry یاد گرفتیم، یکی از اشتباهات رایج، مهندسی کردن است، به این معنی که وقتی نیازی به آن نداریم، در توسعه نرمافزار، هر ثانیه هزینهای در بر دارد و همچنین لازم نیست در سیستم خود پیچیدگی ایجاد کنیم، زمانی که نیازی به آن نیست. ما تکراری نداریم، زمانی که a knowledge
فقط در یک مکان لازم است، در حال حاضر خشک است و بنابراین ما نیازی به جدا کردن همه چیز نداریم.
من این را شکست خواهم داد زیرا می تواند بعدا مفید باشد این عبارت باید یک پرچم قرمز باشد و همانطور که در بالا گفتیم می تواند مشکلات زیادی ایجاد کند:
-
معرفی پیچیدگی بیشتر
-
معرفی جفت بیشتر بین ویژگی های ما
-
هزینه (آیا لازم است؟، آیا می توان این زمان را برای چیز دیگری صرف کرد)
این اصل دیگری را معرفی می کند که به آن معروف است بوسه (آن را ساده نگه دارید). به سادگی ترجمه می شود Do not over engineer
اگر نمونه یا نکات دیگری دارید، می توانید آنها را در بخش نظرات و همچنین سؤالات به اشتراک بگذارید :).
می توانید من را در توییتر دنبال کنید: @Guialajr