یک طراحی ساده زمان خیلی کمتری را نسبت به یک طراحی پیچیده برای کامل شدن احتیاج دارد؛ به همین دلیل سعی کنید ساده ترین طراحی ممکن را اجرا کنید. اگر با موردی پیچیده روبه رو شدید آنرا با چیزی ساده ترجایگزین کنید. جایگزینی هر چه سریع کدهای پیچیده با کدهایی ساده تر، سریع تر و ارزان تر از زمانی است که زمان زیادی را صرف نوشتن کدهای پیچیده کنید.
اکثراً سعی می کنند تا ساده بودن را اندازه گیری کنند؛ در حالی که سادگی قابل محاسبه نیست! چرا که سادگی مفهومی غیر قابل اندازه گیری است. کاری که برای شخصی ساده محسوب می شود ممکن است برای دیگری کاری پیچیده باشد. اضافه کردن یک تکنولوژی پیشرفته ممکن است برنامهای (Application) را ساده سازی کند ولی برنامهای دیگر را به کلی از هم بپاشد.
در حین پیشروی پروژه تیم رفته رفته متوجه می شود چه چیزی ساده محسوب می شود. با هم کد خود را به صورت ذهنی بررسی کنید. برای این کار چهار مورد پیشنهاد می شود:
- قابل تست (Testable)
- قابل فهم (Understandable)
- قابل مرور (Browsable)
- قابل توضیح (Explainable)
قابل تست بودن (Testable) یعنی می توانید یونیت تست ها و تست های پذیرشی بنویسید که می توانند به صورت اتوماتیک وجود مشکلات را بررسی کنند. این موضوع، روی طراحی نهایی برنامه تأثیر می گذارد. سیستم را به بخش هایی کوچکتر که قابل تست باشند تقسیم کنید.
قابل مرور (Browsable) به معنی این است که بتوانید به راحتی هر زمان که می خواهید چیزی را که به دنبالش هستید پیدا کنید. اسمامی خوب کمک می کنند کد ها را به راحتی پیدا کنید.
قابل فهم (Understandable) با اینکه واضح است، ممکن است تعریفی متفاوت برای هرکس داشته باشد. تیمی که برای مدت زمانی طولانی روی یک سیستم کار کرده است به راحتی آنرا می فهمد در حالی که ممکن است فردی که به تازگی وارد تیم شده است، کاملا گیج باشد.
به همین دلیل پیشنهاد می کنم قابل توضیح (Explainable) را بدین معنا بدانید که توضیح چگونگی کار با سیستم به افراد جدید تا چه حد ساده اتفاق می افتد.
مثالی ساده را در نظر بگیرید: برای اینکه عددی را به درصد تبدیل کنیم باید آنرا در ۱۰۰ ضرب کنیم، همچنین برای تبدیل سانتیمتر به متر باید آنرا در ۱۰۰ ضرب کنیم؛ آیا لازم است تابعی به صورت زیر داشته باشید که اعداد را در ۱۰۰ ضرب کند؟ خیر
- convertToPercentOrMeters(x)
گر چه این مدل از تکرار جلوگیری می کند اما بهتر است به صورت دو تابع نوشته شود:
- converToPercent(aFraction)
- convertMetersToCentimeters(aLength)
چرا؟ چون هر یک، موضوعی متفاوت را بیان می کند؛ زیرا مسئله این نیست که فقط عددی باید در ۱۰۰ ضرب شود بلکه اینکه چرا عدد در ۱۰۰ ضرب می شود حائز اهمیت است. همچنین به اینکه چه نوع اعدادی ورودی معتبر محسوب می شود باید اشاره شود.
نکتهای که در مورد طراحی های ساده اهمیت دارد این است که افراد لازم است دانش کافی برای تشخیص آنرا داشته باشند. دانش (Knowldedge) با اطلاعات (Informations) فرق دارد؛ شما می توانید یک عالمه اطلاعات داشته باشید اما در عین حال بی دانش باشید. دانش همان بینشی است که در مورد دامنه فعالیتتان در طول زمان به دست میآورید.
اغلب پس از کمی پیشروی در طول پروژه به طراحی های ساده می رسیم. بهترین راهکار، کد نویسی فیچرها و در عین حال جستجو جهت کسب دانش کافی است تا طراحی ساده امکان پذیر شود. با این کار می توانید به تدریج درک و طراحی جدیدتان را پیاده سازی کنید.
تا جایی که ممکن است سعی کنید همه چیز را به ساده ترین حالت ممکن بنویسید؛ برای اینکار از اضافه کردن فیچرهای کاربردی قبل از Deadline خودداری کنید.