এমন কোনও পরিস্থিতি রয়েছে যেখানে সাধারণ রচনার পরিবর্তে দুর্বল রেফারেন্সগুলি ব্যবহার করা ভাল?


10

যদিও জাভা ডক্স উল্লেখ করেছে, যে দুর্বল উল্লেখগুলি মূলত ম্যাপিংগুলি ক্যানোনিকালাইজ করার জন্য হয়, আপনি ইন্টারনেটে প্রচুর , অনেক , অনেক লোককে দেখতে পাবেন যে উইকহ্যাশম্যাপ তার জীবদ্দশায় অবজেক্ট মেটাডেটা সংরক্ষণ করার জন্য উপযুক্ত। যাইহোক, কেউ একটি বোধগম্য এবং উপযুক্ত উদাহরণ তৈরি করতে বিরক্ত করে না ।

WeakHashMap ব্যবহার করে কিছু সম্পত্তি যুক্ত করতে বা মেটাডেটা শোনার জন্য আমার কাছে শোকাবহ জিনিসটি ব্যবহারের ইচ্ছার উপর ভিত্তি করে একটি স্বেচ্ছাসেবী সিদ্ধান্তের মতো। অন্য কথায় - একটি খারাপ নকশা । আমি বুঝতে পারি যে এমন পরিস্থিতি রয়েছে যেখানে উত্তরাধিকার উপলব্ধ নাও হতে পারে (চূড়ান্ত শ্রেণি, ইন্টারফেস), তবে রচনাটির কী হবে? আমি এমন একটি উদাহরণের কথা ভাবতে পারি না যেখানে রচনাটি কোনও বিকল্প হবে না। এবং অবশ্যই এটি আরও ভাল, কারণ এটি "ভাষার তাত্পর্য" পরিবর্তে সু-প্রতিষ্ঠিত নীতিতে নির্ভর করে।

সুতরাং, এমন কি কোনও পরিস্থিতি রয়েছে, যেখানে সাধারণ রচনার পরিবর্তে দুর্বল রেফারেন্সগুলি ব্যবহার করা ভাল? যদি তা না হয় তবে ইন্টারনেটের সবাই কেন এটির ভুল বলে মনে হচ্ছে?


যুক্তি ত্রুটি: "... জঘন্য জিনিসটি কেবল ব্যবহার করার ইচ্ছার উপর ভিত্তি করে নির্বিচারে সিদ্ধান্ত। অন্য কথায় - একটি খারাপ নকশা" " প্রান্তগুলি অর্থের ন্যায্যতা প্রমাণ করতে পারে না তবে শেষগুলি বৈপরীত্যের জন্য উপায়গুলি পর্যাপ্ত নয়। একই পদ্ধতিগুলির ফলে ফলাফলটি অনুমিতভাবে একটি ভাল নকশা হতে পারে। যদিও এই ক্ষেত্রে আমি তর্ক করব না। :)
cwharris

3
দুর্বল উল্লেখগুলি রচনা এবং উত্তরাধিকারের জন্য একটি orthogonal ধারণা।
রবার্ট হার্ভে

উত্তর:


13

ধরা যাক আমাকে কিছু ডেটা অবজেক্টের সাথে কিছু মেটাডেটা সংযুক্ত করতে হবে। এটি একটি দুর্দান্ত সাধারণ দৃশ্য। আমি ডেটা অবজেক্টগুলিকে নিয়ন্ত্রণ করি না, এবং সেগুলিতে প্রচুর আছে, এবং প্রশ্নযুক্ত এপিআই (কলব্যাকস, ভার্চুয়াল পদ্ধতি ইত্যাদি me) আমাকে সেই ডেটা অবজেক্টগুলি সরবরাহ করে, তবে আমার মেটাডেটা ছাড়াই। সুতরাং, আমি সেই ডেটা অবজেক্টগুলির প্রত্যেকের জন্য কিছু স্থিতি ট্র্যাক করতে হবে, যাকে আমি আগে দেখেছি এবং আবারও দেখতে পাব। আমি এই মেটাডাটাটিকে একটি শোভাবর্ধক বলব, যা এই ধারণার জন্য কখনও কখনও ব্যবহৃত হয়।

সাধারণ রচনাটি অ্যাডর্নিং অবজেক্ট (মেটাডাটা সহ একটি) থেকে অন্য অবজেক্টের (ডেটা সহ একটি) সহজে দেখার জন্য উপলব্ধি করে যে আমি যেহেতু মেটাডেটা অবজেক্ট ডিজাইনটি নিয়ন্ত্রণ করি, তাই আমি এতে সরাসরি তথ্য অবজেক্টের জন্য একটি রেফারেন্স রাখতে পারি ।

তবে, যদি না আপনি ডেটা অবজেক্টের নকশা নিয়ন্ত্রণ করেন এবং এটি পরিবর্তন করতে না পারেন, সাধারণ রচনাটি বিপরীত চেহারা সরবরাহ করে না (ডেটা অবজেক্ট থেকে কিছু মেটাডেটা)। প্রকৃতপক্ষে, যদি না আপনার মেটাডেটা অবজেক্টের সংগ্রহ থাকে, আপনি এমনকি কোনও অবজেক্ট (ডেটা) আইটেমের সাথে সম্পর্কিত মেটাডেটা আইটেমটি সনাক্ত করতে পারবেন না।

তার শোভিত মেটাডেটা অনুসন্ধান করতে অবজেক্টটি যে দিক থেকে যাচ্ছে সেদিকে তাকাতে সমস্যা ছাড়াও, মেটাডাটা আজীবন সমস্যাও রয়েছে।

ডেটা অবজেক্টটি আর ব্যবহার না করা অবস্থায় মেটাডেটা জমা হয় এবং কখনই প্রকাশ হয় না মেমরি লিক।

একটি দুর্বল রেফারেন্সিং হ্যাশম্যাপ উভয় সমস্যার সমাধান করে। এটি ডেটা প্রদত্ত মেটাডেটা সনাক্তকরণের অনুমতি দেয় এবং ডেটা মুক্ত হওয়ার পরে কিছু সময় মেটাডেটা মুক্ত হতে দেয়।

আরও উল্লেখ করুন যে একটি দুর্বল রেফারেন্সিং হ্যাশম্যাপটি কেবলমাত্র (মেটাডেটা) মানগুলি পুনরায় দাবি করতে পারে না (জিসি'ইড), তবে (তথ্য) কীগুলি পুনরায় দাবি করতে হবে (জিসি'ইড), যেহেতু যদি কীগুলি রাখা হয় তবে এটি একটি হবে মেমরি ফাঁস, এবং আরও, মানগুলি কখনই প্রকাশিত হতে পারে না।


দুর্বল-হ্যাশম্যাপ-ব্যাকযুক্ত মেটাডেটা টেবিল গণনা সহ ডেটা অবজেক্টগুলি ব্যবহার করে না কেন?
জ্যাক

2
@ জ্যাক, রচনা, বিশেষত আমার মনের মধ্যে "সাধারণ রচনা" হ'ল বস্তুগুলি অন্য বস্তুর উল্লেখ করে তবে সরাসরি তাই। রচনাটির "হ্যাস-এ" সম্পর্কটি কোনও সাধারণ রেফারেন্স বা কখনও কখনও সংগ্রহ ব্যবহার করে প্রকাশ করা হয়। এখানে হ্যাশম্যাপ একটি পরোক্ষ পদ্ধতি। আপনার কাছে হ্যাশম্যাপ না থাকলে আপনি অলংকরণে পৌঁছতে পারবেন না। যদিও রচনাতে আপনি এই নেভিগেশন করতে পারেন। সুতরাং, আমি এই মেটাডাটা রচনার চেয়ে শোভাকর বলতে পছন্দ করি তবে তারা অবশ্যই সম্পর্কিত। এফডব্লিউআইডাব্লু, অলঙ্করণটি (আইএমএইচও) ডেটা রচনা করে, কেবল অন্যভাবে নয়।
এরিক tদ

@ জ্যাক, পুনরায়: আমার শেষ এফডাব্লুআইডাব্লু, আমি ঠিক বুঝতে পেরেছি যে দুর্বল হ্যাশম্যাপ ব্যবহার করার সময় আপনি সাধারণত মেমোরি হোল্ডিংয়ের কারণে মেটাডেটা অ্যাডর্নিং অবজেক্ট থেকে অন্যটির কাছে কোনও রেফারেন্স রাখবেন না (বা যদি আপনি এরটিতে একটি চাইতেন তবে দিকনির্দেশ, এটি একটি দুর্বল রেফারেন্স হতে হবে)। সুতরাং, সাধারণত দুর্বল হ্যাশম্যাপ ক্লায়েন্ট দুটি অবজেক্টের সাথে কাজ করে যা কার্যকরভাবে একে অপরের সাথে যুক্ত হয় তবে প্রযুক্তিগতভাবে একে অপরের সাথে বস্তু রচনায় নয় in
এরিক tদ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.