আমাদের বেশিরভাগ বৃহত অ্যাপ্লিকেশনগুলিতে, আমাদের কাছে "ধ্রুবকদের" জন্য কেবলমাত্র কয়েকটি স্থান থাকে:
- জিইউআই এবং অভ্যন্তরীণ প্রতিযোগিতার জন্য একটি শ্রেণি (ট্যাব পৃষ্ঠার শিরোনাম, গ্রুপ বাক্স শিরোনাম, গণনার কারণ, গণনা)
- ডাটাবেস টেবিল এবং কলামগুলির জন্য একটি শ্রেণি (এই অংশটি কোড উত্পন্ন হয়) এবং তাদের জন্য পঠনযোগ্য নাম (ম্যানুয়ালি নির্ধারিত)
- অ্যাপ্লিকেশন বার্তাগুলির জন্য একটি শ্রেণি (লগিং, বার্তা বাক্স ইত্যাদি)
ধ্রুবকগুলি সাধারণত সেই শ্রেণীর বিভিন্ন স্ট্র্যাটে বিভক্ত হয়। আমাদের সি ++ অ্যাপ্লিকেশনগুলিতে ধ্রুবকগুলি কেবলমাত্র .h ফাইলে সংজ্ঞায়িত করা হয় এবং মানগুলি .cpp ফাইলে নির্ধারিত হয়।
এর একটি সুবিধা হ'ল সমস্ত স্ট্রিং ইত্যাদি একটি কেন্দ্রিয় স্থানে রয়েছে এবং প্রত্যেকেই জানে যে যখন কোনও কিছু পরিবর্তন করতে হবে তখন সেগুলি কোথায় পাওয়া যাবে।
এটি বিশেষত এমন কিছু যা প্রকল্প পরিচালকরা পছন্দ করে মনে করছেন লোকেরা আসা-যাওয়া করতে পারে এবং এইভাবে প্রত্যেকে অ্যাপ্লিকেশনটির কাঠামোটি খনন না করেই এই জাতীয় তুচ্ছ জিনিসগুলিকে পরিবর্তন করতে পারে।
এছাড়াও, আপনি সহজেই একই গ্রুপ গ্রুপ / ট্যাব পৃষ্ঠাগুলি ইত্যাদির শিরোনাম একবারে পরিবর্তন করতে পারেন। অন্য দিকটি হ'ল আপনি কেবল সেই ক্লাসটি মুদ্রণ করতে পারেন এবং এটি একটি নন-প্রোগ্রামারকে দিতে পারেন যিনি ক্যাপশনগুলি স্বজ্ঞাত কিনা তা পরীক্ষা করতে পারেন এবং যদি ব্যবহারকারীকে বার্তাগুলি খুব বিশদ বা খুব বিভ্রান্তিকর হয় ইত্যাদি etc.
তবে, আমি কিছু অসুবিধা দেখতে পাচ্ছি:
- প্রতিটি একক শ্রেণি দৃly়ভাবে ধ্রুবক ক্লাসে মিলিত হয়
- যুক্ত করা / অপসারণ / পুনর্নবীকরণ / একটি ধ্রুবক স্থানান্তরিত করতে অ্যাপ্লিকেশনটির কমপক্ষে 90% পুনঃসংশোধন প্রয়োজন (দ্রষ্টব্য: মান পরিবর্তন করা, কমপক্ষে সি ++ এর জন্য নয়)। আমাদের ১৫০০ ক্লাস সহ একটি সি ++ প্রকল্পে এর অর্থ প্রায় 7 মিনিটের সংকলনের সময় (প্রাকম্পাইল্ড শিরোনামগুলি ব্যবহার করা; এটি ছাড়াই এটি প্রায় 50 মিনিটের) এবং কিছু স্থির লাইব্রেরির সাথে প্রায় 10 মিনিটের সংযোগের অর্থ।
- ভিজ্যুয়াল স্টুডিও কম্পাইলারের মাধ্যমে একটি গতি অনুকূলিতকরণের রিলিজ তৈরি করতে 3 ঘন্টা সময় লাগে। আমি জানি না বিপুল পরিমাণ শ্রেণিক সম্পর্কের উত্স কিনা তবে তা পাশাপাশি হতে পারে।
- আপনি সাময়িকভাবে হার্ড-কোডিং স্ট্রিংগুলিকে সোজা কোডে চালিত করেন কারণ আপনি খুব দ্রুত কিছু পরীক্ষা করতে চান এবং কেবলমাত্র সেই পরীক্ষার জন্য 15 মিনিট অপেক্ষা করতে চান না (এবং সম্ভবত প্রতিটি পরবর্তী)। "আমি পরে এটি সংশোধন করব" - ধারণাগুলি কী ঘটে তা সকলেই জানেন।
- অন্য প্রকল্পে শ্রেণীর পুনরায় ব্যবহার করা সবসময় সহজ নয় (প্রধানত অন্যান্য টাইট কাপলিংয়ের কারণে, তবে ধ্রুবকগুলি পরিচালনা করা এটিকে সহজ করে না))
এমন ধ্রুবক কোথায় সঞ্চয় করবেন? এছাড়াও আপনার প্রকল্প পরিচালককে বোঝাতে আপনি কোন যুক্তি আনবেন যে আরও ভাল ধারণা রয়েছে যা উপরের তালিকাভুক্ত সুবিধাগুলি মেনে চলে?
একটি সি ++ দিতে নির্দ্বিধায় - নির্দিষ্ট বা স্বতন্ত্র উত্তর।
পিএস: আমি জানি এই প্রশ্নটি একধরণের সাবজেক্টিভ তবে আমি এই সাইটের প্রশ্নের চেয়ে এই জাতীয় প্রশ্নের চেয়ে ভালতর জায়গা আর কোথাও জানি না।
এই প্রকল্পে আপডেট
সংকলন সময় জিনিসটি সম্পর্কে আমার কাছে সংবাদ আছে:
কালেব এবং জিবিজাবানব এর পোস্ট অনুসরণ করার পরে আমি যখন আমার সময় পেলাম তখন আমার কনস্ট্যান্ট ফাইলটি অন্য কয়েকটি ফাইলে বিভক্ত করতাম। আমি শেষ পর্যন্ত আমার প্রকল্পটি কয়েকটি লাইব্রেরিতে বিভক্ত করেছি যা এখন অনেক সহজ ছিল। রিলিজ মোডে এটি সংকলন করে দেখা গেছে যে স্বয়ংক্রিয়ভাবে উত্পন্ন ফাইলটিতে ডেটাবেস সংজ্ঞা রয়েছে (টেবিল, কলামের নাম এবং আরও বেশি - 8000 এর বেশি প্রতীক) এবং নির্দিষ্ট কিছু হ্যাশ তৈরি করে যা রিলিজ মোডে বিশাল সংকলনের সময় ঘটায়।
লাইব্রেরিতে ডিবি কনস্ট্যান্টগুলির জন্য এমএসভিসির অপ্টিমাইজারটি নিষ্ক্রিয় করা এখন আমাদের প্রজেক্টের মোট সংকলন সময় (বেশ কয়েকটি অ্যাপ্লিকেশন) রিলিজ মোডে 8 ঘন্টা থেকে কমিয়ে এক ঘণ্টারও কম করার অনুমতি দিয়েছে!
এমএসভিসির এই ফাইলগুলি অনুকূলকরণের জন্য কেন এতটা কঠিন সময় রয়েছে তা আমরা এখনও খুঁজে পাইনি, তবে আপাতত এই পরিবর্তনটি অনেক চাপকে মুক্তি দেয় কারণ কেবলমাত্র রাত্রিকালীন বিল্ডগুলির উপর আমাদের আর নির্ভর করতে হবে না।
এই সত্য - এবং অন্যান্য সুবিধাগুলি যেমন কম টান সংযোগ, আরও ভাল পুনঃব্যবহারযোগ্যতা ইত্যাদি - এছাড়াও দেখিয়েছিল যে "ধ্রুবকগুলি" বিভক্ত করার জন্য সময় ব্যয় করা এত খারাপ ধারণা ছিল না ;-)
Update2
যেহেতু এই প্রশ্নটি এখনও কিছুটা মনোযোগ পেয়েছে:
গত কয়েক বছর ধরে আমি যা করছি তা এখানে:
প্রতিটি ধ্রুবক, পরিবর্তনশীল ইত্যাদি ঠিক তার জন্য প্রাসঙ্গিক স্কোপে রাখুন: আপনি যদি কেবল একটি একক পদ্ধতিতে ধ্রুবক ব্যবহার করেন তবে সেই পদ্ধতিতে এটি সংজ্ঞায়িত করা ঠিক আছে। যদি কোনও একক শ্রেণি এটিতে আগ্রহী হয় তবে এটিকে শ্রেণীর ব্যক্তিগত প্রয়োগের বিশদ হিসাবে ছেড়ে দিন। একইটি নেমস্পেস, মডিউল, প্রকল্প, কোম্পানির সুযোগের জন্য প্রযোজ্য। আমি সহায়ক ফাংশন এবং এর মতোগুলির জন্যও একই প্যাটার্নটি ব্যবহার করি। (আপনি যদি কোনও সার্বিক কাঠামো তৈরি করেন তবে এটি 100% প্রয়োগ করতে পারে না))
এই পুনরায় ব্যবহারযোগ্যতা, পরীক্ষাযোগ্যতা এবং রক্ষণাবেক্ষণের এমন একটি ডিগ্রি করা যেখানে আপনি কেবল কমপাইল কম সময় ব্যয় করেন না (কমপক্ষে সি ++ তে), তবে বাগফিক্সিংয়েও কম সময় ব্যয় করে, যা আপনাকে নতুন বৈশিষ্ট্যগুলি বিকাশের জন্য আরও বেশি সময় দেয়। একই সাথে, এই বৈশিষ্ট্যগুলির বিকাশ দ্রুততর হবে কারণ আপনি আরও সহজেই আরও কোড পুনরায় ব্যবহার করতে পারবেন। এটি সেন্ট্রাল কনস্ট্যান্ট ফাইলগুলির যে পরিমাণে বাড়তে পারে তার কোনও সুবিধা ছাড়িয়ে যায়।
আপনি আরও জানতে চাইলে বিশেষত ইন্টারফেস বিভাজন নীতি এবং একক দায়িত্বের নীতিটি একবার দেখুন।
আপনি যদি সম্মত হন তবে কালেবের উত্তরকে সমর্থন করুন যেহেতু এই আপডেটটি মূলত তিনি যা বলেছিলেন সেটিকে আরও সাধারণ মনে করা উচিত।