یک قرارداد نام گذاری XML موفق | ایجاد نظم در پروژه

آخرین باری که مجبور شدید فایل string.xml باز کنید و به سختی و غرزنان دنبال ایدی String مورد نظر خودتون بگردید کی بوده ؟ یا اینکه تک تک همه drawable باز کنید و اونی که مدنظرتونه رو پیدا کنید ؟ هروقت که پروژه جدید شروع کردید خیلی مواظب architecture, CI, build flavors و و و ... بودید ولی آیا استراتژی مناسبی برای نام گذاری resources داشتید ؟ باید داشته باشید ! نبود نام مناسب باعث میشه که در مدیریت پروژتون خسته بشید با نام گذاری درست میتونید راحت پروژه کنترل کنید مخصوصا در پروژه های بزرگ ! اصل اساسیهمه resources از یه قرداد ساده پیروی میکنن : <WHAT> _ <WHERE> _ <DESCRIPTION> _ <SIZE>بیایم اول در مورد تک تک اینا صحبت کنیم<WHAT>هموطوری که از اسمش پیداست نشان میده که دقیقا resources چه چیزی هستن ؟ معمولا Android View Class برای مثال : e.g. MainActivity -> activiy<WHERE>توضیحی درباره اینکه از لحاظ منطقی در کجای اپ شما قرار دارد اگر در جاهای مختلفی استفاده میکنید از all و در غیر این صورت از اسم کلاسی که داخلش ازش استفاده میشه استفاده کنیدبرای مثال : e.g. MainActivity -> mainArticleDetailFragment -> articledetail<DESCRIPTION>یه توضیحی تقریبا یک کلمه برای تفکیک عناصر در یک صفحه مثال : e.g. title<SIZE> (optional)این قسمت اختیاری و معمولا برای سایز دهی استفاده میشه مثال : 24dpsmallچندتا مثال Layouts (<WHAT><WHERE>.XML): activity_main.xml Strings (<WHERE><DESCRIPTION>): main_introall_doneDrawables (<WHRE><DESCRIPTION><SIZE>):main_backgroundall_infoicon_smallID (<WHAT><WHERE><DESCRIPTION>):linearlayout_main_fragmentcontaineمزایاقسمت WHERE توصیف می کند که کدام صفحه از یک منبع متعلق به آن است. از این رو ، به راحتی میتونید همه IDs, drawables, dimensions را برای یک صفحه خاص دریافت کنید.قسمت WHAT در ایدی منابع ها نام کلاسی که Xml متعلق به ان هست را توصیف میکند پس در findViewById() برای شما راحت تر که چه چیزی را صدا بزنید فایل هایی که در اندروید استودیو لیست میشوند معمولا بر اساس الفبا ترتیب بندی میشوند و با رعایت این نوع قرار داد نامگذاری یک لیست منظم از فایل هایتان دارید و برایتان پیدا کردن فایل مدنظرتون بسیار اسان میشود نام های منابع بسیار قابل پیشبینی شده و استفاده از autocomplete اندروید استودیو بسیار اسان میشودبه طور کلی تمام منابع منطقی نام گذاری میشوند و این امر باعث میشود پروژه تمیز تری داشته باشید چندتا مثال میزنم براتون از چند قسمت پروژه :1. Layoutsمعمولا در پروژه ها ما برای هر اسکرینی یک Layout دارم پس در نتیجه خیلی ساده ست نحوه نام گذاریش :WHAT_WHERE.XMLWhat معمولا یکی از موارد زیر است :activity = content view for activityfragment = view for a fragmentview = inflated by a custom viewitem = layout used in list/recycler/gridviewlayout = layout reused using the include tagمثال : activity_main: content view of the MainActivityfragment_articledetail: view for the ArticleDetailFragmentview_menu: layout inflated by custom view class MenuViewitem_article: list item in ArticleRecyclerViewlayout_actionbar_backbutton: layout for an actionbar with a backbutton (too simple to be a customview)2. Stringsدر String ها کلمه what نامربوطه پس بجاش از Where برای نشان دادن محل استفاده , استفاده میکنیم : <WHERE>_<DESCRIPTION>و یا برای استفاده از String در کل برنامه : all_<DESCRIPTION>مثال : articledetail_title: title of ArticleDetailFragmentfeedback_explanation: feedback explanation in FeedbackFragmentfeedback_namehint: hint of name field in FeedbackFragmentall_done: generic “done” string3. Drawables این هم مانند String ها از Where استفاده میکنیم :<WHERE>_<DESCRIPTION>_<SIZE>و یا برای استفاده در کل برنامه :all_<DESCRIPTION>_<SIZE>به صورت اختیاری میتوانید یک آرگومان Size اضافه کنید که یا میتواند به صورت 26 باشد یا largeمثال : articledetail_placeholder: placeholder in ArticleDetailFragmentall_infoicon: generic info iconall_infoicon_large: large version of generic info iconall_infoicon_24dp: 24dp version of generic info icon4. IDsبرای ID کلمه What نام کلاسی است که به آن تعلق دارد و Where اسکرینی است که در ان قرار دارد و میتوانید برای ID هایی که مشابه هستند میتوانید DESCRIPTION هم به صورت اختیاری اضافه کنید : <WHAT>_<WHERE>_<DESCRIPTION>مثال : ablayout_main -> TabLayout in MainActivityimageview_menu_profile -> profile image in custom MenuViewtextview_articledetail_title -> title TextView in ArticleDetailFragment5. Dimensionsپروژه باید مجموعه محدودی از dimensions را تعریف کنید که مرتبا مورد استفاده قرار میگیرد که این باعث میشه کلمه all به طور پیشفرض در نامگذاری باشد : <WHAT>_all_<DESCRIPTION>_<SIZE>برای جاهای خاص میتوانید از Where هم استفاده کنیدکلمه WHAT در dimensions معمولا یکی از موارد زیر است البته توجه داشته باشید که لیست پایین شامل بیشترین موارد استفاده شده از کلمه What است : height_toolbar: height of all toolbarskeyline_listtext: listitem text is aligned at this keylinetextsize_medium: medium size of all textsize_menu_icon: size of icons in menuheight_menu_profileimage: height of profile image in menuنکات مهم صفحه ها باید اسامی منحصر به فرد داشته باشندبرای جلوگیری از مشکل در آرگومان Where کلاس های شما باید اسم های منحصر به فرد داشته باشند پس در نتیجه شما نمیتوانید MainActivity و MainFragment داشته باشید چون پیشوند main قبلا مورد استفاده قرار گرفته ساپورت نکردن Refactoringبا عوض کردن اسم کلاس اسامی که در resource ها قرار تغییر نمیکنند پس اگر شما کلاس MainActivity را به SecondActivity تغییر دادید layout activity_main به activity_second تغییر نخواهد کرد امیدواریم که یه روزی اندروید استودیو چنین ویژگی را اضافه کنه :)همه نوع resource ساپورت نمیشناین قرار داد برای همه resource نیست و بعضی ها جایی توی این قرار داد ندارند مانند: Raw Assetsممنون که وقتتون رو در اختیار من گذاشتید :)بنظرتون خوب نیست که همه روی این قرار داد تمرکز کنیم و در پروژه هامون استفاده کنیم که تقریبا یه زبان مشترک بین ما بشه تا بتونیم راحت تر کد هارو ری ویو کنیم ؟ ؟ نظرتون برام خیلی مهمهاگه هم جایی اشتباه کردم لطفا بهم بگید تا ویرایش کنم...Ref :https://jeroenmols.com/blog/2016/03/07/resourcenaming/مقاله ی دیگه هم نوشتم برای اینه بتونی متوجه شی چه موقعی کیبوردت باز شده ! http://vrgl.ir/bA5Ti