অ্যান্ড্রয়েডে কীভাবে সংস্থাগুলির নাম রাখবেন এমন কোন কনভেনশন রয়েছে? উদাহরণস্বরূপ, বোতাম, টেক্সটভিউ, মেনুগুলি ইত্যাদি
অ্যান্ড্রয়েডে কীভাবে সংস্থাগুলির নাম রাখবেন এমন কোন কনভেনশন রয়েছে? উদাহরণস্বরূপ, বোতাম, টেক্সটভিউ, মেনুগুলি ইত্যাদি
উত্তর:
কোনও অফিসিয়াল সুপারিশ আছে কিনা তা আমি জানি না।
উইজেট এবং পাত্রে আমার লেআউটগুলিতে আইডির জন্য, আমি কনভেনশনটি ব্যবহার করি:
<layout>_<widget/container>_<name>
আমি এই লেআউটে যে কোনও ডাইমেন, স্ট্রিং, সংখ্যা এবং রঙ ব্যবহার করি তার জন্য একই কৌশলটি করি। তবে, আমি সাধারণীকরণ চেষ্টা করে দেখি। উদাহরণস্বরূপ, যদি সমস্ত বোতামের একটি সাধারণ পাঠ্য রঙ থাকে তবে আমি লেআউটটির সাথে নামেরটি উপস্থাপন করব না। সংস্থানটির নাম হবে 'বাটন_পাঠিন রঙ'। যদি সমস্ত পাঠ্যবইজুল্যান্ড একই সংস্থান ব্যবহার করে তবে এর নামকরণ করা হবে 'পাঠ্য রঙ'। স্টাইলগুলির ক্ষেত্রে এটি সাধারণত হয়।
মেনু সংস্থানগুলির জন্য আমি ব্যবহার করি:
menu_<activity>_<name>
অ্যানিমেশনগুলি কেবল আলাদা কারণ আপনি বড় হাতের অক্ষর ব্যবহার করতে পারবেন না। একই অঙ্কনযোগ্য এক্সএমএল সংস্থানগুলির জন্য যায়, আমি বিশ্বাস করি।
অ্যান্ড্রয়েড এসডিকে শুরু করার জন্য ভাল জায়গা হবে।
উদাহরণস্বরূপ, আমি ক্রিয়াকলাপের মধ্যে আইডি স্কোপ করার চেষ্টা করি।
আমার যদি ListView
এটি থাকে তবে এটি @android:id/list
সমস্ত ক্রিয়াকলাপে থাকত ।
তবে, আমার দুটি তালিকা থাকলে আমি আরও নির্দিষ্ট @id/list_apple
এবং ব্যবহার করতে পারি@id/list_orange
তাই জেনেরিক (আইডিএস, ...) পুনরায় ব্যবহার করা হয় R.java file
যখন অনন্যদ্বারদের দ্বারা পৃথক জেনেরিকগুলির সাথে উপস্থাপিত হয় (কখনও কখনও পুনরায় ব্যবহৃত হয়) ।
আন্ডারস্কোরটি একটি জিনিস, আমি পর্যবেক্ষণ করেছি, উদাহরণস্বরূপ:
লেআউট প্রস্থ হয় layout_width
মধ্যে XML এবং layoutWidth
এ কোড , তাই আমি যেমন বিদ্ধ করার চেষ্টাlist_apple
সুতরাং একটি লগইন বোতামটি হবে login
, তবে আমাদের যদি দুটি লগইন থাকে তবে login_foo
এবং login_bar
।
অ্যান্ড্রয়েডের ডকুমেন্টেশন থেকে নেওয়া । বিষয়টিতে আরও রয়েছে।
আপনার প্রশ্নের উত্তর দিতে: হ্যাঁ, আছে।
উদাহরণস্বরূপ গুগল অনুসন্ধানের মাধ্যমে আপনি তাদের অনেকগুলি খুঁজে পেতে পারেন । এবং সেরা নামকরণের সম্মেলন বলে কোনও জিনিস নেই। এটি সর্বদা আপনার প্রয়োজন এবং আপনার প্রকল্পের বৈশিষ্ট্যের উপর নির্ভর করে (সর্বাধিক গুরুত্বপূর্ণভাবে স্কোপ)।
সম্প্রতি, আমি জেরোইন মোলস থেকে অ্যান্ড্রয়েড এক্সএমএলে নামকরণের সংস্থান সম্পর্কে বেশ ভাল ব্লগ পোস্টটি পড়েছি । লেখক সমস্ত সংস্থান অনুসরণ করা উচিত এবং তারপরে প্রতিটি সংস্থান ধরণের ক্ষেত্রে এই কনভেনশনটি কীভাবে প্রয়োগ করা উচিত সেই মূলনীতিটি উল্লেখ করেছেন। উভয়ই অ্যান্ড্রয়েড রিসোর্সের নামকরণের চিট শীটে বর্ণনা করেছেন :
তারপরে তিনি প্রতিটি উপাদান এবং প্রতিটি উত্সের ধরণের বিস্তারিত বর্ণনা করেন।
আমি বলব আপনি এই কনভেনশনটি ছোট থেকে মাঝারি প্রকল্পগুলিতে ব্যবহার করতে পারেন (ব্যক্তিগত ব্যবহার, কয়েক মাসের চুক্তি প্রয়োগ)। যদিও, আমি এটি 50+ ক্রিয়াকলাপ বা 1000+ স্ট্রিং সহ দীর্ঘকালীন প্রকল্পগুলির জন্য সুপারিশ করব না।
এত বড় স্কেলের প্রকল্পগুলিতে সংস্থানসমূহের সংস্থানগুলির জন্য কীভাবে সেগুলি ব্যবহৃত হবে সে সম্পর্কে আরও তদন্ত প্রয়োজন। উদাহরণস্বরূপ স্ট্রিং নিন। আপনার দলের আকার, আপনি ব্যবহার করছেন এমন অনুবাদ কেন্দ্র (যদি থাকে তবে), আপনি যে ভিসিএস ব্যবহার করছেন (উদাহরণস্বরূপ মার্জ সংঘাতগুলি এড়ানোর জন্য) ইত্যাদি দ্বারা প্রভাবিত হতে পারে etc. ইত্যাদি আপনি এমনকি একাধিক ফাইলে স্ট্রিং বিভক্ত করার কথা ভাবতে পারেন।
আমি ধরে নিই যে আপনি কিছু শুরু করার জন্য সন্ধান করছেন। সুতরাং আমি উল্লিখিত ব্লগ পোস্টটি সুপারিশ করব। এটি সূচনাকারীদের পক্ষে ভাল এবং আপনি নিজের নিজের নামকরণের ভাল কনভেনশন তৈরি করতে অবশ্যই এটি অনুপ্রেরণা হিসাবে ব্যবহার করতে পারেন।
এও মনে রাখবেন যে প্রকল্পটি বাড়ার সাথে সাথে অনেকগুলি প্রয়োজনীয়তা এবং প্রয়োজনীয়তা সময়মতো পরিবর্তিত হতে পারে। সুতরাং এটি সম্পূর্ণ স্বাভাবিক যে নামকরণের সম্মেলনগুলি শুরুতে উপযুক্ত ছিল 2 বছর পরে উপযুক্ত হবে না। এবং এটি পুরোপুরি ঠিক আছে। আপনার ভবিষ্যতের ভবিষ্যদ্বাণী করার চেষ্টা করা উচিত নয়। কেবল একটি সম্মেলন চয়ন করুন এবং এটি অনুসরণ করুন। এটি আপনার এবং আপনার প্রকল্পের জন্য উপযুক্ত কিনা আপনি খুঁজে পাবেন। যদি তা না হয় তবে কেন এটি উপযুক্ত নয় তা নিয়ে ভাবুন এবং অন্য কিছু ব্যবহার শুরু করুন।
সংস্থানগুলিতে সংস্থানগুলি ব্যবহৃত হয়:
এই "লেআউট_ব্লাহ" কনভেনশনটি আরও কয়েকটি জায়গায় ব্যবহৃত হয়েছে। উদাহরণস্বরূপ, এখানে "state_blah" বৈশিষ্ট্য রয়েছে যা দেখতে পারাতে পারে এমন আঁকতে রাজ্য।
এছাড়াও এই দুটি কনভেনশনের কারণে (ফাইলগুলির জন্য আন্ডারস্কোর_সেটেপড, ঘোষিত সংস্থার জন্য মিক্সড কেস), আপনি বেশ কয়েকটি অসঙ্গতি খুঁজে পাবেন। উদাহরণস্বরূপ রঙগুলি ফাইল বা স্পষ্ট মান হিসাবে ঘোষণা করা যেতে পারে। সাধারণত আমরা তাদের সবার জন্য আন্ডারস্কোর_সেটেপড লাগিয়ে রাখতে চাই, তবে এটি সবসময় ঘটে না।
পরিশেষে আমরা সংস্থানগুলির নামকরণের বিষয়ে পুরোপুরি চিন্তা করি না। যেটাকে আমরা সামঞ্জস্য রাখি তা হ'ল বৈশিষ্ট্যগুলির জন্য "মিক্সডকেস" এবং লেআউট প্যারাম বৈশিষ্ট্যগুলি সনাক্ত করতে "লেআউট_ব্লাহ" ব্যবহার করুন।
এছাড়াও এখানে জনসম্পদের মাধ্যমে ব্রাউজ করা কনভেনশনগুলির জন্য একটি ভাল অনুভূতি দেওয়া উচিত:
http://developer.android.com/reference/android/R.html
আপনি বৈশিষ্ট্যগুলি সমস্ত বেশ সামঞ্জস্যপূর্ণ দেখতে পাবেন (আপনি লেআউট_ কনভেনশনটি বুঝতে পারলে), অঙ্কনযোগ্য সমস্তগুলি আন্ডারস্কোর_বিযুক্ত, ইত্যাদি,
এটি যে কোনও ভাষা বা কাঠামোর পক্ষে একটি সাধারণ সমস্যা, তবে যতক্ষণ আপনি সংরক্ষিত শব্দগুলি এড়িয়ে চলবেন ততক্ষণ ধরে নেওয়া উচিত আপনি ঠিক কী বলেছিলেন তা মনে রাখতে পারেন।
আমি লক্ষ করেছি যে অ্যান্ড্রয়েড এক্সএমএল রিসোর্স ফাইলের নামগুলিতে পুনরায় কাজ করে তবে আন্ডারস্কোরগুলি ঠিক আছে বলে মনে হয়। এডিটি আসলে বলেছে
ফাইল-ভিত্তিক সংস্থানগুলির নামগুলিতে কেবলমাত্র ছোট হাতের অ্যাজ, 0-9 বা _ থাকতে হবে।
আমাকে প্রথমে ট্রিপ করে এমন কিছু ছিল আইডির সাথে নেমস্পেসের অভাব, তবে আপনার যদি দুটি আইডির একই অ্যান্ড্রয়েড কেবল সংজ্ঞায়িত আইডি পুনরায় ব্যবহার করতে পারে তবে এটিকে সাধারণত উপেক্ষা করা যেতে পারে।
আইডির জন্য আমি একটি 3 অক্ষরের যোগ্যতা ব্যবহার করি যার পরে এটি উটের সংকেতকে বোঝায় যেমন স্ট্যাটিক পাঠ্য লেবেলের জন্য lblFoo (বা পাঠ্যদর্শন), সম্পাদনাযোগ্য পাঠ্যবাক্সের জন্য txtFoo (Android এডিটেক্সট)। এটি প্রথমে অদ্ভুত বলে মনে হতে পারে তবে আমি এটি ভিবি 6 এর পরে ব্যবহার করছি এবং এই নিয়ন্ত্রণগুলিকে লেবেল এবং পাঠ্যবাক্স বলা হত।
আমি সাধারণত ব্যবহার করি এমন আরও কয়েকটি এখানে রয়েছে:
আমি জাভা ফাইলের মধ্যেও কোডটিতে একই ব্যবহার করি তাই আমাকে এটি সম্পর্কে ভাবতে হবে না, প্যাকেজ স্কোপ এটিকে বেশ আনন্দের সাথে অনুমতি দেবে:
Button btnFoo = (Button)findViewById(R.id.btnFoo);
আপনি যদি আন্ডারস্কোর অর্থাৎ বিটিএন_ফু ব্যবহার করে কিছুটা ফাঁক যোগ করতে পছন্দ করেন তবে ... আমি যদি পুরানো অভ্যাসগুলি ভেঙে ফেলতে পারি তবে আমি সম্ভবত এটি করতাম।
তাদের মধ্যে যারা যুক্তি দিতে পারেন যে এগুলির সংক্ষিপ্ত বিবরণটি আদর্শ নাও হতে পারে এবং পিউরিস্টরা যুক্তি দিতেন যে পুরো নামটি ব্যবহার করা উচিত তবে আপনি যখন কয়েক ডজন নিয়ন্ত্রণের নামকরণ করছেন এবং বিভিন্ন সিস্টেম এবং ফ্রেমওয়ার্কের মধ্যে পরিবর্তন করছেন তখন পুরো নামগুলি তার অর্থ হারিয়ে ফেলবে, আমি এগুলি এক দশকেরও বেশি সময় ধরে ভিবি, সি ++, এএসপি.এনইটি, সি # তে উইনফর্ম এবং ভিবি.এনইটি, অ্যান্ড্রয়েড এবং পাইথনে ব্যবহার করেছেন। অ্যান্ড্রয়েড এটিকে কোনও পাঠ্যবাক্স বা সম্পাদনা পাঠ্য হিসাবে অভিহিত করে কিনা তা আমার কখনই মনে করার দরকার নেই। আমার শুধু এতগুলি জানা দরকার যে lblFoo হ'ল স্থির লেবেল এবং txtFoo ব্যবহারকারী এর মধ্যে ইনপুট টাইপ করে।
একটি চূড়ান্ত দ্রষ্টব্য হ'ল গুরুত্বপূর্ণ বিষয়গুলির বিষয়ে আপনি যে কনভেনশনটি স্থির করেন তা হ'ল নিয়ন্ত্রণের নামকরণ যথাযথ এবং ধারাবাহিকভাবে করা, যাতে আপনি অস্পষ্ট ডিফল্ট আইডির যেমন টেক্সটভিউ 5 বা বিভিন্ন কনভেনশনগুলির মিশ্রণের সাথে লড়াই না করেন don't
গুগলের প্রচারিত কোনও মানক কনভেনশন আছে বলে আমি মনে করি না। আমি বিভিন্ন ধরণের বিভিন্ন উপায়ে দেখেছি লোকেরা নাম রাখে এমনকি বিভিন্ন সরকারী গুগল অ্যাপ্লিকেশনগুলিতেও stuff
যে কোনও ডিরেক্টরি হায়ারার্কিতে 100 লেআউট (বা অঙ্কনযোগ্য, মেনু, ইত্যাদি) ফাইলগুলি বোঝার চেষ্টা করার সময় যা আপনাকে সবচেয়ে বেশি সহায়তা করে।
একটি সংক্ষিপ্ত উত্তর: আপনি যদি অ্যান্ড্রয়েড বিকাশকারীদের কাছ থেকে শিখতে চান তবে একটি ভাল উদাহরণ হ'ল সমর্থন লাইব্রেরি v7 ( https://dl-ssl.google.com/android/repository/support_r21.zip )
অন্যথায়, আমি সংস্থানসমূহের নামকরণের জন্য যা বিবেচনা করেছি তা এখানে:
১. কোড লেখার সময় সহজেই সংস্থানগুলি সন্ধান করা
২. কোড পড়ার সময় সহজেই সংস্থানগুলি বোঝা
৩. অনুবাদকদের জন্য নাম উপযোগী করা ( R.string.*
কেবলমাত্র সংস্থানসমূহ)
৪. <include/>
( R.id.*
সংস্থানসমূহের দ্বন্দ্ব) সহ বিন্যাস পুনরায় ব্যবহার করা
5.. ডিলিং গ্রন্থাগার প্রকল্পের সাথে
যৌক্তিকরূপে, সংস্থানগুলি গুছিয়ে জাভা ক্লাসগুলি প্যাকেজগুলিতে গ্রুপিং করা (বা ফাইলগুলিতে ফোল্ডারে রাখার চেয়ে আলাদা) হওয়া উচিত নয়। তবে, যেহেতু অ্যান্ড্রয়েড সংস্থাগুলির কোনও নেমস্পেস নেই, একই (উদাহরণস্বরূপ ) com.example.myapp.photo
হয়ে ওঠার জন্য সংস্থানটির নামের সাথে উপসর্গ যুক্ত করতে হবে com_example_myapp_photo
।
আমি অ্যাপ্লিকেশনটিকে সংক্ষিপ্ত অনন্য নামের সাথে পৃথক উপাদানগুলিতে (ক্রিয়াকলাপ, টুকরোগুলি, কথোপকথন, ইত্যাদি) বিভক্ত করার পরামর্শ দিচ্ছি যা উত্স উপসর্গ হিসাবে ব্যবহার করা যেতে পারে। এইভাবে আমরা সম্পর্কিত কার্যকারিতা সহ সংস্থানগুলি একসাথে ভাগ করছি, যা তাদের সন্ধান করা সহজ করে তোলে (পয়েন্ট 1) এবং আমরা একই সাথে উভয় <include/>
এবং গ্রন্থাগারের প্রকল্পগুলির সাথে সংঘাতের নামকরণ এড়াতে পারি (পয়েন্ট 4 এবং 5)। নোট করুন যে একাধিক উপাদানগুলির জন্য সাধারণ সংস্থানগুলির এখনও একটি উপসর্গ থাকতে পারে (যেমন R.string.myapp_ok_button
)।
উপসর্গের পরে, নামটি আমাদের জানাতে হবে কী সংস্থানটি ব্যবহার করা হবে (কর্মটি সম্পাদন করার জন্য, সামগ্রী প্রদর্শিত হবে ইত্যাদি)। বোঝার জন্য একটি ভাল নাম নির্বাচন করা গুরুত্বপূর্ণ (পয়েন্ট 2 এবং 3)।
কখনও কখনও "উপাদান_নাম" আমাদের পর্যাপ্ত তথ্য দেবে, যা বিশেষত সত্য যদি টাইপটি ইতিমধ্যে আর বর্গ দ্বারা দেওয়া হয় ( R.string.myapp_name_string
২ য় "স্ট্রিং" এ অপ্রয়োজনীয়)। তবে স্পষ্টভাবে টাইপ যুক্ত করা বোঝার উন্নতি করতে পারে (যেমন, এটি টোস্ট বা একটি লেবেলের মধ্যে পার্থক্য করা অনুবাদকদের পক্ষে সহায়ক হতে পারে)। কখনও কখনও "নাম" এবং "টাইপ" অংশগুলি টাইপ-ভিত্তিক ফিল্টারিংয়ের অনুমতি দেওয়ার জন্য অদলবদল করা যেতে পারে ( R.string.photo_menu_*
আমাদের কেবল ফটো উপাদানগুলির জন্য মেনু-সম্পর্কিত আইটেম দেবে)।
ধরা যাক আমরা ছবি তোলার জন্য ক্রিয়াকলাপ লিখছি, ক্লাস com.example.myapp.photo। ফটোঅ্যাক্টিভিটি। আমাদের সংস্থানগুলি এর মতো দেখতে পারে ("ফটো" উপাদান দ্বারা গোষ্ঠীযুক্ত):
R.layout.photo //if only a single layout is used
R.menu.photo
R.string.photo_capture_instructions_label
R.id.photo_capture_instructions_label
R.id.photo_capture_button
R.id.photo_capture_image
R.drawable.photo_capture_placeholder
R.dimen.photo_capture_image_height
যদি আপনি অ্যান্ড্রয়েডের ডকুমেন্টেশনগুলি ঘুরে দেখেন তবে সেখানে "সেরা অনুশীলনগুলি" সম্পর্কে বিভিন্ন উল্লেখ রয়েছে তবে অবশ্যই এর কোনও নিবিড় নিয়ম নেই। উদাহরণস্বরূপ, আইকন ডিজাইন নির্দেশিকাগুলিতে গুগল একটি "আইসি_" উপসর্গ সহ আইকনগুলির নামকরণের পরামর্শ দেয়।
শুরু করার জন্য একটি ভাল জায়গা হতে পারে সংস্থান সরবরাহ করা ।
গুগল বিকাশকারীরা কীভাবে কীভাবে কাজ করে তা যদি দেখতে চান তবে এসডিকে উত্স / উদাহরণগুলির পাশাপাশি অ্যান্ড্রয়েড বিকাশকারী ব্লগেও প্রায় খনন করুন ।
আমি স্ট্রিংয়ের জন্য পরের নামকরণের কনভেনশনটি পেয়েছি:
[<action>]_<object>_<purpose>
উদাহরণস্বরূপ, ক্লিয়ার_প্লেলিস্ট_টেক্সট, ডিলিট_সং_মেসেজ, আপডেট_প্লেলিস্ট_পসটিভবাটন_টেক্সট। এবং এখানে "ক্রিয়া" alচ্ছিক।
আপনি এখানে ধারণা পেতে কোড শৈলীর জন্য গুগল ডকুমেন্টেশন পড়তে পারেন
আমি সাধারণত আইডির সামনে "এক্স" যুক্ত না করে সম্পদ আইডির জন্য জাভা নামকরণের কনভেনশনগুলি অনুসরণ করি (ফাইলগুলির জন্য ফাইলগুলির জন্য নয়):
<TextView android:id="@+id/xTvName" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
জাভাতে আমরা এটি সহজ ব্যবহার করতে পারি (আমরা সহজভাবে স্মরণ করতে পারি)
TextView mTvName=(TextView)findViewById(R.id.xTvName);
এখানে এমটিভিএনমে (এটি সাধারণভাবে অ্যান্ড্রয়েডের নামকরণের কনভেনশনগুলির পরামর্শ দেওয়া হয়) এবং xTvName যা অ্যান্ড্রয়েড টেক্সটভিউ এর আইডি (এক্স এক্সএমএল এর জন্য x) এর অংশ হিসাবে লেআউট ফাইলে নামকরণ করা হয়েছিল, আমি এই ধরণের নামকরণ কনভেনশনগুলি বাটন এবং সম্পাদনাটেক্সট ইত্যাদির মতো দেখার জন্য অনুসরণ করি for
এক্সএমএল আইডিগুলিতে : এক্সভিউটাইপস্পেসিফিকামনাম
জাভাতে: mViewTypeSpeficName
যখন আমি জটিল লেআউটগুলি তৈরি করি তখন উপরের সম্মেলনগুলি আমার জীবনকে আরও সহজ করে তোলে। আপনার নামগুলি যতটা সম্ভব দৈর্ঘ্যে সংক্ষিপ্ত করে দেওয়ার চেষ্টা করুন এবং অন্যান্য সহ-বিকাশকারীদের কাছে সেগুলি বোধগম্য এবং অর্থবহ হলে এটি আরও ভাল।
আমাদের অ্যান্ড্রয়েড প্রকল্পগুলিতে বোতাম, লেবেল, পাঠ্য বাক্সগুলির মতো প্রচুর উপাদান রয়েছে। উদাহরণস্বরূপ "নাম" এর মতো সাধারণ নাম এটি "নাম" সনাক্ত করতে খুব বিভ্রান্তিকর যা লেবেল বা পাঠ্যবাক্স। আপনি যখন অন্য কিছু বিকাশকারী দ্বারা বিকাশিত প্রকল্পগুলি বজায় রাখেন তখন মূলত এটি ঘটে।
সুতরাং এই ধরণের বিভ্রান্তি এড়াতে আমি বোতাম টেক্সটবক্স বা লেবেলের জন্য নিম্নলিখিত নামগুলি ব্যবহার করেছি
উদাহরণ:
btnName
labName
txtName
listName
এটি আপনার পক্ষে সহায়ক হতে পারে।
কিছু বিধিনিষেধ রয়েছে:
যাইহোক, গাইডলাইনগুলি অনুসরণ করা বা মানক কোড থেকে শেখা আরও পরামর্শ দেওয়া হয়।