الگوهای ساخت برنامهی اندروید
از وقتی اندروید رو شروع کردم، خیلی رابطهی خوبی با فرگمنت نداشتم و فقط جاهایی که مجبور بودم ازش استفاده کردم. تا الانم پیش نیومده پروژهای رو بطور کامل با فرگمنت درست کنم. چند وقته که خیلی وسوسه شدم به سمت استفادهی بیشتر از فرگمنت برم و دو سه روزی هست که دارم روی این موضوع تحقیق میکنم. سعی کردم مقالهها و سورسهای مختلفی که به این موضوع ربط دارند رو دونه دونه بخونم و روی فرقهاشون فکرکنم. البته در مورد فرگمنتها و مخصوصا FragmentManager هم بیشتر مطالعه کردم، تقریبا هیچ دیدی از نحوهی کار FragmentManager نداشتم ولی الان خیلی بهتر شدم😃. این پست بیشتر از اینکه قرار باشه الگوی خاصی رو تایید کنه یا قضیهای رو اثبات کنه، خلاصهای از تحقیقات شخصیم هس که در نهایت خروجیش یه پروژهی تمرینی با الگوی “تک اکتیویتی، چند فرگمنت” شده که چند روز آینده توی گیتهاب میذارم.
معرفی الگوهای ساخت برنامهی اندروید
اگر بخوام الگوها و روشهایی که برای ساخت برنامهی اندروید رو بنویسم، میتونم به الگوهای زیر اشاره کنم، برای هر الگو توضیح کوتاهی نوشتم که براساس تجربه و برداشتم از مقالههایی بوده که خوندم.
۱- الگوی چند اکتیوتی- برای شروع روش خوبیه، چون نیاز نیست خیلی درگیر فرگمنت یا چیزهای دیگه شد. ولی توی پروژههای بزرگ اذیت میکنه. یکی از معایب اینکه همه جا اکتیویتی استفاده کنید، اینه دستتون رو برای تغییر در آینده میبنده! مثلا من معمولا صفحههایی مثل ورود و ثبتنام رو با فرگمنت میسازم، به دلیل اینکه احتمالش خیلی زیاده نحوهی دسترسی بهشون تغییر کنه! زمانی که فرگمنت باشند، خیلی راحت میشه جا به جاشون کرد، جفتشون رو توی viewpager داخل یه اکتیویتی گذاشت یا هرکدوم رو توی یه اکتیویتی جدا گذاشت. اگر همه چیو با اکتیویتی بسازید دیگه نمیتونید به این راحتی از اینجور کارها بکنید.
۲- الگوی چند اکتیوتی، چند فرگمنت- در این روش برای ساخت همهی بخشهای پروژه از فرگمنت استفاده میشه، ولی به جای اینکه تلاش زیادی بشه فقط از یه اکتیوتی استفاده بشه، فرگمنتهایی که مربوط به کار مشابهی هستند رو در یک اکتیویتی میذارند. بطور مثال مراحل سفارش یک محصول که فرگمنتهای مختلفی داره میتونه توی یک اکتیویتی به اسم خرید باشه.
۳- الگوی چند اکتیوتی، چند ویو- شبیه الگوی قبل هست با این تفاوت که به جای فرگمنت از CompoundViewها استفاده میشه. مزیتش اینه نیاز نیس درگیر پیچیدگیهای لایفسایکل فرگمنت شد. کتابخونههایی مثل Conductor ، Flow و … به دولوپرها کمک میکنند که پروژههاشون رو براساس این الگو بسازند.
۴- الگوی تک اکتیوتی، چند فرگمنت- در این الگو کل پروژه با فرگمنت ساخته میشه ولی برخلاف الگوی ۲، فقط از یه اکتیویتی به عنوان میزبان فرگمنتها استفاده میشه. مگه اینکه واقعا خیلی نیاز باشه در موارد خاص اکیتیویتیهای دیگهای هم ساخته بشه.
۵- الگوی تک اکتیویتی، چند ویو- این الگو شبیه الگوی قبلی هست، فقط به جای فرگمنت از همون CompoundViewها و کتابخونههای Flow و Conductor استفاده میشه.
کدام الگو محبوبتر است؟
طبق بررسیهایی که کردم انگار درصد زیادی از دولوپرهای خارجی سعی میکنند تا جایی که میشه از اکتیویتیهای کمتری استفاده کنند و روی این قضیه با هم تفاهم دارند. ولی نکتهی جالب اینه بخش زیادی از همین دولوپرها با استفاده از فرگمنتها موافق نیستند! و بجاش از CompoundViewها بهمراه کتابخونههایی مثل Conductor یا Flow استفاده میکنند. البته یه عده کمی il هستند که از فرگمنت استفاده میکنند ولی بجای backstack خود اندروید برای فرگمنتها از روشهای جایگزینی مثل کتابخونه Simple Stack استفاده میکنند.
در ادامه این قضیه برام سوال شد که توی ایران چطوریه و دولوپرها بیشتر چه الگویی رو برای ساخت پروژههاشون استفاده میکنند، برای همین یه نظرسنجی درست کردم و توی کانال تلگرامم و یه گروه اندروید منتشر کردم تا حداقل از نظر دولوپرهای ایرانی که بهشون دسترسی دارم مطلع بشم. سوال نظرسنجی این بود که از چه الگویی برای ساخت پروژههای اندرویدتون استفاده میکنید. ۱۹۵ نفر توی نظرسنجی شرکت کردند و نتیجهاش به این صورت شد:
۱) الگوی چند اکتیویتی =============> ۱۳ رای
۲) الگوی چند اکتیویتی، چند فرگمنت ====> ۱۲۶ رای
۳) *الگوی چند اکتیویتی، چند ویو ======> ۴ رای
۴) الگوی تک اکتیویتی، چند فرگمنت =====> ۲۴ رای
۵) *الگوی تک اکتیویتی، چند ویو =======> ۲ رای
۶) با هیچ کدوم از این الگوها آشنا نیستم ==> ۲۶ رای
*منظور استفاده از کتابخونههای مثل Conductor و Flow هست.
نتیجهی نظرسنجی نشون میده، بر خلاف دولوپرهای خارجی، توی ایران هنوز درصد زیادی از دولوپرها از فرگمنت استفاده میکنند و فقط ۶نفر بودند که از CompoundViewها استفاده میکنند. منم فعلا تصمیم گرفتم برای شروع الگوی “تک اکتیویتی، چند فرگمنت” رو تمرین کنم، چون از لحاظ فنی این الگو با الگوی “چند اکتیویتی، چند فرگمنت” فرق نداره، بیشتر به دید دولوپر بستگی داره که آیا تمایل داره فرگمنتهارو در اکتیویتیهای مختلف دستهبندی کنه یا نه؟! چون در نهایت اینجوری میشه که هر قابلیت پروژه (مثل همون سفارش محصول) از الگوی “تک اکتیویتی، چند فرگمنت” پیروی میکنه و همهی قابلیتها در کنار هم کل پروژه رو براساس الگوی “چند اکتیویتی، چند فرگمنت” میسازند.