একটি সাধারণ লাইব্রেরি কি একটি ভাল ধারণা?


16

আমি সবসময় ভেবেছিলাম "সাধারণ লাইব্রেরি" একটি ভাল ধারণা ছিল। এর অর্থ আমার কাছে এমন একটি গ্রন্থাগার যা সাধারণ কার্যকারিতা ধারণ করে যা প্রায়শই কয়েকটি পৃথক অ্যাপ্লিকেশন দ্বারা প্রয়োজন হয়। এটি কম কোড ডুপ্লিকেশন / অপ্রয়োজনীয় ফলাফল।

আমি সম্প্রতি একটি নিবন্ধ পড়েছি (এখন এটি খুঁজে পাচ্ছি না) যা বলেছিল এটি আসলে একটি খারাপ ধারণা এবং এটি "বিরোধী-নিদর্শন" বলে এতদূর গেছে

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

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

এটি লেখার সময়, আমি ভাবতে শুরু করি যে এই "সাধারণ lib" পদ্ধতির কারণে আর্কিটেকচারে স্কিমিংয়ের ফলাফল? আমার ডিজাইনের আরও চিন্তাভাবনা দরকার?

আগ্রহ শুনতে আগ্রহী hear


2
আমার 2 সেন্ট ... আপনাকে যদি সাধারণ এপিআইতে পরিবর্তন করতে হয় যদি কোনও সিস্টেমের যদি এটির পরিবর্তনের প্রয়োজন হয়, তবে সেই এপিআই বা লাইব্রেরি কোনও সাধারণ লাইব্রেরি নয়
রাজা আনবাজগান

1
আমি দেখতে পেয়েছি যে কোড নকলকরণ এবং কাপলিংয়ের মধ্যে একটি মৌলিক বাণিজ্য রয়েছে। আপনার প্রশ্ন এটির একটি প্রধান উদাহরণ। । ভারসাম্য আপনি দুই সম্ভবত পরিবেশ উপর নির্ভর করবে আপনার কোড পরিণামে মধ্যে চালানো হবে মধ্যে ধর্মঘট
জোএল Cornett

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

2
কেউ আপাচে কল করে এই উন্মাদনা ঠিক করে দিয়েছে। অ্যাপাচি কমন্স
লাইভ

উত্তর:


21

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

আমি এটি কার্যকরভাবে দেখেছিলাম যখন আমি যখন একটি সম্পূর্ণ ব্যবসায়িক ইউনিটের 64৪-বিট সিস্টেমের মূল কোডের (বেশিরভাগ ক্ষেত্রে আমার কাছে নতুন) এবং আমাদের বিল্ডিং এবং প্যাকেজিংয়ের জন্য একটি সম্পূর্ণ তদারকি করার জন্য দায়বদ্ধ হয়ে উঠি তখন অনেক কিছুই করা হচ্ছিল হাতে হাতে এবং কখনও কখনও খুব ভাল না * * আমরা অ্যাপ্লিকেশনগুলির একটি স্ট্যাকের বাইরে যা পাঠিয়েছিলাম তা তৈরি করার প্রবণতা ছিল, যেখানে ক্লায়েন্টটি বলত, "আমি এমন একটি সিস্টেম চাই যা এ, বি, ডি এবং এফ, প্লাস জিনিস এম করে দেয় এবং এন যে আপনি এখনও করেন না এবং এগুলি সমস্তকে একীভূত করতে কিছুটা আলাদা আঠালো। " এটির মধ্যে যা কিছু ছিল তা সাধারণভাবে ছিল জাঙ্ক-ড্রয়ার লাইব্রেরি যা কয়েক দশক ধরে ** লোকেরা যা ভাবেন সেগুলি পুনঃব্যবহারযোগ্য হওয়া উচিত of দীর্ঘ গল্প সংক্ষিপ্ত করতে লাইব্রেরির কোডটির একটি ভগ্নাংশ ছিল না '। আমরা প্রচুর মূল্যবান সময় নির্ধারণ এবং সেই নির্ভরতাগুলি বজায় রেখেছিলাম যাতে সাধারণ গ্রন্থাগারটি ইনস্টল হয়, না কারণ আমাদের আসলে তাদের প্রয়োজন ছিল।

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

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

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


* প্রক্রিয়াটিতে, আমি একটি বাইনারি উন্মোচন করেছি যা চারপাশে পাস হয়ে গেছে এবং ছয় বছরে স্ক্র্যাচ থেকে পুনরায় সংশোধন করা হয়নি।

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


1
আমার থাম্বের নিয়মটি হল, আপনি যদি নিজের লাইব্রেরির নাম "সাধারণ" বলে কিছু রাখার তাগিদ দেন তবে আপনি সমস্যার মুখোমুখি হচ্ছেন।
কার্ল বিলেফেল্ট

9

বিব্রতকরভাবে আমি বেশ কয়েক দশক আগে একটি দলের পরিবেশে "সাধারণ" গ্রন্থাগারটি চালু করি। আমি কয়েক মাসের মধ্যে খুব শিথিল-সমন্বিত দল গঠনে কী ঘটতে পারে তার ডায়নামিক্স আমি সত্যিই বুঝতে পারি নি।

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

এবং এটি যথেষ্ট ভাল শুরু হয়েছে। আমরা common/math*রুটিনগুলির একটি গণিত গ্রন্থাগার ( ) দিয়ে শুরু করি যা আমরা সকলেই প্রতিদিনের ভিত্তিতে ব্যবহার করি, যেহেতু আমরা কম্পিউটার গ্রাফিকগুলিতে কাজ করতাম যা প্রায়শই রৈখিক বীজগণিতকালে ভারী হত। এবং যেহেতু আমরা প্রায়শই সি কোডের সাথে ইন্টারপোপ করছিলাম, আমরা এর মতো কিছু দরকারী ইউটিলিটি ফাংশনে সম্মত হয়েছি find_index,std::findসি ++ তে, কোনও পুনরুক্তির পরিবর্তে একটি ক্রমের সন্ধান পাওয়া উপাদানগুলিতে একটি সূচক ফেরত পাঠাত যা আমাদের সি কার্যকারিতা কীভাবে অনুকরণ করেছিল - এই ধরণের জিনিসগুলি - কিছুটা সারগ্রাহী তবে সংক্ষিপ্তবাদী এবং সবার কাছে পরিচিত এবং ব্যবহারিক থাকার জন্য যথেষ্ট ব্যবহৃত , এবং তাত্ক্ষণিক পরিচিতি একটি অত্যন্ত গুরুত্বপূর্ণ মানদণ্ড হিসাবে যেহেতু আমি "সাধারণ" বা "স্ট্যান্ডার্ড" এমন কোনও কিছু করার চেষ্টা করতে দেখছি যেহেতু যদি এটি সত্যই "সাধারণ" হয় তবে এর প্রশস্ততার ফলস্বরূপ এটি সম্পর্কে সেই পরিচিত গুণটি থাকা উচিত গ্রহণ এবং প্রতিদিনের ব্যবহার

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

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

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

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

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

কোড অনুলিপি বছরের পর বছর ধরে আমার মধ্যে হামাগুড়ি দেওয়া হয়েছে তবে আমার মনে হচ্ছে এইবার চেষ্টা করা উচিত।

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

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

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

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


3

এখানে তিনটি বিভিন্ন বিভাগের ফাংশন রয়েছে যা আপনি গ্রন্থাগারে রাখার বিষয়টি বিবেচনা করতে পারেন:

  1. স্টাফ প্রত্যেকের জন্য পুনরায় ব্যবহারযোগ্য।
  2. আপনার প্রতিষ্ঠানের জন্য কেবল পুনরায় ব্যবহারের জন্য স্টাফ।
  3. স্টাফ পুনরায় ব্যবহার করার মতো নয়।

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

দ্বিতীয় বিভাগটি এমন জিনিস যা আপনার বারবার প্রয়োজন হয় তবে বিশ্বের আর কারওরও এটির প্রয়োজন হয় না। উদাহরণস্বরূপ, আপনার অভ্যন্তরীণ-বিকাশযুক্ত ব্যাকএন্ড সিস্টেমের সাথে যোগাযোগ করার জন্য অস্পষ্ট নেটওয়ার্ক প্রোটোকল বাস্তবায়ন। সেক্ষেত্রে নতুন অ্যাপ্লিকেশনগুলির বিকাশের গতি উন্নত করতে সেই জিনিসটি একটি আভ্যন্তরীণ গ্রন্থাগারে রেখে দেওয়ার অর্থ হবে make কেবল এটি নিশ্চিত করুন যে এটি বৈশিষ্ট্য ক্রাইপ দ্বারা খুব বেশি প্রভাবিত হয় না এবং এমন স্টাফ থাকে যা আসলে 1 বা 3 বিভাগে ফিট করে Additionally পৃথক কার্যকারিতার জন্য একাধিক পৃথক গ্রন্থাগার তৈরি করুন।

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


1

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

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


these libraries just replicate functionality from standard librariesএই সম্পূর্ণরূপে একটি খারাপ জিনিস নয়, জাভাস্ক্রিপ্ট আপনি লাইব্রেরি যোগ করেছি যে ইতিমধ্যে বিদ্যমান জিনিষ পুরাতন JS ইঞ্জিনের উপর সমর্থন যোগ করার জন্য বাস্তবায়ন, এছাড়াও আপনি আরো পুরোনো SDK এর ইত্যাদি .. Android এর জন্য সমর্থন লিব আছে
svarog

@ এসভারোগ: আপনি কি "পলিফিলস" সম্পর্কে ভাবছেন যা পুরানো ইঞ্জিনগুলির জন্য এটি নতুনভাবে সমর্থন করে না যা নতুনভাবে কার্যকারিতা অনুকরণ করে? আমি নিজে এগুলি লেখার কোনও কারণ দেখি না, কারণ এই উদ্দেশ্যে এখানে সুপরিচিত ওপেন-সোর্স লাইব্রেরি উপলব্ধ।
জ্যাকবিবি

0

বেশিরভাগ টিম জুড়ে ভাগ করা লাইব্রেরি তাদের সমাধানের চেয়ে আরও বেশি সমস্যা সৃষ্টি করে। "জাহান্নামের রাস্তাটি ভাল উদ্দেশ্য নিয়ে প্রস্তুত করা হয়েছে।"

ব্যতিক্রমগুলি নীচে থাকা বেশিরভাগ গ্রন্থাগারগুলি সন্তুষ্ট করে:

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

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

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