ক্যান্ডি কাপ সাদৃশ্য
সংস্করণ 1: প্রতিটি ক্যান্ডির জন্য একটি কাপ
ধরা যাক আপনি এই জাতীয় কিছু কোড লিখেছেন:
Mod1.ts
export namespace A {
export class Twix { ... }
}
Mod2.ts
export namespace A {
export class PeanutButterCup { ... }
}
Mod3.ts
export namespace A {
export class KitKat { ... }
}
আপনি এই সেটআপটি তৈরি করেছেন:
প্রতিটি মডিউল (কাগজের পত্রক) এর নিজস্ব কাপের নাম পান A
। এটি অকেজো - আপনি এখানে আপনার ক্যান্ডিটি আসলেই সংগঠিত করছেন না , আপনি কেবল নিজের এবং চিকিত্সার মধ্যে একটি অতিরিক্ত পদক্ষেপ (এটি কাপ থেকে বের করে) যোগ করছেন।
সংস্করণ 2: বিশ্ব কাপে এক কাপ
আপনি যদি মডিউল ব্যবহার না করে থাকেন তবে আপনি এই জাতীয় কোড লিখতে পারেন ( export
ঘোষণার অভাবটি নোট করুন ):
global1.ts
namespace A {
export class Twix { ... }
}
global2.ts
namespace A {
export class PeanutButterCup { ... }
}
global3.ts
namespace A {
export class KitKat { ... }
}
এই কোডটি A
বিশ্বব্যাপী সুযোগে মার্জড নেমস্পেস তৈরি করে :
এই সেটআপটি কার্যকর, তবে মডিউলগুলির ক্ষেত্রে প্রয়োগ হয় না (কারণ মডিউলগুলি বিশ্বব্যাপী সুযোগকে দূষিত করে না)।
সংস্করণ 3: কাপলেস যাচ্ছে
মূল উদাহরণ ফিরে যাওয়া, কাপ A
, A
এবং A
যদি আপনার কোন অবদানকে করছেন না। পরিবর্তে, আপনি কোডটি লিখতে পারেন:
Mod1.ts
export class Twix { ... }
Mod2.ts
export class PeanutButterCup { ... }
Mod3.ts
export class KitKat { ... }
এমন দেখতে একটি ছবি তৈরি করতে:
অনেক ভাল!
এখন, আপনি যদি এখনও আপনার মডিউলগুলির সাথে नेम স্পেসটি কতটা ব্যবহার করতে চান তা নিয়ে ভাবছেন, পড়ুন ...
আপনি যে সন্ধান করছেন সেগুলি এই নয়
নাম স্থানগুলি প্রথম স্থানে কেন বিদ্যমান তা আমাদের উত্সে ফিরে যেতে হবে এবং পরীক্ষা করা উচিত যে কারণগুলি বাইরের মডিউলগুলির জন্য অর্থবোধ করে।
সংগঠন : নেমস্পেসগুলি যুক্তিযুক্ত-সম্পর্কিত বস্তু এবং ধরণের একসাথে গ্রুপিংয়ের জন্য কার্যকর। উদাহরণস্বরূপ, সি # তে আপনি সমস্ত সংগ্রহের প্রকারের সন্ধান করতে যাচ্ছেন System.Collections
। শ্রেণিবদ্ধ নেমস্পেসে আমাদের প্রকারগুলি সংগঠিত করে, আমরা এই ধরণের ব্যবহারকারীদের জন্য একটি ভাল "আবিষ্কার" অভিজ্ঞতা সরবরাহ করি।
নামের দ্বন্দ্ব : নাম সংঘর্ষগুলি এড়ানোর জন্য নেমস্পেসগুলি গুরুত্বপূর্ণ। উদাহরণস্বরূপ, আপনার My.Application.Customer.AddForm
এবং My.Application.Order.AddForm
একই নাম সহ দুটি ধরণের থাকতে পারে , তবে একটি পৃথক নেমস্পেস। এমন একটি ভাষায় যেখানে সমস্ত শনাক্তকারক একই মূল স্কোপে উপস্থিত থাকে এবং সমস্ত সভাগুলি সমস্ত প্রকারের বোঝা চাপায়, সমস্ত কিছু একটি স্থানের মধ্যে থাকা সমালোচনা।
এই কারণগুলি কি বাহ্যিক মডিউলগুলিতে অর্থবোধ করে?
সংস্থা : বাহ্যিক মডিউলগুলি ইতিমধ্যে একটি ফাইল সিস্টেমে উপস্থিত রয়েছে। আমাদের সেগুলি পথ এবং ফাইলের নাম দিয়ে সমাধান করতে হবে, সুতরাং আমাদের ব্যবহারের জন্য একটি যৌক্তিক সংস্থা পরিকল্পনা রয়েছে। আমরা এটিতে /collections/generic/
একটি list
মডিউল সহ একটি ফোল্ডার রাখতে পারি।
নাম দ্বন্দ্ব : এটি বাহ্যিক মডিউলগুলিতে মোটেই প্রযোজ্য নয়। মধ্যে একটি মডিউল দেখবেন, সেখানে একই নামের দুটি বস্তুর আছে কোন বিশ্বাসযোগ্য কারণ আছে। ব্যবহারের দিক থেকে, প্রদত্ত যে কোনও মডিউলটির গ্রাহক নামটি চয়ন করতে পারেন যা তারা মডিউলটি উল্লেখ করতে ব্যবহার করবেন, তাই দুর্ঘটনাজনিত নামকরণের বিরোধগুলি অসম্ভব।
এমনকি যদি আপনি বিশ্বাস না করেন যে মডিউলগুলি কীভাবে কার্যকর হয় সেগুলি দ্বারা এই কারণগুলি যথাযথভাবে সমাধান করা হয়েছে, বাহ্যিক মডিউলগুলিতে নেমস্পেসগুলি ব্যবহার করার চেষ্টা করার "সমাধান" এমনকি কার্যকর হয় না।
বক্সগুলিতে বক্সগুলিতে বক্সগুলি
একটি গল্প:
আপনার বন্ধু বব আপনাকে কল করেছে। "আমার বাড়িতে একটি নতুন নতুন সংস্থার স্কিম রয়েছে", তিনি বলেন, "আসুন এটি পরীক্ষা করে দেখুন!"! ঝরঝরে, আসুন দেখি বব কী নিয়ে এসেছেন।
আপনি রান্নাঘর থেকে শুরু এবং প্যান্ট্রি খুলুন। এখানে 60 টি আলাদা বাক্স রয়েছে, যার প্রত্যেকটিতে "প্যান্ট্রি" লেবেল রয়েছে। আপনি এলোমেলোভাবে একটি বাক্স বাছুন এবং এটি খুলুন। ভিতরে "গ্রানস" লেবেলযুক্ত একটি একক বাক্স রয়েছে। আপনি "দানা" বাক্সটি খুলুন এবং "পাস্তা" লেবেলযুক্ত একটি একক বাক্স পাবেন। আপনি "পাস্তা" বক্সটি খুলুন এবং "Penne" লেবেলযুক্ত একটি একক বাক্স খুঁজে পাবেন। আপনি এই বাক্সটি খুলুন এবং আপনি যেমন প্রত্যাশা করছেন, পেন পাস্তা একটি ব্যাগ খুঁজে পাবেন।
কিছুটা বিভ্রান্ত হয়ে আপনি একটি সংলগ্ন বক্স বাছাই করুন, "পেন্ট্রি" লেবেলযুক্ত। ভিতরে একটি একক বাক্স, আবার "শস্য" লেবেলযুক্ত। আপনি "দানা" বাক্সটি খুলুন এবং আবার "পাস্তা" লেবেলযুক্ত একটি একক বাক্স খুঁজে পান। আপনি "পাস্তা" বাক্সটি খুলুন এবং একটি একক বাক্স খুঁজে পান, এটির একটিটিকে "রিগাটোনি" লেবেলযুক্ত। আপনি এই বাক্সটি খুলুন এবং সন্ধান করুন ... রিগাতনি পাস্তা একটি ব্যাগ।
"দারুণ!" বব বলেছেন। "সবকিছুই একটি নামস্থানে!"।
"তবে বব ..." আপনি উত্তর দিন। "আপনার সংস্থার স্কিমটি অকেজো anything কিছু পেতে আপনাকে একটি গুচ্ছ বাক্স খুলতে হবে এবং আপনি কেবল তিনটির পরিবর্তে একটি বাক্সে সবকিছু রেখে দিলে কিছুই খুঁজে পাওয়া আরও সহজতর কিছু নয় fact বাস্তবে, যেহেতু আপনার প্যান্ট্রি ইতিমধ্যে শেল্ফ-বাই-শেল্ফ সাজানো হয়েছে, আপনার বাক্সগুলির একেবারেই দরকার নেই। কেন কেবল তাককে পাস্তা সেট করবেন না এবং যখন আপনার প্রয়োজন হবে তখন এটি বাছাই করবেন না কেন? "
"আপনি বুঝতে পারছেন না - আমার এটি নিশ্চিত করা দরকার যে 'প্যান্ট্রি' নামস্থানের অন্তর্ভুক্ত নয় এমন অন্য কোনও জিনিস যাতে কেউ রাখে না And এবং আমি আমার সমস্ত পাস্তা নিরাপদে নেমস্পেসে সংগঠিত করেছি Pantry.Grains.Pasta
যাতে আমি সহজেই এটি খুঁজে পেতে পারি" "
বব খুব বিভ্রান্ত মানুষ।
মডিউলগুলি তাদের নিজস্ব বাক্স
বাস্তব জীবনে আপনার অনুরূপ কিছু ঘটেছে সম্ভবত: আপনি অ্যামাজনে কয়েকটি জিনিস অর্ডার করেন এবং প্রতিটি আইটেমটি তার নিজস্ব বাক্সে প্রদর্শিত হয় যার ভিতরে একটি ছোট বাক্স থাকে এবং আপনার আইটেমটি তার নিজস্ব প্যাকেজিংয়ে আবৃত থাকে। এমনকি অভ্যন্তর বাক্সগুলি সমান হলেও শিপমেন্টগুলি দরকারীভাবে "সংযুক্ত" হয় না।
বাক্সের সাদৃশ্যটি নিয়ে গিয়ে মূল পর্যবেক্ষণটি হ'ল বাহ্যিক মডিউলগুলি তাদের নিজস্ব বাক্স । এটি প্রচুর কার্যকারিতা সহ খুব জটিল আইটেম হতে পারে তবে প্রদত্ত যে কোনও বাহ্যিক মডিউলটি তার নিজস্ব বাক্স।
বাহ্যিক মডিউলগুলির জন্য গাইডেন্স
এখন আমরা বুঝতে পেরেছি যে আমাদের 'নেমস্পেস' ব্যবহার করার দরকার নেই, আমাদের মডিউলগুলি কীভাবে সাজানো উচিত? কিছু গাইডিং নীতি এবং উদাহরণ অনুসরণ করে।
যতটা সম্ভব শীর্ষ-স্তরের কাছাকাছি রফতানি করুন
- আপনি যদি কেবল একটি একক শ্রেণি বা ফাংশন রফতানি করেন তবে ব্যবহার করুন
export default
:
MyClass.ts
export default class SomeType {
constructor() { ... }
}
MyFunc.ts
function getThing() { return 'thing'; }
export default getThing;
খরচ
import t from './MyClass';
import f from './MyFunc';
var x = new t();
console.log(f());
এটি ভোক্তাদের জন্য সর্বোত্তম। তারা আপনার টাইপটিকে তারা যা t
খুশি নাম দিতে পারে ( এই ক্ষেত্রে) এবং আপনার অবজেক্টগুলি সন্ধানের জন্য কোনও বহিরাগত বিন্দু করতে হবে না।
- আপনি যদি একাধিক বস্তু রফতানি করেন তবে এগুলি সমস্ত শীর্ষ স্তরে রাখুন:
MyThings.ts
export class SomeType { ... }
export function someFunc() { ... }
খরচ
import * as m from './MyThings';
var x = new m.SomeType();
var y = m.someFunc();
- আপনি যদি বিপুল সংখ্যক জিনিস রফতানি করেন তবে কেবল আপনার
module
/ namespace
কীওয়ার্ডটি ব্যবহার করা উচিত :
MyLargeModule.ts
export namespace Animals {
export class Dog { ... }
export class Cat { ... }
}
export namespace Plants {
export class Tree { ... }
}
খরচ
import { Animals, Plants} from './MyLargeModule';
var x = new Animals.Dog();
লাল পতাকাগুলো
নীচের সমস্তগুলি মডিউল কাঠামোর জন্য লাল পতাকা। ডাবল-চেক করুন যে আপনি যদি আপনার বাহ্যিক মডিউলগুলির নামের স্থানটি চেষ্টা করতে চাইছেন না তবে এর মধ্যে যদি আপনার ফাইলগুলিতে কোনও প্রয়োগ হয়:
- এমন একটি ফাইল যার একমাত্র শীর্ষ-স্তরের ঘোষণা
export module Foo { ... }
( Foo
সমস্ত কিছুকে একটি স্তরকে সরান এবং সরান)
- একটি ফাইল যা একটি একক
export class
বা export function
এটি নাexport default
- একাধিক ফাইলের
export module Foo {
শীর্ষ স্তরে একই রয়েছে (এমনটি ভাববেন না যে এগুলি একের সাথে সংযুক্ত হতে চলেছে Foo
!)