از ساخت کتابخانه برای اندروید چه چیزهایی یاد گرفتم!

تجربه ی ساخت کتابخانه برای اندروید، شما را به مراحل بالاتری از برنامه نویسی می برد، مخصوصا برای کسانی که در سمت بک اند کار نکرده اند، بسیار می تواند چالش انگیز باشد چون شما این دفعه قرار است که در نقش سرویس دهنده ظاهر شوید. پس بسیار مهم است که حتما اطلاعات کلی از ساخت آن داشته باشید تا بعد از انکه نوشتن کتابخانه شما جلوتر رفت تو دیوار نخورید!اندروید کتابخانه را به نام ماژول می شناسد(library module) پس از این به بعد من کتابخانه را به ماژول تغییر می دهم. حال میخواهیم نکات ساخت ماژول را با هم مرور کنیم:۱ - حتما از Builder Pattern استفاده کنید یا به متدهای خود ابجکت پاس دهید چون ممکن است بعدا پارامتر های ورودی شما برای هر فانکشن زیاد شود و از این طریق می تونید مدیریت و زیبایی کد بهتر داشته باشید. ۲ - متد هایی که قرار است، کاربرها استفاده کنند باید قابل درک باشد طوری که از روی اسم آنها بشود فهمید که چه کاری انجام میدهد. ۱-۲ تا آنجا که میشود تمام شرایطی را که کاربر میخواهد استفاده کند، منظور نیاز های کاربران است. دست اورا باز بگذارید، البته که بعد از بازخورد نیز می توانید آن کار را بکنید.۳ - تا انجا که امکان دارد باید کدهایی که می نویسید هیچکدام Deprecated‌ نشده باشد و به هیچ عنوان استفاده نکنید چون بعدها کاربران به مشکل بر خواهند خورد و چون هنگامی که آنها از ماژول شما در پروژه ی خود استفاده کرده اند خبر ندارند که شما چه کرده اید و اپدیت کردن ماژول شما ممکن است برای آنان مشکل ایجاد کند.۴ - دسترسی های ماژول(Permission) را تا آنجا که می شود کم کنید،چون در هنگام خروجی گرفتن کاربران ،پرمیشن های شما با دسترسی های اپلیکیشن آنها یکی می شوند.۵ - با چک کردن تمام شرط ها کار را راحت تر کنید و به عهده ی کاربر نگذارید چون او از داخل ماژول شما خبر ندارد!if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {//code here } else { //code here }۶ - تا انجا که می شود پایین ترین Sdk ‌را انتخاب کنید تا کاربران بیشتری از ماژول شما بتوانند استفاده کنند.۷ - حتما یک Readme‌ مناسب برای ماژول خود تهیه کنید بدون آن ماژول شما عملا بی استفاده خواهد بود(لینک مثال).۸ - در استفاده از کتابخانه های دیگر مانند Retrofit + Rxjava‌ حتما دقت بیشتری داشته باشید چون ممکن است Memory leak پیش بیاید.۹ - حتما ارور ها را به بیرون از ماژول انتقال بدهید و یادتان باشد که هنگامی که کاربر خروجی میگیرد دوست ندارد لاگ ماژول شما باز باشد تا هرکسی بتواند ببینید پس حتما برای این موضوع فکری بکنید و لاگ های ماژول خود را فقط در حالت دیباگ نشان دهید.۱۰ - بدانید که باید تمام dependency های ماژول شما اپدیت شود و همچنین Gradle ۱۱ - دو منبع مقابل معروفترین و بهترین منبعی هست که می توانید ماژول خود را آنجا قرار دهید : Jitpack و ‌Bintray12 - هنگامی که میخواهید در ماژول خود از یک ماژول دیگر استفاده کنید،‌صبر کنید!! تا آنجا که می شود استفاده نکنید چون اگر آنها ماژول خود را اپدیت نکنند و به مرور ماژول شما هم به مشکل جدی بر خواهد خورد اما اگر میخواهید استفاده کنید : -- خود آن ماژول بسیار پیچیده نباشد و ساده باشد.-- از api های ساده استفاده کرده باشد.-- باعث نشود که تغییرات زیادی در پروژه ی خود بدهید.-- ستاره بیشتر و بروز تر و انجمن بیشتری داشته باشد. ۱۳ - برای انکه همه ی قابلیت ها را در کتابخانه خود نیاورید می توانید مثل Retrofit عمل کنید : Gson: com.squareup.retrofit2:converter-gson Jackson: com.squareup.retrofit2:converter-jackson Moshi: com.squareup.retrofit2:converter-moshi Protobuf: com.squareup.retrofit2:converter-protobuf Wire: com.squareup.retrofit2:converter-wire Simple XML: com.squareup.retrofit2:converter-simplexml JAXB: com.squareup.retrofit2:converter-jaxbهمان طور که میبینید به کاربر گزینه ی انتخاب داده و همه ی جوانب را در نظر گرفته است. اینکار کمک به کم کردن ماژول شما می کند و همچنین تعداد کاربران زیادی را سمت ماژول شما می کشاند.۱۴ - سعی کنید حتما از annotation ‌ها استفاده کنید: private @Nullable HttpUrl baseUrl;۱۵- حتما نام نمونه در ورودی پارامترها را معنی دار بگذارید:public Builder baseUrl(URL baseUrl) { checkNotNull(baseUrl, &quotbaseUrl == null&quot); return baseUrl(HttpUrl.get(baseUrl.toString())); } ۱۶- اگر شما بخواهید متدی را Deprecate‌ اعلام کنید اول آن را با @Depreceted‌ مشخص کنید و معمولا حداقل بیشتر از ۶ ماه باید صبر کنید و بعد آن را حذف کنید‍! چون ممکن است کاربران نفهمند و همچنین باید هر نسخه که میدهید داخل فایل تغییرات بنویسید که چه اتفاقی افتاده و چه چیزهایی زیاد شده و همچنین Depreceted‌ شده است . بدون اطلاع دادن کاری را انجام ندهید.بعد از آنکه با رعایت نکات بالا ماژول خود را ساختید حال باید آن را منتشر کنید فقط دقت کنید که قبل از انکه ورژن می زنید آنرا کامل تست کرده باشید و بهتر است که برای آن تست نوشته باشید یادتون باشه شما سرویس دهنده هستید پس کاربران شما مهم هستند ‍?در راستای بهبود، مرا از نظر خود مطلع کنید.