লাইব্রেরিতে দৃশ্যমানতা পরিচালনা করার সাধারণ উপায় কী?


12

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

গৃহীত উত্তর সাইস:

থাম্বের একটি ভাল নিয়ম: যতটা সম্ভব ব্যক্তিগতভাবে সমস্ত কিছু তৈরি করুন।

এবং অন্য একটি:

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

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

আমি অনেক লাইব্রেরি এবং পরিস্থিতিতে নাম রাখতে পারে, যেখানে

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

প্রশ্নটি দীর্ঘ না হওয়া পর্যন্ত আমি আসলে এগুলির নামকরণ শুরু করেছিলাম এবং আমি সেগুলি সরিয়ে নেওয়ার সিদ্ধান্ত নিয়েছিলাম।

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

যেহেতু বড় ওপেন সোর্স লাইব্রেরিগুলি কোনও নতুন জিনিস নয় তাই অবজেক্ট-ওরিয়েন্টেড ভাষাগুলি সহ এই জাতীয় প্রকল্পগুলিতে দৃশ্যমানতা পরিচালনা করার সবচেয়ে সাধারণ উপায় কী?



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

2
আমার বক্তব্য এটি সম্পর্কে নয় তবে এই প্রসঙ্গে কোনও অর্থ না দিয়ে ওপেন সোর্স সম্পর্কিত আপনার রেফারেন্স সম্পর্কে। আমি কল্পনা করতে পারি যে বাস্তববাদী চাহিদা কীভাবে কিছু ক্ষেত্রে কঠোর নীতিগুলি থেকে বিচ্যুতিকে ন্যায়সঙ্গত করতে পারে ( প্রযুক্তিগত debt ণ আদায়কারী হিসাবেও পরিচিত ) তবে এই দৃষ্টিকোণ থেকে এটি কোড বন্ধ বা উন্মুক্ত উত্স কিনা তা বিবেচ্য নয়। বা আরো সঠিকভাবে এটা বিপরীত দিক গুরুত্বপূর্ণ এক তুলনায় আপনি এখানে কাল্পনিক কারণ কোড হচ্ছে ওপেন সোর্স এই চাহিদার কম বন্ধ চেয়ে কারণ এটি অতিরিক্ত অপশন এই মোকাবেলার উপলব্ধ করা হয় টিপে করতে পারেন করতে পারেন
মশা

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

1
@ পেগেমস: আমি আপনার প্রশ্নটি বুঝতে পারি না। "জাভা" একটি ভাষা, একটি লিবিব নয়। এবং যদি "আপনার সামান্য ওপেন সোর্স লাইব্রেরি" এর খুব কড়া দৃশ্যমানতা থাকে, তবে দৃশ্যমানতা প্রসারিত করার পরে সাধারণত পিছনের সামঞ্জস্যতা ভেঙে যায় না। অন্য রাস্তা।
ডক ব্রাউন

উত্তর:


15

দুর্ভাগ্যজনক সত্যটি হ'ল অনেক লাইব্রেরি নকশাকৃত নয়, লিখিত হয় । এটি দুঃখজনক, কারণ কিছুটা পূর্ব চিন্তাভাবনা রাস্তায় নেমে আসা অনেক সমস্যা প্রতিরোধ করতে পারে।

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

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

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

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

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

তার বদলে কী হয়? লাইব্রেরির বর্তমান অবস্থার সাথে যদি উল্লেখযোগ্য ব্যথা হয় তবে বিকাশকারীরা সময়ের সাথে জমে থাকা প্রকৃত ব্যবহারের ক্ষেত্রে সমস্ত জ্ঞান নিতে পারে এবং লাইব্রেরির একটি সংস্করণ 2 লিখতে পারে। এটা দুর্দান্ত হবে! এটি সেই সমস্ত বাই-ডিজাইন বাগগুলি ঠিক করে দেবে! এটি প্রত্যাশার চেয়েও বেশি সময় নিতে পারে, অনেক ক্ষেত্রে উদ্ভট হয়ে ওঠে। এবং নতুন সংস্করণটি যদি পুরানো সংস্করণের সাথে খুব আলাদা হয় তবে ব্যবহারকারীদের মাইগ্রেশন করতে উত্সাহিত করা কঠিন হতে পারে। তারপরে আপনি দুটি বেমানান সংস্করণ বজায় রেখে গেছেন।


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

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

8

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

ওএসএস এবং বদ্ধ উত্সের মধ্যে পার্থক্য হ'ল বেশিরভাগ লোক কোডের চারপাশে একটি সম্প্রদায় তৈরি এবং বর্ধনের চেষ্টা করছেন যাতে এটি একাধিক ব্যক্তি লাইব্রেরি রক্ষণাবেক্ষণ করে। এটি বলেছিল, বেশ কয়েকটি পরিচালনার সরঞ্জাম উপলব্ধ রয়েছে:

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

পরিণত প্রকল্পগুলিতে, আপনি যা দেখবেন তা এই লাইনগুলির সাথে কিছু রয়েছে:

  1. কেউ লাইব্রেরিটির সাথে এমন কিছু করতে চায় যা এটি করার জন্য প্রথমে তৈরি করা হয়নি
  2. ইস্যু ট্র্যাকিংয়ে তারা টিকিট যুক্ত করে
  3. দলটি মেলিং তালিকায় বা মন্তব্যে এই বিষয়টি নিয়ে আলোচনা করতে পারে এবং অনুরোধকারীকে সর্বদা আলোচনায় যোগ দেওয়ার জন্য আমন্ত্রিত করা হয়
  4. এপিআই পরিবর্তনটি কোনও কারণে গ্রহণযোগ্য ও অগ্রাধিকারপ্রাপ্ত বা প্রত্যাখ্যাত

এই মুহুর্তে, যদি পরিবর্তনটি গৃহীত হয় তবে ব্যবহারকারী এটি স্থির হয়ে তত দ্রুত করতে চায়, তারা কাজটি করতে পারে এবং একটি পুল অনুরোধ বা একটি প্যাচ (সংস্করণ নিয়ন্ত্রণ সরঞ্জামের উপর নির্ভর করে) জমা দিতে পারে।

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


1
সম্পূর্ণরূপে সম্মত হন এবং আমি তৃতীয় পক্ষের ক্লোড-সোর্স লিবস পাশাপাশি ওপেন-সোর্স লাইবগুলির জন্য পরিবর্তিত অনুরোধ প্রক্রিয়াটি সফলভাবে অনুশীলন করেছি।
ডক ব্রাউন 21

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

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

0

আমি আমার প্রতিক্রিয়াটি উচ্চারণ করব যেহেতু মনে হচ্ছে এটি কয়েকজনের সাথে স্নায়ুতে আঘাত পেয়েছে।

শ্রেণীর সম্পত্তি / পদ্ধতির দৃশ্যমানতার সুরক্ষা বা উত্সের উন্মুক্ততার সাথে কিছুই করার নেই।

দৃশ্যমানতার অস্তিত্বের কারণ, অবজেক্টগুলি 4 টি নির্দিষ্ট সমস্যায় ভঙ্গুর:

  1. সম্পাতবিন্দু

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

সত্যটি হ'ল একক থ্রেডযুক্ত রানটাইমটিকে মাথায় রেখে কোড করা আরও সহজ এবং ব্যক্তিগত কীওয়ার্ড আপনাকে মূল শব্দটি সিঙ্ক্রোনাইজ করা, বা কয়েকটি লক যুক্ত করতে দেয় এবং আপনি যদি প্রথম থেকেই এটি আবদ্ধ করেন তবে আপনার ব্যবহারকারীর কোডটি ভাঙবে না if ।

  1. ইন্টারফেসের পাদদেশ / স্ট্রিমলাইন ব্যবহারে নিজেকে গুলি করাতে বাধা দিতে সহায়তা করুন। সংক্ষেপে, এটি আপনাকে অবজেক্টের আক্রমণকারীদের নিয়ন্ত্রণ করতে সহায়তা করে।

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

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

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

  1. ব্যাপ্তি দূষণ

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

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

  1. নির্ভরতা বাঁধা হচ্ছে

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

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


1
"কোনও কিছু গোপন করার কোনও মানে নেই" - তবে এমনকি এনক্যাপসুলেশন সম্পর্কে কেন ভাবেন? অনেক প্রসঙ্গে প্রতিচ্ছবি বিশেষ সুযোগগুলির প্রয়োজন হয় না।
ফ্র্যাঙ্ক হিলিমান

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

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

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

আমি কখনই এটি ব্যবহার না করার অর্থ দিয়েছি; আমি বোঝাতে চাইছি এটি সুরক্ষার জন্য ব্যবহার করবেন না; আপনার ব্যবহারকারীর অভিজ্ঞতা উন্নত করতে এবং নিজেকে একটি মসৃণ বিকাশের পরিবেশ দিতে কৌশলগতভাবে এটি ব্যবহার করুন। আমার বক্তব্যটি এটির সুরক্ষা বা উত্সের উন্মুক্ততার সাথে কিছু করার নেই। ক্লায়েন্ট পার্শ্ব অবজেক্টগুলি সংজ্ঞা অনুসারে অন্তঃসংশোধনের জন্য দুর্বল, এবং তাদের ব্যবহারকারীর প্রক্রিয়া স্থানের বাইরে সরিয়ে আনেনক্যাপসুলেটেড জিনিসগুলিকে এনক্যাপসুলেটেড হিসাবে সমান অ্যাক্সেসযোগ্য করে তোলে।
দিমিত্রি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.