আমার এক অদ্ভুত অভ্যাস আছে বলে মনে হচ্ছে ... কমপক্ষে আমার সহকর্মীর মতে। আমরা একসাথে একটি ছোট প্রকল্পে কাজ করছি। আমি ক্লাসগুলি যেভাবে লিখেছি তা হ'ল (সরল উদাহরণ):
[Serializable()]
public class Foo
{
public Foo()
{ }
private Bar _bar;
public Bar Bar
{
get
{
if (_bar == null)
_bar = new Bar();
return _bar;
}
set { _bar = value; }
}
}
সুতরাং, মূলত, আমি যখনই কোনও গিটারকে ডাকা হয় এবং ক্ষেত্রটি এখনও শূন্য থাকে তখনই আমি যে কোনও ক্ষেত্রটি শুরু করি। আমি অনুভব করেছি যে এটি কোথাও ব্যবহৃত হয় না এমন কোনও সম্পত্তি শুরু না করে ওভারলোড হ্রাস করবে।
ইটিএ: আমি এটি করার কারণটি হ'ল আমার ক্লাসে বেশ কয়েকটি বৈশিষ্ট্য রয়েছে যা অন্য শ্রেণির উদাহরণ দেয়, যার ফলে আরও বেশি শ্রেণি সহ আরও অনেক সম্পত্তি রয়েছে। শীর্ষ শ্রেণীর জন্য কনস্ট্রাক্টরকে কল করার পরে এই সমস্ত শ্রেণীর জন্য সমস্ত কনস্ট্রাক্টরকে কল করা হত, যখন তারা সবসময় সমস্ত প্রয়োজন হয় না ।
এই অভ্যাসের বিরুদ্ধে কি ব্যক্তিগত পছন্দ ব্যতীত কোনও আপত্তি আছে?
আপডেট: আমি এই প্রশ্নের ক্ষেত্রে অনেক ভিন্ন মতামত বিবেচনা করেছি এবং আমি আমার গৃহীত উত্তরের পাশে দাঁড়াব। যাইহোক, আমি এখন ধারণার আরও ভাল বোঝার দিকে এসেছি এবং কখন এটি ব্যবহার করতে হবে এবং কখন না তা স্থির করতে সক্ষম হয়েছি।
কনস:
- থ্রেড সুরক্ষার সমস্যা
- পাস করা মান শূন্য হলে কোনও "সেটার" অনুরোধ মানা হচ্ছে না
- মাইক্রো-অপ্টিমাইজেশন
- ব্যতিক্রম হ্যান্ডলিংটি কোনও কনস্ট্রাক্টরে স্থান নেওয়া উচিত
- ক্লাস 'কোড নাল জন্য পরীক্ষা করা প্রয়োজন
পেশাদাররা:
- মাইক্রো-অপ্টিমাইজেশন
- সম্পত্তিগুলি কখনই শূন্য হয় না
- "ভারী" জিনিসগুলি লোড করতে বা বিলম্ব করুন avoid
বেশিরভাগ কনস আমার বর্তমান লাইব্রেরিতে প্রযোজ্য নয়, তবে "মাইক্রো-অপ্টিমাইজেশন" আসলে কিছু আদৌ অনুকূলিত করছে কিনা তা পরীক্ষা করে দেখতে হবে।
সর্বশেষ আপডেট:
ঠিক আছে, আমি আমার উত্তর পরিবর্তন করেছি। আমার মূল প্রশ্নটি ছিল এটি একটি ভাল অভ্যাস কিনা। এবং আমি এখন নিশ্চিত যে এটি না not হতে পারে আমি এখনও এটি আমার বর্তমান কোডের কিছু অংশে ব্যবহার করব, তবে শর্তহীন এবং স্পষ্টভাবে না সমস্ত সময় না। সুতরাং আমি আমার অভ্যাসটি হারাতে যাচ্ছি এবং এটি ব্যবহার করার আগে এটি সম্পর্কে চিন্তাভাবনা করব। ধন্যবাদ সবাইকে!