তৃতীয় পক্ষের কোড হিসাবে বিবেচনা করা হয়?


15

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

পিএইচপি থেকে উদাহরণ:
আমি যদি জেন্ড ফ্রেমওয়ার্ক ব্যবহার করে একটি অ্যাপ্লিকেশন তৈরি করছি , তবে আমার কি জেন্ড ফ্রেমওয়ার্ক লাইব্রেরিগুলিকে তৃতীয় পক্ষের কোড হিসাবে বিবেচনা করা উচিত?

সি # থেকে উদাহরণ:
আমি যদি একটি ডেস্কটপ অ্যাপ্লিকেশন তৈরি করি তবে আমার কি সমস্ত। নেট ক্লাসগুলিকে তৃতীয় পক্ষের কোড হিসাবে বিবেচনা করা উচিত?

জাভা থেকে উদাহরণ:
আমি কি জেডিকে সমস্ত লাইব্রেরি তৃতীয় পক্ষের লাইব্রেরি হিসাবে বিবেচনা করব?

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


8
নিচে ভোটার কেন দয়া করে ব্যাখ্যা করতে পারেন?
সানগো

আমি তৃতীয় পক্ষের সফ্টওয়্যার সম্পর্কে শুনেছি, তবে তৃতীয় পক্ষের কোড নয়। বেশিরভাগ তৃতীয় পক্ষগুলি তাদের উত্স কোড দেয় না।
তুলাইনস কর্ডোভা

উত্তর:


18

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

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

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


যখন একটি মোড়ক বা সম্মুখের মুখোমুখি, আপনি যদি করেন তবে এটি প্রয়োজনীয় হতে পারে expla
জোশুয়া ড্রাক

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

@ সাঙ্গো: আপনার পরীক্ষার কৌশলটি এমন একটি Zend_Mailমক তৈরি করা উচিত যা আপনি পরীক্ষায় আপনার Loggerঅবজেক্টে পাস করেন । পিএইচপি কি হাঁসের টাইপিং সমর্থন করে না? যদি তাই হয়, এটি একটি মক অবজেক্ট তৈরি করা তুচ্ছ হওয়া উচিত নয় ...? আমি সত্যিই পিএইচপি জানি না, তবে আপনি পিএইচপি উপহাস লাইব্রেরি থেকে উদাহরণ দেখতে পারেন যে এটি সাধারণত কীভাবে হয়। যে ভাষাগুলিতে হাঁসের টাইপিং সমর্থন করে না, তারপরে আমি মনে করি আপনাকে Zend_Mailএকটি ইন্টারফেসে পরিবর্তন করতে হবে এবং তারপরে একটি পাতলা মোড়ক তৈরি করুন যা ইন্টারফেসটি প্রয়োগ করে এবং এর Zend_Mailসমস্ত কল থেকে উত্তরাধিকার সূত্রে প্রাপ্ত হয় ।
এম ডুডলি

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

@ সাঙ্গো: আমি মনে করি এটি খুব ভাষা- এবং গ্রন্থাগার-নির্দিষ্ট, এবং আপনার প্ল্যাটফর্মটি যা সমর্থন করে তা আপনাকে করতে হবে। কখনও কখনও আপনি র‌্যাপার লেখার সাথে আটকে থাকতে পারেন। নির্ভরতা ইনজেকশন এবং অবজেক্টের উপহাসগুলি মোটামুটি সাম্প্রতিক বিকাশ (2004?), সুতরাং সমস্ত ভাষা এবং গ্রন্থাগারগুলি এগুলি খুব ভাল সমর্থন করে না। আপনি যে "সাধারণ সমাধান" সন্ধান করছেন এটি কেবল একটি মানসিকতা: আপনি কীভাবে আলগা সংযোগ এবং কার্যকর ইউনিট পরীক্ষার জন্য আপনার কোডটি স্থপতি করতে পারেন?
এম ডুডলি

6

একটি লাইব্রেরি মোড়ানোর লক্ষ্যটি সক্ষম করার জন্য সেই লাইব্রেরিতে আপনার নিজের কোডের নির্ভরতা ভঙ্গ করা:

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

তৃতীয় পক্ষের লাইব্রেরি এবং ফ্রেমওয়ার্কগুলি বিচ্ছিন্ন করা বিচ্ছিন্ন পরিবর্তনের একটি উপসেট মাত্র।


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

2

আমি স্ট্যান্ডার্ড লাইব্রেরির সদস্যদের 3 য় পক্ষের কোড হিসাবে বিবেচনা করব না - এগুলি সর্বোপরি মানসম্পন্ন এবং আপনি যে প্ল্যাটফর্মটি ব্যবহার করছেন সেটি উপলভ্য ও কার্যকরী বলে ধরে নেওয়া যায়।

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


2

আমি নির্দিষ্ট প্রোগ্রামিং ভাষার সরবরাহিত লাইব্রেরিগুলিকে ভাষার অংশ হিসাবে বিবেচনা করব।

এর চেয়ে আমি তৃতীয় পক্ষকে বিবেচনা করব, অন্য যে কোনও সত্তার দ্বারা সরবরাহ করা সমস্ত লাইব্রেরি প্রোগ্রামিং ভাষা থেকেই একটি এক্সটেনশন বা আলাদা সরঞ্জাম হিসাবে বিবেচনা করবে।

আপনার উদাহরণ গ্রহণ করে, আমি জেন্ডকে একটি তৃতীয় পক্ষ হিসাবে বিবেচনা করব। আমি আমার অ্যাপ্লিকেশনটি এমনভাবে তৈরি করব যাতে আমার মূল ব্যবসায়ের যুক্তি জেন্ডের উপর নির্ভর না করে।

উইকিপিডিয়া তৃতীয় পক্ষের উপাদানটি এইভাবে সংজ্ঞায়িত করে :

কম্পিউটার প্রোগ্রামিংয়ে একটি তৃতীয় পক্ষের সফ্টওয়্যার উপাদান হ'ল পুনরায় ব্যবহারযোগ্য সফ্টওয়্যার উপাদান যা উন্নত প্ল্যাটফর্মের মূল বিক্রেতা ছাড়া অন্য কোনও সত্তাকে অবাধে বিতরণ বা বিক্রয় করা হয় sold


1

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

আরও দেখুন: /programming/148747/hat-is-the-differences-between-a-framework-and-a-library

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