7 قدم تا برنامه نویسی حرفه ای اندروید

سلام

برای اینکه برنامه نویس حرفه ای بشین و کدهایی که میزنید حرفه ای باشد باید چیکار کنیم ؟
میخوام 7 تا از کارهایی که باید خیلی روش وقت بزارین و تمرین کنین تا بتونین برنامه های حرفه ای بنویسین رو توی این پست بگم


1-الگوی طراحی معماری - architecture design pattern

اوایل که برنامه نویسی رو شروع کرده بودم هرچی که میخواستم بنویسم رو یه جا مینوشتم. هیچ چیزی جای خودش نبود اصلا فکرشو نمیکردم هرچیزی جای خاص خودشو داره تا اینکه رسیدم به نگهداری محصول. کم کم واسم مهم شد که چطور باید یک محصولی که 5 ماه پیش نوشتم رو تغییر بدم یا خطایی داره خطای اونو برطرف کنم توی همین فکر و درگیر با دغدغه های این مدلی بودم که وارد تیم شدم دیدم واقعا به یک ساختار مشخص نیازه تا بتونیم همو بفهمیم یعنی اگر یه روز من نباشم همکارم بخواد یه قسمتی از برنامه رو تغییر بده، بنده ی خدا باید سه روز بگرده ببینه مثلا کلاس مربوط به ساخت جدول A کجاست که بعد تازه بخواد یه فیلد بهش اضافه کنه تا اینکه با الگوهای معماری آشنا شدم. بنظرم واقعا بخش جذاب کدنویسی همین architecture design pattern هاست. بچه هایی که asp کارمیکنن مفهوم mvc رو خوب میدونن زیاد باهاش سر و کار داشتن یا بچه هایی که لاراول کار میکنن . الگوهای معماری که توی اندروید داریم زیادن مثل mvp, mvvm و ... بنظرم از همه جذاب تر و کاربردی تر mvvm . با الگوی معماری مشخص میشه که view شما کجاست، viewmodel کجاست اصلا چطور باید اینارو بهم وصل کنید و ...

مقاله های زیادی درموردش نوشتن که پیشنهاد میکنم حتما بخونید (شاید خودم سر فرصت درموردش اینجا نوشتم)


2-نامتقارن - asynchronous

تا حالا شده بخواین یه کاری انجام بدین کاربر متوجه نشه . مثلا کاربر یه متنی مینویسه میخواین اونو توی یه سرور یه جایی ذخیره کنین. برای اینکه کاربر معطل نشه و بتونه بقیه کاراشو انجام بده و شما اطلاعاتی که میخواینو بدون اینکه کاربر بفهمه ذخیره کنین از روش هایی مثل asynchronus استفاده کنین در حقیقت یه thread جدا از UI thread در اختیار دارین و باهاش کار خودتونو انجام میدین. کاربر بنده خدا و از همه جا بیخبر مشغول کار با UI thread خودشه :)


3-کامپوننت ناوبری - navigation component

(خودمونیم فارسیش چقدره سخته )

فکر کنم از اسمش مشخصه که چیه. فرض کنید میخواید یه روال چند مرحله رو پیش ببرین . مثلا ثبت نام و mobile authentication

اول از کاربر شماره موبایل رو میگیرین

مرحله بعد ازش میخواین کد پیامک شده رو وارد کنه

مرحله سوم هم در صورت درست بودن کد اطلاعات فردی رو ازش میخواین وارد کنه

مراحل این مدلی که معمولا با یه دکمه next هم پیشروی میکنن و از stepper استفاده میشه بهش میگن navigation component . میتونید توی material.io درمورد stepper بیشتر بخونید.


4-روم - Room

رسیدیم به قسمت شیرین ماجرا . دومین موردی که من خیلی دوسش دارم بعد mvvm و به شدت ذوق استفاده ازش دارم Room
حالا این روم چیه که اینقدر دوسش دارم ؟

بنظرم قبل از اینکه سراغ روم برید بهتره یه سرچی در مورد model کنید. setter, getter چیه درک روم رو راحت تر میکنه .

روم یک لایبرری اندروید برای ارتباط با دیتابیس و کدنویسی راحت تره اونه . که توضیحش مفصله ولی پیشنهاد میکنم درموردش بخونید. کد نویسی کلاس های مربوط به db خیلی راحت تر میکنه.


5- تست - Test

تست کردن اپلیکیشن و نوشتن یه unit test میتونه خیلی کمک کنه تا مطمئن بشین کلاسی که اضافه/حذف/تغییر دادین مشکلی توی روند برنامه تون پیش نیاورده باشه.


6-تزریق وابستگی - Dependency Injection

خلاصه بگم . یکی از مواردی که باید رعایت کنیم اینه کلاس هایی که توی پروژه تعریف میکنیم باید ارتباط کمی با هم داشته باشن یعنی اگر من خواستم یه کلاسی رو تغییر بدم توی 5 تا کلاس دیگه شبیه دومینو مشکل پیش نیاد. برای به حداقل رسوندن این وابستگی از interface استفاده میشه (interface هم جز موارد جذاب کد نویسیه). اگر DI درست پیاده سازی بشه خیلی خوب ولی اگر درست پیاده سازی نشه میتونه خیلی بد باشه

از جمله کتابخانه هایی که توی اندروید این پیاده سازی رو راحت میکنه dagger, dagger2 میباشد.


7-کمبود حافظه - Memory Leak

همانطور که از اسمش مشخص است یکی از دغدغه های اصلی مدیریت حافظه است تا این مشکل رخ ندهد.

خوشبختانه زبان های garbage collection language مثل جاوا مدیریت حافظه رو انجام میدن ولی خب یه وقتایی حافظه به صورت منطقی ممکن است leak شود حالت های مختلفی وجود داره که توی این مقاله جاش نیست که خیلی بهش بپردازیم ولی خب مقاله های زیادی در موردش نوشته شده که میتونید مطالعه کنید . ولی یه لایبرری جالبی دیدم که memory leak پیدا میکنه و کمکتون میکنه تا این مشکل حل کنید. لینک گیت هابشو میذارم

Leak Canary GitHub


" خب این 7 مورد هم تموم شد . خیلی وقت بود تصمیم داشتم توی ویرگول بنویسم ولی بنظرم کار جذابی نمیومد همیشه خواننده بودم اما با خودم گفتم خیلی زشته آدم همیشه مصرف کننده باشه :) ببخشید اگر خوب ننوشتم و چشاتون اذیت شد و ذهنتون درگیر متوجه شدن جملات نامرتبم شد اولین بار بود.

ولی خودمون حس خوبیه نوشتن ;) . خوشحال میشم نظرتون بدونم "