আমি শুনেছি যে পাবলিক পদ্ধতির যুক্তিগুলির বৈধতা দেওয়ার পরামর্শ দেওয়া হচ্ছে:
- যদি নাল প্রত্যাশা না করে তবে কি নাল পরীক্ষা করা উচিত?
- কোনও পদ্ধতিতে কি তার পরামিতিগুলি বৈধ করা উচিত?
- এমএসডিএন - CA1062: সর্বজনীন পদ্ধতির আর্গুমেন্টগুলি বৈধ করুন (আমার কাছে নেট নেট ব্যাকগ্রাউন্ড রয়েছে তবে প্রশ্নটি সি # নির্দিষ্ট নয়)
প্রেরণা বোধগম্য। যদি কোনও মডিউলটি কোনও ভুল উপায়ে ব্যবহার করা হয়, তবে আমরা কোনও অনাকাঙ্ক্ষিত আচরণের পরিবর্তে অবিলম্বে ব্যতিক্রম নষ্ট করতে চাই।
যা আমাকে বিরক্ত করে, তা হল মডিউলটি ব্যবহার করার সময় ভুল যুক্তিই কেবল ত্রুটি নয়। এখানে কিছু ত্রুটি পরিস্থিতি রয়েছে যেখানে আমরা সুপারিশগুলি অনুসরণ করি এবং ত্রুটি বাড়াতে না চাইলে আমাদের পরীক্ষার যুক্তি যুক্ত করতে হবে:
- আগত কল - অপ্রত্যাশিত যুক্তি
- ইনকামিং কল - মডিউলটি ভুল অবস্থায় রয়েছে
- বাহ্যিক কল - অপ্রত্যাশিত ফলাফল ফিরে এসেছে
- বাহ্যিক কল - অপ্রত্যাশিত পার্শ্ব-প্রতিক্রিয়া (কলিং মডিউলে ডাবল-প্রবেশ, অন্যান্য নির্ভরশীলতাগুলির অবস্থা ভঙ্গ করে)
আমি এই সমস্ত শর্তটি বিবেচনায় নেওয়ার চেষ্টা করেছি এবং একটি পদ্ধতি সহ একটি সাধারণ মডিউল লেখার জন্য দুঃখিত (দুঃখিত, সি-সি নয়):
public sealed class Room
{
private readonly IDoorFactory _doorFactory;
private bool _entered;
private IDoor _door;
public Room(IDoorFactory doorFactory)
{
if (doorFactory == null)
throw new ArgumentNullException("doorFactory");
_doorFactory = doorFactory;
}
public void Open()
{
if (_door != null)
throw new InvalidOperationException("Room is already opened");
if (_entered)
throw new InvalidOperationException("Double entry is not allowed");
_entered = true;
_door = _doorFactory.Create();
if (_door == null)
throw new IncompatibleDependencyException("doorFactory");
_door.Open();
_entered = false;
}
}
এখন এটি নিরাপদ =)
এটা বেশ চতুর। তবে কল্পনা করুন যে এটি কয়েক ডজন পদ্ধতি, জটিল রাষ্ট্র এবং প্রচুর বাহ্যিক কল (হাই, নির্ভরতা ইনজেকশন প্রেমীদের!) সহ সত্যিকারের মডিউলে কতটা ভয়ঙ্কর হতে পারে imagine মনে রাখবেন যে আপনি যদি এমন কোনও মডিউলকে কল করছেন যা কোন আচরণকে ওভাররাইড করা যেতে পারে (সি #-তে সিলড ক্লাস নেই) তবে আপনি একটি বাহ্যিক কল করছেন এবং কলারের সুযোগে পরিণতি অনুমানযোগ্য নয়।
সংক্ষেপে বলা যায়, সঠিক উপায় কী এবং কেন? আপনি যদি নীচের বিকল্পগুলি থেকে চয়ন করতে পারেন তবে অতিরিক্ত প্রশ্নের উত্তর দিন, দয়া করে।
সম্পূর্ণ মডিউল ব্যবহার পরীক্ষা করুন। আমাদের কি ইউনিট পরীক্ষা দরকার? এই জাতীয় কোডের উদাহরণ আছে? নির্ভরতা ইনজেকশন ব্যবহারের মধ্যে সীমাবদ্ধ করা উচিত (যেহেতু এটি আরও চেক করার যুক্তি ঘটাবে)? এই চেকগুলি ডিবাগ-টাইমে স্থানান্তরিত করা কি বাস্তব নয় (মুক্তির অন্তর্ভুক্ত নয়)?
কেবল যুক্তি পরীক্ষা করুন Check আমার অভিজ্ঞতা থেকে, যুক্তি যাচাই করা - বিশেষত নাল চেকিং - সবচেয়ে কার্যকর কার্যকর চেক, কারণ যুক্তি ত্রুটি খুব কমই জটিল ভুল এবং ত্রুটির ত্রুটি বাড়িয়ে তোলে। বেশিরভাগ সময় আপনি NullReferenceException
পরের লাইনে পাবেন। সুতরাং যুক্তি যাচাই কেন এত বিশেষ?
মডিউল ব্যবহার পরীক্ষা করবেন না। এটি বেশ অপ্রিয় মতামত, আপনি কেন ব্যাখ্যা করতে পারেন?