আমি তার শক্তির কারণে অপরিবর্তনীয় "প্যাটার্ন" পছন্দ করি এবং অতীতে আমি অপরিবর্তনীয় ডেটা ধরণের (কিছু, বেশিরভাগ বা এমনকি সমস্ত) সিস্টেমগুলি ডিজাইন করা উপকারী বলে মনে করি। প্রায়শই আমি যখন এটি করি, তখন আমি নিজেকে কম বাগ লিখতে দেখি এবং ডিবাগ করা অনেক সহজ।
যাইহোক, আমার সহকর্মীরা সাধারণত অপরিবর্তনীয় থেকে দূরে লজ্জা পান। এগুলি মোটেই অনভিজ্ঞ নয় (তবু এটি থেকে দূরে), তবু তারা ডেটা অবজেক্টগুলিকে ক্লাসিক উপায়ে লেখেন - প্রতিটি সদস্যের জন্য গেটর এবং সেটটার সহ ব্যক্তিগত সদস্যরা। তারপরে সাধারণত তাদের নির্মাতারা কোনও আর্গুমেন্ট নেন না, বা সম্ভবত সুবিধার জন্য কিছু আর্গুমেন্ট নেন। প্রায়শই, কোনও বস্তু তৈরি করা এ জাতীয় দেখাচ্ছে:
Foo a = new Foo();
a.setProperty1("asdf");
a.setProperty2("bcde");
তারা সর্বত্র এটি করতে পারে। তারা এমনকি কোনও নির্মাতার সংজ্ঞা দেয় না যে তারা দুটি গুরুত্বপূর্ণ স্ট্রিং গ্রহণ করে, তারা যতই গুরুত্বপূর্ণ হোক না কেন। এবং সম্ভবত তারা পরে এই স্ট্রিংগুলির মান পরিবর্তন করে না এবং কখনই প্রয়োজন হয় না। স্পষ্টত যদি এই জিনিসগুলি সত্য হয় তবে অবজেক্টটি অপরিবর্তনীয় হিসাবে আরও ভালভাবে ডিজাইন করা হবে, তাই না? (কনস্ট্রাক্টর দুটি সম্পত্তি নিয়ে যায়, কোনও সেটটার নেই)।
কোনও অবজেক্টের ধরণকে অপরিবর্তনীয় হিসাবে ডিজাইন করা উচিত কিনা আপনি কীভাবে সিদ্ধান্ত নেবেন? এটি বিচার করার জন্য কি মানদণ্ডের একটি ভাল সেট আছে?
আমি বর্তমানে আমার নিজের প্রকল্পে কয়েকটি ডেটা প্রকারের স্থাবর-বদলে পরিবর্তন করতে হবে কিনা তা নিয়ে বিতর্ক করছি, তবে আমি এটি আমার সহকর্মীদের কাছে ন্যায়সঙ্গত করতে হবে, এবং প্রকারের ডেটা (খুব কমই) পরিবর্তিত হতে পারে - এমন সময়ে আপনি অবশ্যই পরিবর্তন করতে পারবেন এটি অচল উপায় (একটি নতুন তৈরি করুন, পুরানো বস্তু থেকে বৈশিষ্ট্যগুলি অনুলিপি করে যা আপনি পরিবর্তন করতে চান তা বাদ দিন)। তবে আমি নিশ্চিত নই যে এটি কেবল অপরিবর্তনযোগ্যদের প্রতি আমার ভালবাসা, বা যদি তাদের থেকে / লাভের আসল প্রয়োজন হয়।