রিশার্পার স্থির করে দেওয়া যায় এমন এসপিএন পৃষ্ঠায় একাধিক ফাংশন চিহ্নিত করতে পছন্দ করে। আমি যদি তাদেরকে স্থিতিশীল করি তবে এটি কি আমাকে সহায়তা করে? আমি কি তাদের স্থির করে একটি ইউটিলিটি ক্লাসে স্থানান্তরিত করব?
রিশার্পার স্থির করে দেওয়া যায় এমন এসপিএন পৃষ্ঠায় একাধিক ফাংশন চিহ্নিত করতে পছন্দ করে। আমি যদি তাদেরকে স্থিতিশীল করি তবে এটি কি আমাকে সহায়তা করে? আমি কি তাদের স্থির করে একটি ইউটিলিটি ক্লাসে স্থানান্তরিত করব?
উত্তর:
স্ট্যাটিক পদ্ধতি বনাম ইনস্ট্যান্স পদ্ধতিগুলি
10.2.5 স্ট্যাটিক এবং সি # ল্যাঙ্গুয়েজ স্পেসিফিকেশনের উদাহরণ সদস্যগণ পার্থক্যটি ব্যাখ্যা করে। সাধারণত, স্থির পদ্ধতিগুলি উদাহরণের পদ্ধতিগুলির তুলনায় খুব সামান্য কর্মক্ষমতা বর্ধন করতে পারে তবে কেবল কিছুটা চরম পরিস্থিতিতে ( এই বিষয়ে আরও কিছু তথ্যের জন্য এই উত্তরটি দেখুন)।
FxCop বা কোড বিশ্লেষণে CA1822 বিধি বলছে:
"[সদস্যদের স্থিতিশীল হিসাবে চিহ্নিত করার] পরে, সংকলক এই সদস্যদের কাছে নন-ভার্চুয়াল কল সাইটগুলি প্রেরণ করবে যা প্রতিটি কলের রানটাইমের সময় একটি চেক প্রতিরোধ করবে যা বর্তমান অবজেক্ট পয়েন্টারটি শূন্য করে না তা নিশ্চিত করে This এটি পরিমাপযোগ্য পারফরম্যান্স লাভের ফলে তৈরি হতে পারে পারফরম্যান্স-সংবেদনশীল কোডের জন্য some
ইউটিলিটি ক্লাস
আপনার নকশায় এটির অর্থ না হলে আপনার এগুলি কোনও ইউটিলিটি ক্লাসে স্থানান্তর করা উচিত নয়। স্থিতিশীল পদ্ধতি যদি কোনও নির্দিষ্ট ধরণের সাথে সম্পর্কিত হয়, যেমন একটি ToRadians(double degrees)
পদ্ধতি যেমন একটি শ্রেণীর প্রতিনিধিত্ব করে এমন একটি শ্রেণীর সাথে সম্পর্কিত, তবে সেই পদ্ধতির সেই ধরণের স্থির সদস্য হিসাবে উপস্থিত থাকা বোধগম্য হয় (দ্রষ্টব্য, বিক্ষোভের উদ্দেশ্যে এটি একটি বিভক্ত উদাহরণ)।
পারফরম্যান্স, নেমস্পেস দূষণ ইত্যাদি সমস্ত আমার দৃষ্টিতে গৌণ। নিজেকে জিজ্ঞাসা করুন যুক্তিযুক্ত কি। পদ্ধতিটি কি কোনও ধরণের উদাহরণে যৌক্তিকভাবে পরিচালিত হয়, বা এটি নিজেই টাইপের সাথে সম্পর্কিত? যদি এটি পরে থাকে তবে এটিকে একটি স্ট্যাটিক পদ্ধতি করুন। এটি কেবল কোনও ইউটিলিটি শ্রেণিতে স্থানান্তর করুন যদি এটি এমন কোনও ধরণের সম্পর্কিত যা আপনার নিয়ন্ত্রণে নেই।
কখনও কখনও এমন পদ্ধতি রয়েছে যা যৌক্তিকভাবে কোনও উদাহরণে কাজ করে তবে উদাহরণের কোনও রাজ্য এখনও ব্যবহার করে না । উদাহরণস্বরূপ, আপনি যদি একটি ফাইল সিস্টেম তৈরি করে থাকেন এবং আপনি যদি একটি ডিরেক্টরির ধারণা পেয়ে থাকেন তবে আপনি এখনও এটি প্রয়োগ করেন না, আপনি ফাইল সিস্টেমের অবজেক্টের ধরণের একটি সম্পত্তি লিখতে পারেন, এবং এটি সর্বদা ন্যায়সঙ্গত হবে "ফাইল" - তবে এটি যৌক্তিকভাবে উদাহরণের সাথে সম্পর্কিত, এবং তাই একটি উদাহরণ পদ্ধতি হওয়া উচিত। আপনি যদি পদ্ধতিটি ভার্চুয়াল করতে চান তবে এটিও গুরুত্বপূর্ণ - আপনার নির্দিষ্ট প্রয়োগের কোনও রাজ্যের প্রয়োজন হতে পারে না, তবে উত্পন্ন শ্রেণিগুলি সম্ভবত। (উদাহরণস্বরূপ, এটি কেবল পঠনযোগ্য কিনা তা কোনও সংগ্রহ জিজ্ঞাসা - আপনি এখনও সেই সংগ্রহের কেবল পঠনযোগ্য ফর্মটি প্রয়োগ করতে পারেন নি, তবে এটি স্পষ্টভাবে সংগ্রহের নিজস্ব সম্পত্তি, প্রকারের নয়))
static
ক্লাসের মধ্যে একটি পদ্ধতি চিহ্নিত করার ফলে এটি স্পষ্ট করে তোলে যে এটি কোনও উদাহরণ সদস্যদের ব্যবহার করে না, যা কোডের মাধ্যমে স্কিমিংয়ের সময় জানতে সহায়ক হতে পারে।
আপনার প্রয়োজনে এটিকে অন্য শ্রেণিতে স্থানান্তর করতে হবে না যতক্ষণ না এটি বোঝানো হয় অন্য শ্রেণীর দ্বারা ভাগ করা যা ঠিক যেমন নিবিড়ভাবে সম্পর্কিত, ধারণা-ভিত্তিক।
আমি নিশ্চিত যে এটি আপনার ক্ষেত্রে ঘটছে না, তবে একটি "দুর্গন্ধ" আমি কিছু কোডে দেখেছি যা প্রচুর স্থির পদ্ধতিতে ব্যবহার করা হয়েছিল maintaining
দুর্ভাগ্যক্রমে, তারা স্থির পদ্ধতি ছিল যা একটি নির্দিষ্ট প্রয়োগের স্থিতি নিয়েছিল। (কেন নিশ্চিত, আমাদের প্রতি প্রয়োগে কেবলমাত্র একজন ব্যবহারকারী থাকবেন! ব্যবহারকারী শ্রেণি স্থিতিশীল ভেরিয়েবলগুলিতে কেন এটি রাখে না?) তারা বিশ্বব্যাপী ভেরিয়েবলগুলি অ্যাক্সেস করার মহিমান্বিত উপায় ছিল। তাদের স্ট্যাটিক কনস্ট্রাক্টর (! )ও ছিল, যা প্রায়শই একটি খারাপ ধারণা। (আমি জানি কিছু যুক্তিসঙ্গত ব্যতিক্রম আছে)।
যাইহোক, স্থির পদ্ধতিগুলি বেশ কার্যকর যখন তারা ডোমেন-লজিককে নির্ধারণ করে যা আসলে বস্তুর উদাহরণের অবস্থার উপর নির্ভর করে না। তারা আপনার কোডটিকে অনেক বেশি পাঠযোগ্য করে তুলতে পারে।
শুধু নিশ্চিত হয়ে নিন যে আপনি এগুলি সঠিক জায়গায় রেখে দিচ্ছেন। স্থিতিশীল পদ্ধতিগুলি কি অন্য বস্তুর অভ্যন্তরীণ অবস্থাকে হস্তক্ষেপে চালিত করে? তাদের আচরণটি পরিবর্তে classes শ্রেণীর একটির অন্তর্ভুক্ত করা যায় কি? আপনি যদি উদ্বেগগুলি যথাযথভাবে আলাদা না করে থাকেন তবে পরে আপনার মাথাব্যথার কারণ হতে পারে।
এটি আকর্ষণীয় পড়া:
http://thecuttingledge.com/?p=57
রিশার্পার আসলে আপনাকে আপনার পদ্ধতিটি স্থির করার পরামর্শ দিচ্ছে না। আপনার নিজের জিজ্ঞাসা করা উচিত কেন সেই পদ্ধতিটি সেই শ্রেণিতে কেন এটির বিপরীতে, বলুন, যে ক্লাসগুলির মধ্যে তার স্বাক্ষর প্রদর্শিত হচ্ছে তার মধ্যে একটি ...
কিন্তু এখানে কি resharper documentaion বলেছেন তা হল: http://confluence.jetbrains.net/display/ReSharper/Member+can+be+made+static
কেবল @ জেসন ট্রু'র উত্তরে যুক্ত করার জন্য , এটি উপলব্ধি করা গুরুত্বপূর্ণ যে কোনও পদ্ধতিতে কেবল 'স্ট্যাটিক' লাগানো পদ্ধতিটি 'খাঁটি' হওয়ার নিশ্চয়তা দেয় না। এটি যে শ্রেণিতে এটি ঘোষিত হয়েছে সে সম্পর্কে এটি রাষ্ট্রহীন হবে, তবে এটি অন্যান্য 'স্থিতিশীল' অবজেক্টগুলিতে অ্যাক্সেস করতে পারে যা স্টেটে (অ্যাপ্লিকেশন কনফিগারেশন ইত্যাদি) রয়েছে, এটি সর্বদা খারাপ জিনিস নাও হতে পারে, তবে এর অন্যতম কারণ আমি ব্যক্তিগতভাবে স্থিতিশীল পদ্ধতিগুলি পছন্দ করতে পারি যখন আমি এটি করতে পারি যে সেগুলি খাঁটি হলে আপনি আশেপাশের পরিস্থিতি নিয়ে চিন্তা না করেই বিচ্ছিন্নভাবে তাদের সম্পর্কে পরীক্ষা করতে পারেন এবং যুক্তি করতে পারেন।
প্রদত্ত দৃশ্যে আপনার সর্বাধিক পাঠযোগ্য এবং স্বজ্ঞাত হওয়া উচিত।
পারফরম্যান্স আর্গুমেন্ট সবচেয়ে চরম পরিস্থিতি ব্যতীত ভাল নয় কারণ একমাত্র যা ঘটছে তা হ'ল this
উদাহরণস্বরূপ পদ্ধতিগুলির জন্য একটি অতিরিক্ত পরামিতি ( ) স্ট্যাকের উপরে চাপ দিচ্ছে।
শ্রেণীর মধ্যে জটিল যুক্তির জন্য, আমি পৃথক যুক্তি তৈরিতে ব্যক্তিগত স্ট্যাটিক পদ্ধতিগুলি দরকারী বলে খুঁজে পেয়েছি, যাতে উদাহরণের ইনপুটগুলি পদ্ধতি স্বাক্ষরে স্পষ্টভাবে সংজ্ঞায়িত করা হয় এবং কোনও প্রতিক্রিয়া-প্রতিক্রিয়া ঘটতে পারে না। সমস্ত আউটপুট অবশ্যই রিটার্ন মান বা আউট / রেফ প্যারামিটারের মাধ্যমে হওয়া আবশ্যক। পার্শ্ব-প্রতিক্রিয়াহীন কোড ব্লকগুলিতে জটিল যুক্তি ভঙ্গ করা কোডের পঠনযোগ্যতা এবং এতে বিকাশের দলের আত্মবিশ্বাসকে উন্নত করতে পারে।
অন্যদিকে এটি ইউটিলিটি পদ্ধতির বিস্তার দ্বারা দূষিত শ্রেণীর দিকে নিয়ে যেতে পারে। যথারীতি, যৌক্তিক নামকরণ, ডকুমেন্টেশন এবং দল কোডিং কনভেনশনগুলির ধারাবাহিক প্রয়োগ এটিকে হ্রাস করতে পারে।
কোনও পদ্ধতি স্থির করার অর্থ আপনি প্রথম শ্রেণীর কোনও উদাহরণ তৈরি না করেই ক্লাসের বাইরে থেকে পদ্ধতিটি কল করতে পারেন। তৃতীয় পক্ষের বিক্রেতার জিনিস বা অ্যাড-অনগুলির সাথে কাজ করার সময় এটি সহায়ক। কল্পনা করুন যদি কন.আরাইটলাইন () কল করার আগে আপনাকে প্রথমে কোনও কনসোল অবজেক্ট "কন" তৈরি করতে হয়েছিল;
এটি নেমস্পেস দূষণ নিয়ন্ত্রণে সহায়তা করে।
Class.a_core_function( .. )
বনামa_core_function( .. )
কেবল আমার টিপ্পেন্স: একটি ইউটিলিটি ক্লাসে ভাগ করা স্ট্যাটিক সমস্ত পদ্ধতি যুক্ত করা আপনাকে যুক্ত করতে দেয়
using static className;
আপনার ব্যবহারের বিবৃতিতে, যা কোডটি টাইপ করতে দ্রুত এবং পড়তে সহজ করে তোলে। উদাহরণস্বরূপ, আমার উত্তরাধিকার সূত্রে প্রাপ্ত কিছু কোডে যাকে "গ্লোবাল ভেরিয়েবল" বলা হবে তার একটি বিশাল সংখ্যা আমার আছে have উদাহরণস্বরূপ শ্রেণিতে বৈশ্বিক ভেরিয়েবলগুলি তৈরি করার পরিবর্তে আমি সেগুলি সমস্ত বিশ্বব্যাপী স্ট্যাটিক বৈশিষ্ট্য হিসাবে সেট করেছি। এটি কাজটি করে, যদি অগোছালোভাবে হয়, এবং আমি কেবলমাত্র নাম অনুসারে সম্পত্তিগুলি রেফারেন্স করতে পারি কারণ আমার কাছে স্থির নেমস্পেস ইতিমধ্যে রেফারেন্সযুক্ত।
এটি ভাল অনুশীলন কিনা তা আমার কোনও ধারণা নেই। আমার কাছে সি # 4/5 এবং রিফ্যাক্টরের কাছে এতটা লিগ্যাসি কোড শিখার জন্য আমি অনেক কিছুই পেয়েছি যা আমি কেবল রোজলিন টিপস আমাকে গাইড করতে দেওয়ার চেষ্টা করছি।
জোয়ি
আমি আশা করি, আপনি ইতিমধ্যে স্থির এবং উদাহরণ পদ্ধতির মধ্যে পার্থক্য বুঝতে পেরেছেন। এছাড়াও, একটি দীর্ঘ উত্তর এবং একটি সংক্ষিপ্ত উত্তর থাকতে পারে। দীর্ঘ উত্তর ইতিমধ্যে অন্যদের দ্বারা সরবরাহ করা হয়েছে।
আমার সংক্ষিপ্ত উত্তর: হ্যাঁ, রিশার্পার পরামর্শ দিলে আপনি এগুলি স্থিতিশীল পদ্ধতিতে রূপান্তর করতে পারেন। এতে করে কোনও ক্ষতি হয় না। পরিবর্তে, পদ্ধতিটি স্থিতিশীল করে, আপনি আসলে পদ্ধতিটি রক্ষণ করছেন যাতে অকারণে আপনি কোনও পদ্ধতিতে সদস্যদের সেই পদ্ধতিতে পিছলে না যান। এইভাবে, আপনি একটি OOP নীতি অর্জন করতে পারেন " ক্লাস এবং সদস্যদের অ্যাক্সেসযোগ্যতা ছোট করুন "।
যখন রিশার্পার পরামর্শ দিচ্ছেন যে একটি উদাহরণ পদ্ধতিটি একটি স্ট্যাটিক পদ্ধতিতে রূপান্তর করা যায়, তখন এটি আপনাকে সত্যিই বলে দিচ্ছে, "কেন .. এই পদ্ধতিটি এই শ্রেণীর মধ্যে বসে কারণ এটি আসলে এর কোনও রাজ্যই ব্যবহার করছে না?" সুতরাং, এটি আপনাকে চিন্তার জন্য খাবার দেয়। তারপরে, আপনি সেই স্ট্যাটিক ইউটিলিটি ক্লাসে স্থান পরিবর্তন করার প্রয়োজনটি অনুধাবন করতে পারেন। সলাইড নীতি অনুসারে, একটি শ্রেণীর কেবল একটি মূল দায়িত্ব থাকা উচিত। সুতরাং, আপনি সেভাবে আপনার ক্লাসগুলির আরও ভাল পরিষ্কার করতে পারেন। কখনও কখনও, এমনকি আপনার ইনস্ট্যান্স ক্লাসে আপনার কিছু সহায়ক পদ্ধতি প্রয়োজন। যদি এটি হয় তবে আপনি এটিকে একটি # অঞ্চল সহায়িকার মধ্যে রাখতে পারেন।