অপরিবর্তনীয় বস্তুর জন্য ইন্টারফেস ঘোষণা করবেন না
[সম্পাদনা] যেখানে প্রশ্নে থাকা বস্তুগুলি ডেটা ট্রান্সফার অবজেক্টস (ডিটিও) বা সাধারণ পুরানো ডেটা (পিওডি) প্রতিনিধিত্ব করে
এটি কি যুক্তিসঙ্গত গাইডলাইন?
এখন অবধি, আমি প্রায়শই সিল করা ক্লাসগুলির জন্য ইন্টারফেস তৈরি করেছি যা অপরিবর্তনীয় (ডেটা পরিবর্তন করা যায় না)। আমি যেখানেই অপরিবর্তনীয়তা সম্পর্কে যত্ন নিয়েছি সেখানে ইন্টারফেসটি ব্যবহার না করার জন্য আমি সাবধান হওয়ার চেষ্টা করেছি।
দুর্ভাগ্যক্রমে, ইন্টারফেস কোডটি বিস্তৃত করা শুরু করে (এবং এটি কেবল আমার কোড নয় যা আমি উদ্বিগ্ন)। আপনি একটি ইন্টারফেসটি পাস করার সময় শেষ হয়ে যান এবং তারপরে এটি এমন কোনও কোডে পাস করতে চান যা সত্যিই ধরে নিতে চায় যে জিনিসটি এতে প্রেরণ করা যাচ্ছে তা স্থাবর নয়।
এই সমস্যার কারণে, আমি কখনও পরিবর্তনযোগ্য বস্তুর জন্য ইন্টারফেস ঘোষণার বিষয়টি বিবেচনা করছি।
ইউনিট টেস্টিংয়ের ক্ষেত্রে এটির র্যামফিকেশন থাকতে পারে তবে এটির চেয়েও কি এটিকে যুক্তিসঙ্গত গাইডলাইন বলে মনে হচ্ছে?
বা "স্প্রেডিং-ইন্টারফেস" সমস্যাটি এড়াতে আমার অন্য প্যাটার্নটি ব্যবহার করা উচিত?
(আমি এই অপরিবর্তনীয় জিনিসগুলি বেশ কয়েকটি কারণে ব্যবহার করছি: মূলত থ্রেড সুরক্ষার জন্য যেহেতু আমি প্রচুর মাল্টি-থ্রেড কোড লিখি; তবে এর কারণও এর অর্থ আমি পদ্ধতিগুলিতে পাস করা বস্তুর প্রতিরক্ষামূলক অনুলিপিগুলি এড়াতে পারি Code কোড এতে অনেক সহজ হয়ে যায় অনেকগুলি ক্ষেত্রে যখন আপনি জানেন যে কোনও কিছু স্থাবর - যা আপনাকে কোনও ইন্টারফেস হস্তান্তরিত করা হয় না তা আসলে, আপনি প্রায়শই এমনকি কোনও ইন্টারফেসের মাধ্যমে উল্লেখ করা কোনও সামগ্রীর প্রতিরক্ষামূলক অনুলিপিও তৈরি করতে পারবেন না যদি এটি সরবরাহ করে না ক্লোন অপারেশন বা এটি সিরিয়াল করার কোনও উপায় ...)
[Edit]
অবজেক্টগুলি অপরিবর্তনীয় করে তুলতে চাওয়ার জন্য আমার আরও অনেক প্রসঙ্গ সরবরাহ করতে, এরিক লিপার্টের এই ব্লগ পোস্টটি দেখুন:
http://blogs.msdn.com/b/ericlippert/archive/tags/immutability/
আমার এও উল্লেখ করা উচিত যে আমি এখানে কয়েকটি নিম্ন-স্তরের ধারণাগুলির সাথে কাজ করছি, যেমন আইটেমগুলি যেগুলি মাল্টি-থ্রেড জব সারিতে চারপাশে চালিত / পাস হচ্ছে। এগুলি মূলত ডিটিও।
এছাড়াও জোশুয়া ব্লচ তাঁর কার্যকর জাভা বইতে অপরিবর্তনীয় বস্তুর ব্যবহারের পরামর্শ দিয়েছেন ।
অনুসরণ করুন
সমস্ত প্রতিক্রিয়ার জন্য ধন্যবাদ। আমি সিদ্ধান্ত নিয়েছি এগিয়ে গিয়ে এই নির্দেশিকাটি ডিটিও এবং তাদের লোকদের জন্য ব্যবহার করব। এটি এখনও পর্যন্ত ভাল কাজ করছে, তবে এটি কেবল এক সপ্তাহ হয়েছে ... তবুও, এটি দুর্দান্ত দেখাচ্ছে।
এ সম্পর্কিত আরও কিছু সমস্যা রয়েছে যা সম্পর্কে আমি জানতে চাই; লক্ষণীয় যে কোনও কিছুকে আমি "গভীর বা অগভীর অপ্রয়োজনীয়তা" বলছি (নামটি আমি ডিপ এবং শ্যালো ক্লোনিং থেকে চুরি করেছি) - তবে এটি অন্য সময়ের জন্য একটি প্রশ্ন।
List<Number>
যা ধরে রাখতে পারেন Integer
, Float
, Long
, BigDecimal
, ইত্যাদি ... সবাই যার যা নিজেদের অপরিবর্তনীয় হয়।