কৌণিক উপাদানটিতে "ব্যক্তিগত" এবং "সর্বজনীন"


120

আমি না জোড়েন তবে ব্যক্তিগত আগে foo, loadBarএবং text, আমি বিশ্বাস করি তারা প্রকাশ্য ডিফল্টরূপে।

export class RandomComponent {
  @Input() foo: string;
  @Output() loadBar = new EventEmitter();
  text: string;
}

তারা publicউপাদানটিতে থাকা কি কোনও ব্যবহারের কেস রয়েছে ?

এনক্যাপসুলেশন / সুরক্ষার কারণে, আমি কি সবসময় privateনীচের মতো সবার জন্য যুক্ত করব?

export class RandomComponent {
  @Input() private foo: string;
  @Output() private loadBar = new EventEmitter();
  private text: string;
}

ধন্যবাদ


সরল হতে একটি ব্যক্তিগত ফাংশন কেবল উপাদানটিতে ব্যবহার করতে পারে। অন্য উপাদান থেকে কোনও ব্যক্তিগত ফাংশন অ্যাক্সেস করা সম্ভব নয়। ধরা যাক, কোনও ফাংশন যদি ব্যক্তিগত হিসাবে ঘোষণা করে তবে এটি অন্য কোনও উপাদান থেকে অ্যাক্সেস হতে পারে না।
কেভিন

উত্তর:


201

এই প্রশ্নের জবাবে আরও অনেক কিছুই বলা যায়, এগুলিই আমার প্রথম চিন্তা যা আমার মনে ঝাঁপিয়ে পড়েছিল:

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

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

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

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

সুতরাং, আপনার প্রশ্নের আমার উত্তর:

নীচের মতো সবার জন্য কী আমার সর্বদা ব্যক্তিগত যুক্ত করা উচিত?

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


5
ব্যাখ্যার জন্য ধন্যবাদ. তবে আমি এটি ভুল বুঝতে পারি: আমি বুঝতে পেরেছি যে বেশিরভাগ সময় সম্পত্তি এবং পদ্ধতিগুলি ব্যক্তিগত থাকতে হবে (= "এই উপাদানটি কেবলমাত্র ব্যবহারের জন্য")। সুতরাং উত্তরটি "ডিফল্টরূপে হ্যাঁ হওয়া উচিত, যতক্ষণ না ছেলেটির সম্পত্তি / পদ্ধতিটি বাইরের দিকে প্রকাশের প্রয়োজন হয় না"। না? "না" (যা "কখনই নয়" বলে মনে হচ্ছে) উত্তর দিয়ে কেন আপনার ব্যাখ্যা শেষ করবেন?
এমসিয়ের তোফ '

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

ক্লাসের অভ্যন্তরে ব্যবহার করা হয় না এমন কনস্ট্রাক্টরের কোনও সম্পত্তি ঘোষণার সময় আমাকে সাধারণত 'সর্বজনীন' ব্যবহার করতে হয়, তবে বাইরে ব্যবহার করা হয় (যেমন টেমপ্লেট বা অন্য কোনও উপাদানের অভ্যন্তরে)।
tuliomarchetto

18

@ ড্র্রুমুর একটি ব্যক্তিগত উত্তর প্রদান করে যে ব্যক্তিগত / জনসাধারণের উদ্দেশ্যে উত্সাহিত হয়। ইনজেকশনের ব্যক্তিগত মানগুলি ব্যবহার করার সময় আরও কয়েকটি বিষয় বিবেচনা করতে হবে:

যদি আমরা টাইপস্ক্রিপ্টটি এওটি সংকলন প্রক্রিয়ার আউটপুট হিসাবে নির্গত করতে চাই তবে অবশ্যই আমাদের উপাদানগুলির টেমপ্লেটগুলিতে কেবলমাত্র সর্বজনীন ক্ষেত্রগুলিতে অ্যাক্সেস করতে হবে তা নিশ্চিত করতে হবে **


আপনার প্রথম বক্তব্য: এই ত্রুটিগুলির কোনও সদস্য ব্যক্তিগত বা সরকারী হওয়ার সাথে কোনও সম্পর্ক নেই, এগুলি কেবল ইঙ্গিত করে যে এটি ব্যবহার করা হয়নি। আপনার দ্বিতীয় দুটি পয়েন্ট বৈধ হবে যদি প্রশ্নটি টেমপ্লেটগুলিতে ব্যক্তিগত সদস্যদের রেফারেন্সের বিষয়ে ছিল তবে তা নয়। এমন প্রশ্নের জন্য এখানে দেখুন
মুরকে

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