নেস্টেড ক্লাসগুলি: একটি দরকারী সরঞ্জাম বা একটি এনক্যাপসুলেশন লঙ্ঘন?


11

সুতরাং আমি এখনও এই বেড়া ব্যবহার করছি বা না আমার এই ব্যবহার করা উচিত বা না।

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

পূর্ববর্তী জাভা / সুইং প্রকল্পগুলি আমি কিছুটা ডিগ্রিযুক্ত ক্লাস ব্যবহার করেছি, তবে এখন আমি সি # তে অন্যান্য প্রকল্পে চলে এসেছি এবং আমি তাদের ব্যবহার এড়াচ্ছি।

নেস্টেড ক্লাসগুলি সম্পর্কে আপনি কেমন অনুভব করেন?


নেস্টেড ক্লাসগুলি ঠিক কীভাবে এনক্যাপসুলেশন লঙ্ঘন করে? তারা যদি অন্য শ্রেণীর অভ্যন্তরে 'এনপ্যাপুলেটেড' থাকে সেহেতু এগুলি কিছু বেশি থাকে তবে এগুলি ব্যক্তিগতভাবে প্রাইভেট করা যায়।
স্টিভেন জিউরিস

উত্তর:


8

ভাল, খুব সহজভাবে বলতে: নেস্টেড ক্লাসগুলি এনক্যাপসুলেশন লঙ্ঘন করে না এবং সাধারণভাবে, ভাষা বৈশিষ্ট্যগুলি প্রোগ্রামিং নীতিগুলি লঙ্ঘন করে না। প্রোগ্রামাররা প্রোগ্রামিং নীতি লঙ্ঘন করে।

মজাদারভাবে যথেষ্ট, দাবি করা হয়েছে নেস্টেড ক্লাসগুলি এনক্যাপসুলেশন বাড়ায় :

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

তার মধ্যে কিছু সত্যতা আছে।

সাধারণত বি নিজেই এ-তে এসআরপি প্রয়োগের ফলস্বরূপ বি নিজেই অনেকগুলি নীতি লঙ্ঘন করে, বিশেষত যদি এটি সমস্ত কিছু এ এর ​​ব্যক্তিগত সদস্যদের সাথে গোলমাল করে থাকে: ডি

আমি মনে করি লুকানো ক্লাসগুলি কার্যকর হতে পারে। তবে অপব্যবহারের অনেক সম্ভাবনা রয়েছে।


5

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

তল লাইনটি হ'ল কোডটি পড়া / লেখাকে সহজ করে তোলে এবং খুব কমই আপনার ক্ষেত্রে অর্ডার ক্লাসের প্রয়োজন হবে এবং অর্ডার আইটেমগুলি সম্পর্কে জানতে হবে না rarely


1

ব্যক্তিগতভাবে, আমার কাছে মনে হয় এগুলি এড়ানো উচিত কারণ তারা আপনার নকশাকে বিভিন্ন (সাধারণত প্রতিকূল) উপায়ে জোড়া দেয় do

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

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


0

(সি # তে) সাধারণত আমি এগুলি এড়াতে চাই, যদিও এটি শ্রেণীর উদ্দেশ্য কী তা ঠিক নির্ভর করতে পারে।

আমি এগুলি কখনও কোনও ধরণের ডোমেন মডেল ক্লাসের জন্য ব্যবহার করব না, এটি আমার কাছে কোনও অর্থবহ নয়।

আমি এগুলি বহিরাগত শ্রেণিতে ব্যক্তিগত ডেটা গঠনের জন্য ব্যবহার করতাম তবে আমি দেখতে পেয়েছি যে প্রায় সবসময়ই বাইরের দিকের প্রয়োজন হয় প্রকল্পের আজীবন পরে যাতে সাধারণত আমি আর এটিকে বিরক্ত করি না।

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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.