ডেমিটারের আইন অনুসারে, কোনও শ্রেণি কি তার সদস্যদের একজনকে ফেরত দেওয়ার অনুমতি দেয়?
হ্যাঁ এটি অবশ্যই হয়।
আসুন মূল বিষয়গুলি দেখুন :
- প্রতিটি ইউনিটের অন্যান্য ইউনিট সম্পর্কে কেবল সীমিত জ্ঞান থাকা উচিত: কেবলমাত্র ইউনিট বর্তমান ইউনিটের সাথে "ঘনিষ্ঠভাবে" সম্পর্কিত।
- প্রতিটি ইউনিট শুধুমাত্র তার বন্ধুদের সাথে কথা বলা উচিত; অপরিচিতদের সাথে কথা বলবেন না
- কেবল আপনার নিকটবর্তী বন্ধুদের সাথে কথা বলুন।
তিনটিই আপনাকে একটি প্রশ্ন জিজ্ঞাসা করতে ছেড়ে দেয়: বন্ধু কে?
কী ফিরবেন সে সিদ্ধান্ত নেওয়ার সময়, লিমিটার অফ ডেমিটার বা ন্যূনতম জ্ঞানের নীতি (এলওডি) নির্দেশ দেয় না যে আপনি কোডারগুলির বিরুদ্ধে প্রতিরক্ষা করেন যা এটি লঙ্ঘন করার পক্ষে জোর দেয়। এটি নির্দেশ দেয় যে আপনি কোডারদের এটি লঙ্ঘন করতে জোর করবেন না।
এগুলি বিভ্রান্ত হওয়া ঠিক এ কারণেই কেন অনেকে মনে করে যে কোনও সেটার সর্বদা শূন্য হওয়া উচিত। না। আপনাকে অবশ্যই কোয়েরি (গেটার্স) তৈরির এমন একটি উপায়ের অনুমতি দিতে হবে যা সিস্টেমের অবস্থা পরিবর্তন করে না। এটি বেসিক কমান্ড কোয়েরি বিচ্ছেদ ।
এর অর্থ কি আপনি যা চান তা এক সাথে শৃঙ্খলাবদ্ধ কোড বেজে প্রবেশ করতে মুক্ত? না। এক সাথে শৃঙ্খলাবদ্ধ যা কেবল এক সাথে বেঁধে রাখা হয়েছিল। অন্যথায় চেইন বদলে যেতে পারে এবং হঠাৎ আপনার জিনিসগুলি ভেঙে যায়। এটিই বন্ধুরা বোঝাতে চাইছে।
দীর্ঘ চেইনের জন্য নকশা করা যেতে পারে। ফ্লুয়েট ইন্টারফেস, আইডিএসএল, অনেকটা জাভা 8, এবং ভাল ওল্ড স্ট্রিংবিল্ডার সবই আপনাকে দীর্ঘ শৃঙ্খলা তৈরি করতে দেয়। তারা এলওডি লঙ্ঘন করে না কারণ শৃঙ্খলে থাকা সমস্ত কিছুই একসাথে কাজ করা এবং একসাথে কাজ চালিয়ে যাওয়ার প্রতিশ্রুতি দেয়। যখন আপনি একে অপরের সম্পর্কে কখনও শোনেনি এমন একসাথে শৃঙ্খলাবদ্ধ হন তখন আপনি ডেমিটার লঙ্ঘন করেন। বন্ধুরা তারা যারা আপনার শৃঙ্খলাটি চালিয়ে যাওয়ার প্রতিশ্রুতি দিয়েছে। বন্ধুদের বন্ধুরা তা করেনি।
ক্লাস ছাড়াও যা নির্দিষ্টভাবে বস্তুগুলি ফিরিয়ে দেওয়ার জন্য নিযুক্ত করা হয়েছিল - যেমন কারখানা এবং বিল্ডার ক্লাস - কোনও কোনও জিনিস ফেরত দেওয়া কোনও পদ্ধতির পক্ষে ঠিক আছে, উদাহরণস্বরূপ কোনও শ্রেণীর কোনও বৈশিষ্ট্য দ্বারা রক্ষিত কোনও বস্তু যা ডিমেটারের আইনকে লঙ্ঘন করে (1) ?
এটি কেবলমাত্র ডিমিটার লঙ্ঘনের সুযোগ তৈরি করে। এটি লঙ্ঘন নয়। এটি অগত্যা খারাপও নয়।
এবং যদি এটি ডেমিটারের আইন লঙ্ঘন করে তবে কী বিষয়টি বিবেচিত হবে যদি প্রত্যাবর্তিত বস্তুটি একটি স্থাবর বস্তু যা কোনও টুকরো উপাত্ত উপস্থাপন করে এবং এই ডেটার (2) এর জন্য গেটরস ব্যতীত আর কিছুই না করে?
অপরিবর্তনীয় ভাল তবে এখানে অপ্রাসঙ্গিক। লম্বা চেইনের মাধ্যমে স্টাফ এ পৌঁছানো আরও ভাল হয় না। যা এটি আরও ভাল করে তোলে তা ব্যবহার থেকে পাওয়া আলাদা করা। আপনি যদি ব্যবহার করছেন তবে প্যারামিটার হিসাবে আপনার যা প্রয়োজন তা জিজ্ঞাসা করুন। অপরিচিত লোকদের মধ্যে ডেলিং করে এটির জন্য শিকার করবেন না।
সিউডো কোডে:
আমি সন্দেহ করি যে ডেমিটারের আইন উপরের মতো কোনও প্যাটার্ন নিষিদ্ধ করে। আইন (3) লঙ্ঘন না করে doSomethingElse () বলা যেতে পারে তা নিশ্চিত করতে আমি কী করতে পারি?
আমি কথা বলার আগে x.doSomethingElse(a)
বুঝতে হবে যে আপনি মূলত লিখেছেন
b.getA().doSomething()
এখন, এলওডি ডট গণনা অনুশীলন নয় । তবে আপনি যখন একটি শৃঙ্খলা তৈরি করবেন আপনি যখন বলছেন যে আপনি কীভাবে A
(ব্যবহার করে B
) পেতে চান এবং আপনি কীভাবে এটি ব্যবহার করতে হয় তা জানেন A
। এখনই A
এবং B
আরও ভাল ঘনিষ্ঠজন ছিল কারণ আপনি কেবল তাদের একত্রিত করেছেন।
আপনি শুধু হাত কিছুর জন্য জিজ্ঞাসা করেছিলেন আপনি একটি A
জিনিস ভালো আপনি ব্যবহার করতে পারে A
এবং যত্ন নিত হতো না এটা কোথায় থেকে এসেছে এবং B
পেয়ে সঙ্গে একটি জীবন সুখী ও আপনার আবেশ থেকে মুক্ত বাঁচতে পারে A
থেকে B
।
হিসাবে x.doSomethingElse(a)
যেখানে বিবরণ ছাড়া x
থেকে এসেছিলেন, লোদ এ সব কিছুই এটি সম্পর্কে বলার আছে।
এলওডি নির্মাণ থেকে ব্যবহার পৃথক করতে উত্সাহ দিতে পারে । তবে আমি উল্লেখ করব যে আপনি ধর্মীয়ভাবে প্রতিটি বস্তুকে বন্ধুত্বপূর্ণ হিসাবে বিবেচনা করবেন না আপনি স্থির পদ্ধতিতে কোড লিখন আটকে যাবেন। আপনি এই পদ্ধতিতে একটি দুর্দান্তভাবে জটিল অবজেক্ট গ্রাফ তৈরি করতে পারেন তবে শেষ পর্যন্ত আপনাকে কাজ শুরু করার জন্য এটিতে একটি পদ্ধতি কল করতে হবে। আপনার বন্ধুরা কে তা আপনাকে কেবল সিদ্ধান্ত নিতে হবে। এ থেকে দূরে সরে যাওয়ার কোনও দরকার নেই।
হ্যাঁ, কোনও শ্রেণিকে তার সদস্যদের একজনকে এলওডির অধীনে ফেরত দেওয়ার অনুমতি দেওয়া হয়। আপনি যখন করবেন তখন আপনার স্পষ্ট করে দেওয়া উচিত যে যদি সেই সদস্যটি আপনার শ্রেণীর সাথে বন্ধুত্বপূর্ণ হয় তবে যদি তা না হয় তবে কিছু ক্লায়েন্ট ব্যবহারের আগে এটি ব্যবহারের জন্য আপনাকে এই শ্রেণিতে সংযুক্ত করার চেষ্টা করতে পারে। এটি গুরুত্বপূর্ণ কারণ এখন আপনি যা ফিরে আসবেন অবশ্যই সর্বদা সেই ব্যবহারকে সমর্থন করুন।
এমন অনেকগুলি ঘটনা রয়েছে যেখানে এটি কেবল উদ্বেগ নয়। সংগ্রহগুলি এটিকে এড়াতে পারে কারণ এগুলি তাদের ব্যবহার করা সমস্ত কিছুতে বন্ধু হতে বোঝানো হয়েছিল। একইভাবে মান অবজেক্টস প্রত্যেকের সাথে বন্ধুত্বপূর্ণ। তবে আপনি যদি কোনও ঠিকানা যাচাইয়ের জন্য ইউটিলিটি লিখেছেন যা কোনও কর্মচারী বস্তুর দাবি করে যে এটি কোনও ঠিকানা বের করেছে, বরং কেবল ঠিকানাটি জিজ্ঞাসা করবে, ভাল আপনি আশাবাদী যে কর্মচারী এবং ঠিকানা উভয়ই একই গ্রন্থাগার থেকে এসেছে।