বিস্তৃত প্রশ্ন:
আপনি কি কখনও এমন একটি মান আরোপের কথা শুনেছেন? যদি তা হয় তবে এর পেছনের কারণ কী ছিল?
হ্যাঁ, আমি এটি শুনেছি এবং পুরোপুরি যোগ্য অবজেক্টের নাম ব্যবহার করে নাম সংঘর্ষকে বাধা দেয়। যদিও বিরল, যখন এটি ঘটে, তারা ব্যতিক্রমীভাবে কাঁটাযুক্ত হতে পারে।
একটি উদাহরণ:
এই ধরণের দৃশ্যের একটি উদাহরণের সাথে সম্ভবত আরও ভাল ব্যাখ্যা করা হয়েছে।
ধরা যাক আমাদের Lists<T>
দুটি পৃথক প্রকল্পের সাথে সম্পর্কিত belong
System.Collections.Generic.List<T>
MyCorp.CustomCollections.Optimized.List<T>
যখন আমরা সম্পূর্ণরূপে যোগ্য অবজেক্টের নাম ব্যবহার করি তখন এটি কোনটি List<T>
ব্যবহার করা হচ্ছে তা পরিষ্কার । এই স্পষ্টতা স্পষ্টতই ভার্বোসিটির দামে আসে।
এবং আপনি যুক্তিযুক্ত হতে পারেন, "অপেক্ষা করুন! এর আগে কেউ আর দুটি তালিকা ব্যবহার করবে না!" কোনটি যেখানে আমি রক্ষণাবেক্ষণের পরিস্থিতিটি নির্দেশ করব।
আপনি Foo
আপনার কর্পোরেশনের জন্য লিখিত মডিউল যা কর্পোরেশন অনুমোদিত, অনুকূলিতকরণ ব্যবহার করে List<T>
।
using MyCorp.CustomCollections.Optimized;
public class Foo {
List<object> myList = ...;
}
পরে, একজন নতুন বিকাশকারী আপনার করা কাজটি বাড়িয়ে দেওয়ার সিদ্ধান্ত নেয়। সংস্থার মান সম্পর্কে সচেতন না হয়ে তারা using
ব্লকটি আপডেট করে :
using MyCorp.CustomCollections.Optimized;
using System.Collections.Generic;
এবং তাড়াহুড়োয় কীভাবে জিনিসগুলি খারাপ হয়ে যায় তা আপনি দেখতে পাবেন।
এটি উল্লেখ করা তুচ্ছ হওয়া উচিত যে আপনার একই নামের দুটি মালিকানাধীন শ্রেণি থাকতে পারে তবে একই প্রকল্পের মধ্যে বিভিন্ন নেমস্পেসে। সুতরাং এটি কেবল নেট নেট ফ্রেমওয়ার্ক সরবরাহিত ক্লাসগুলির সাথে সংঘর্ষের বিষয়ে উদ্বেগ নয়।
MyCorp.WeightsAndLengths.Measurement();
MyCorp.TimeAndSpace.Measurement();
বাস্তবতা:
এখন, বেশিরভাগ প্রকল্পে কি এটি হওয়ার সম্ভাবনা রয়েছে? না সত্যিই না. কিন্তু যখন আপনি প্রচুর ইনপুট দিয়ে একটি বৃহত প্রকল্পে কাজ করছেন, আপনি আপনার উপর বিস্ফোরণের সম্ভাবনা হ্রাস করার জন্য যথাসাধ্য চেষ্টা করুন।
একাধিক অবদানকারী দল সহ বৃহত প্রকল্পগুলি অ্যাপ্লিকেশন বিশ্বে একটি বিশেষ ধরণের জন্তু। প্রকল্পের ইনপুট স্ট্রিমগুলির কারণে এবং প্রকল্পে যাঁরা অবদান রাখছেন তারা এই প্রকল্পের গাইডলাইন না পড়ার সম্ভাবনার কারণে অন্যান্য প্রকল্পগুলির জন্য অযৌক্তিক বলে মনে হচ্ছে এমন বিধিগুলি আরও প্রাসঙ্গিক হয়ে ওঠে।
দুটি বড় প্রকল্প একসাথে একত্রিত হয়ে গেলে এটিও ঘটতে পারে। যদি উভয় প্রকল্পেরই ক্লাসের নাম একই রকম হয়, তবে আপনি যখন একটি প্রকল্প থেকে অন্য প্রকল্পে উল্লেখ শুরু করেন তখন সংঘর্ষগুলি দেখতে পাবেন see এবং প্রকল্পগুলি রিফ্যাক্টরের তুলনায় খুব বড় হতে পারে বা পরিচালনগুলি রিফ্যাক্টরিংয়ের জন্য ব্যয় করা সময়টির জন্য ব্যয়কে অনুমোদন দেয় না।
বিকল্প:
আপনি জিজ্ঞাসা না করার সময়, এটি উল্লেখ করা উচিত যে এটি সমস্যার কোনও দুর্দান্ত সমাধান নয় । এমন ক্লাস তৈরি করা ভাল ধারণা নয় যেগুলি তাদের নাম স্থানের ঘোষণা ছাড়াই সংঘর্ষে পড়বে।
List<T>
বিশেষত, একটি সংরক্ষিত শব্দ হিসাবে বিবেচিত হওয়া উচিত এবং আপনার ক্লাসগুলির নাম হিসাবে ব্যবহার করা উচিত নয়।
একইভাবে, প্রকল্পের মধ্যে পৃথক নেমস্পেসগুলির অনন্য শ্রেণীর নাম থাকার জন্য প্রচেষ্টা করা উচিত। আপনি কোন নেমস্পেসের Foo()
সাথে কাজ করছেন তা স্মরণ করার চেষ্টা করা হ'ল মানসিক ওভারহেড যা সেরা এড়ানো যায়। অন্যভাবে বলেছেন: থাকা MyCorp.Bar.Foo()
এবং MyCorp.Baz.Foo()
আপনার বিকাশকারীদের ট্রিপ করতে যাচ্ছেন এবং সেরা এড়ানো হবে।
অন্য কিছু না হলে আপনি অস্পষ্টতা সমাধানের জন্য আংশিক নেমস্পেস ব্যবহার করতে পারেন। উদাহরণস্বরূপ, আপনি যদি পুরোপুরি কোনও Foo()
শ্রেণির নাম পরিবর্তন করতে না পারেন তবে আপনি তাদের আংশিক নেমস্পেসগুলি ব্যবহার করতে পারেন:
Bar.Foo()
Baz.Foo()
আপনার বর্তমান প্রকল্পের নির্দিষ্ট কারণ:
সেই মান অনুসরণ করে আপনি আপনার বর্তমান প্রকল্পের জন্য নির্দিষ্ট কারণগুলির সাথে আপনার প্রশ্ন আপডেট করেছেন। আসুন তাদের একবার দেখে নেওয়া যাক এবং সত্যিই বানির ট্রেইলটি খনন করুন।
পুরোপুরি যোগ্যতাসম্পন্ন টাইপ পেতে নামের উপর দিয়ে মাউস ঘোরা করা জটিল c সর্বদা সম্পূর্ণরূপে যোগ্যতাসম্পন্ন যোগ্যতাসম্পন্ন টাইপ দৃশ্যমান থাকা ভাল।
"কষ্টকর?" উম, না। বিরক্তিকর সম্ভবত। অন-স্ক্রিন পয়েন্টার স্থানান্তর করতে কয়েক আউন্স প্লাস্টিকের স্থানান্তর করা অসুবিধাজনক নয় । কিন্তু আমার দ্বিমত আছে.
এই যুক্তিটির লাইনটি অন্য কোনও কিছুর চেয়ে বেশি coverেকে রাখার মতো মনে হচ্ছে। অফহ্যান্ড, আমি অনুমান করতে পারি যে অ্যাপ্লিকেশনটির মধ্যে থাকা ক্লাসগুলি দুর্বলভাবে নামকরণ করা হয়েছে এবং শ্রেণীর নামটির আশেপাশে যথাযথ পরিমাণে শব্দার্থক তথ্য সংগ্রহ করার জন্য আপনাকে নেমস্পেসের উপর নির্ভর করতে হবে।
এটি পুরোপুরি যোগ্যতাসম্পন্ন শ্রেণীর নামগুলির একটি বৈধ সমর্থনযোগ্যতা নয়, সম্ভবত এটি আংশিকভাবে যোগ্য শ্রেণীর নাম ব্যবহারের জন্য একটি বৈধ সমর্থনযোগ্যতা।
ইমেল কোড স্নিপেটের পুরোপুরি যোগ্যতাসম্পন্ন নাম নেই এবং তাই বুঝতে অসুবিধা হতে পারে।
এই (অব্যাহত?) লাইনটি আমার সন্দেহকে আরও শক্তিশালী করে যে ক্লাসগুলির নাম খারাপ রয়েছে। আবার, দরিদ্র শ্রেণীর নাম রাখা পুরোপুরি যোগ্য শ্রেণীর নাম ব্যবহারের জন্য সমস্ত কিছুর প্রয়োজনের পক্ষে যথাযথ সমর্থনযোগ্যতা নয় । শ্রেণীর নামটি বুঝতে যদি অসুবিধা হয় তবে পুরোপুরি যোগ্য শ্রেণীর নামগুলি যা ঠিক করতে পারে তার চেয়ে অনেক বেশি ভুল।
ভিজ্যুয়াল স্টুডিওর (যেমন নোটপ্যাড ++ এর বাইরে) কোডটি দেখার বা সম্পাদনা করার সময়, পুরোপুরি যোগ্য টাইপের নাম পাওয়া অসম্ভব।
সমস্ত কারণগুলির মধ্যে, এটি আমার প্রায় আমার পানীয়কে থুতু দিয়েছিল। কিন্তু আবার, আমি digress।
আমি ভাবছি যে দলটি কেন প্রায়শই ভিজ্যুয়াল স্টুডিওর বাইরে কোড সম্পাদনা করে বা দেখছে? এবং এখন আমরা একটি ন্যায্যতার দিকে নজর দিচ্ছি যা নেমস্পেসগুলি কী বোঝাতে চাইছে তার অর্থেগোনাল। এটি একটি টুলিং ব্যাক আর্গুমেন্ট যেখানে কোডে সাংগঠনিক কাঠামো সরবরাহ করার জন্য নেমস্পেস রয়েছে।
এটির মতো মনে হচ্ছে যে প্রকল্পটি আপনার নিজেরাই বিকাশকারীদের সাথে খারাপ নামকরণের কনভেনশনে ভুগছেন যারা এই সরঞ্জামটি কীভাবে তাদের সরবরাহ করতে পারে তার সুবিধা নিচ্ছেন না। এবং প্রকৃত সমস্যাগুলি সমাধান করার পরিবর্তে, তারা লক্ষণগুলির মধ্যে একটির উপর একটি ব্যান্ড-এইডকে চড় মারার চেষ্টা করেছে এবং পুরোপুরি যোগ্যতাসম্পন্ন শ্রেণীর নাম প্রয়োজন। আমি মনে করি এটি একটি ভ্রান্ত পথ হিসাবে শ্রেণীবদ্ধ করা নিরাপদ।
দেওয়া হয়েছে যে এখানে খারাপ নামকরণ করা ক্লাস রয়েছে এবং ধরে নিচ্ছেন যে আপনি রিফ্যাক্টর করতে পারবেন না, সঠিক উত্তরটি ভিজ্যুয়াল স্টুডিও আইডিইকে তার সম্পূর্ণ উপকারে ব্যবহার করা। সম্ভবত ভিএস পাওয়ারটুলস প্যাকেজের মতো প্লাগইন যুক্ত করার বিষয়টি বিবেচনা করুন। তারপরে, আমি যখন দেখছি তখন আমি AtrociouslyNamedClass()
ক্লাসের নামটিতে ক্লিক করতে পারি, F12 টিপতে পারি এবং এটি কী করার চেষ্টা করছে তা আরও ভালভাবে বুঝতে ক্লাসের সংজ্ঞায় সরাসরি নিয়ে যেতে পারি। তেমনি, বর্তমানে কোডটি ব্যবহার করতে ভুগছে এমন সমস্ত দাগ খুঁজতে আমি শিফট-এফ 12 এ ক্লিক করতে পারি AtrociouslyNamedClass()
।
বাহ্যিক সরঞ্জামাদি উদ্বেগ সম্পর্কিত - করণীয় সর্বোত্তম কাজটি কেবল এটি বন্ধ করা stop স্নিপেটগুলি পিছনে পিছনে ইমেল করবেন না যদি তারা তা উল্লেখ করার সাথে সাথে পরিষ্কার করে না দেয়। ভিজ্যুয়াল স্টুডিওর বাইরের অন্যান্য সরঞ্জামগুলি ব্যবহার করবেন না কারণ সেই সরঞ্জামগুলির মধ্যে আপনার দলের যে কোডটি প্রয়োজন তার চারপাশে বুদ্ধি নেই। নোটপ্যাড ++ একটি দুর্দান্ত সরঞ্জাম, তবে এটি এই কাজের জন্য কাটেনি।
সুতরাং আপনার সাথে উপস্থাপন করা তিনটি নির্দিষ্ট ন্যায্যতা সম্পর্কিত আপনার মূল্যায়নের সাথে আমি একমত। এটি বলেছিল, আমার মনে হয় আপনাকে যা বলা হয়েছিল তা হ'ল "আমাদের এই প্রকল্পের অন্তর্নিহিত সমস্যা আছে যা সম্বোধন করতে পারে না / করতে পারে না এবং এইভাবে আমরা সেগুলি 'স্থির' করেছি।" এবং এটি স্পষ্টতই দলের অভ্যন্তরে গভীর সমস্যাগুলির সাথে কথা বলে যা আপনার জন্য লাল পতাকা হিসাবে কাজ করতে পারে।