چرا استفاده از جنریتور در اندروید خوبه؟!
وقتی برنامهنویسی اندروید رو تازه شروع کرده بودم، برای انجام پروژهها از گزینهی new project اندروید استودیو استفاده میکردم. بعد از مدتی احساس کردم که اینجوری زمان زیادی رو الکی هدر میدم، چون موقع شروع هر پروژه باید کارهای تکراری زیادی مثل اضافه کردن dependencyها، تغییر فایل build.gradle، کپی کردن کلاسهای کمکی مثل تاریخ شمسی و … رو انجام میدادم.
برای حل این مشکل، یک پروژه ساختم و همهی کارهای مقدماتی رو داخلش انجام دادم. در ادامه از این پروژه به عنوان پایهی پروژههای جدید بعدی استفاده میکردم. یعنی ازش یک نسخه کپی میگرفتم و اسامی داخل پروژه مثل package name رو عوض میکردم. این روش دو تا ضعف داشت:
- خود این راهحل زمانگیر بود و باید اسامی رو همه جای پروژه تغییر داد.
- گاهی پیش میاد یکی دو جا از دست آدم در بره و همهی اسامی درست تغییر نکنند که باعث میشه اپ کرش کنه و نیاز به عیبیابی داشته باشه.
حالا این مشکل فقط یکبار در شروع هر پروژه بود اما از وقتی توو پروژههام از الگوی معماری MVP استفاده میکنم، درگیر یک مسئلهی بدتری شدم. اینکه اگه یک اکتیویتی میخوام بسازم باید در کنارش فایلهای دیگه مثل کلاس Presenter، فایل Contract، دو تا فایل برای Dagger بسازم. یکی دو پروژه تحمل کردم ولی دیدم خیلی سخته، سرچ کردم و راهی پیدا کردم که بتونم از چندتا template file یه گروه درست کنم. با استفاده از template fileها نیاز نبود خودم دستی فایلهارو بسازم اما این روش هم مثل روش قبلی دو تا ضعف داشت:
- انعطاف پذیریش کم بود و خیلی قدرت مانور نداشت.
- قابلیت اینو نداشت که بهراحتی بشه در اختیار بقیه گذاشتش و اونام استفاده کنند.
یکبار دیگه جستجو توو اینترنت رو خیلی جدیتر شروع کردم تا بالاخره به ابزاری به اسم Yeoman رسیدم. توی صفحهی اصلی سایتشون نوشته که برای webappها هست ولی میشه هر جنریتوری باهاش درست کرد و فرقی براش نمیکنه. هر جنریتور یک پلاگین برای Yeoman میشه و زبان ساختن پلاگینها هم Js هست. من اصلا Js کار نمیکنم و برای اینکه کمی بفهمم قضیهاش چیه و کدهاشو بفهمم، مجبور شدم فصل دوم و سوم کتاب Beginning Node.js برای انتشارات Apress رو بخونم. خیلی درکمو از Js بیشتر کرد و بعدش با خوندن سورس دو سه تا جنریتور دیگه که برای Yeoman نوشته شده بودند، تونستم جنریتور خودمو درست کنم. نه تنها مشکلاتی که گفتم رو حل کرد!! حتی امکان اینو برام به وجود آورد تا بتونم باهاش کارهای جالب دیگهای هم بکنم.
توی این پست توضیح دادم که چرا و چطور جنریتور رو ساختم اما پست بعدی فقط در رابطه با خود جنریتور هست. راستی جنریتور رو opensource کردم و اگه دوست دارید میتونید سورسشو در لینک زیر داخل گیتهاب ببینید.