উত্তরাধিকার এবং রচনার বিপরীতে বৈশিষ্ট্যগুলি কখন ব্যবহার করবেন?


9

ওওপি'র ক্ষেত্রে পুনরায় ব্যবহারযোগ্যতা বাস্তবায়নের জন্য আফিকের তিনটি সাধারণ উপায় রয়েছে

  1. উত্তরাধিকার: সাধারণত প্রতিনিধিত্ব করতে হয় - একটি সম্পর্ক (হাঁস একটি পাখি)
  2. রচনা: সাধারণত একটি সম্পর্কের প্রতিনিধিত্ব করতে হয় (একটি গাড়ী একটি ইঞ্জিন রয়েছে)
  3. বৈশিষ্ট্য (যেমন পিএইচপি-তে বৈশিষ্ট্য কীওয়ার্ড): ... এটি সম্পর্কে সত্যই নিশ্চিত নয়

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


আপনি বৈশিষ্ট্য সম্পর্কে আরও কিছুটা ব্যাখ্যা করতে পারেন, তবে বৈশিষ্ট্যগুলি কেবল রচনাগুলির জন্য অন্য শব্দ হতে পারে?
ট্রিলিওন


1
আমি সত্যিই কেন জানতে চাই। সেগুলি একবার ব্যবহার করেন নি।
অ্যান্ডি

উত্তর:


6

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

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

class TestMyClass
  extends WordSpecLike
  with Matchers
  with MyCustomTrait
  with BeforeAndAfterAll
  with BeforeAndAfterEach
  with ScalaFutures

ইউনিট পরীক্ষা অবকাঠামো একটি আছে টন বিভিন্ন কনফিগারেশন অপশনের, এবং প্রত্যেক দল সম্পর্কে কিভাবে তারা কিছু কাজ করতে চান বিভিন্ন পছন্দগুলি হয়েছে। বিকল্পগুলিকে বৈশিষ্ট্যগুলিতে (যা withস্কালায় ব্যবহারের সাথে মিশ্রিত করা হয় ) রেখে, স্কাল্যাস্টেস্ট এই জাতীয় বিকল্পগুলির মতো ক্লাসের নামগুলি তৈরি না করে WordSpecLikeWithMatchersAndFutures, বা একট টন রানটাইম বুলিয়ান পতাকা পছন্দ না করেই এই সমস্ত বিকল্প সরবরাহ করতে পারে WordSpecLike(enableFutures, enableMatchers, ...)। এটি ওপেন / বদ্ধ নীতি অনুসরণ করা সহজ করে তোলে । আপনি কেবল নতুন বৈশিষ্ট্য যুক্ত করে নতুন বৈশিষ্ট্য এবং বৈশিষ্ট্যের নতুন সংমিশ্রণ যুক্ত করতে পারেন। এটি ইন্টারফেস বিভাজন নীতি অনুসরণ করাও সহজ করে তোলে কারণ আপনি সর্বজনীনভাবে প্রয়োজনীয় বৈশিষ্ট্যগুলি কোনও বৈশিষ্ট্যে সহজেই স্থাপন করতে পারেন।

বৈশিষ্ট্যগুলিও বেশ কয়েকটি ক্লাসে সাধারণ কোড রাখার একটি ভাল উপায় যা উত্তরাধিকারের শ্রেণিবদ্ধতা ভাগ করে নেওয়া বোঝায় না। উত্তরাধিকার হ'ল একটি অত্যন্ত দৃ -়-যুগল সম্পর্ক, এবং যদি আপনি এটির সহায়তা করতে পারেন তবে আপনাকে সেই মূল্য দিতে হবে না। বৈশিষ্ট্য অনেক বেশি looseিলে .ালা-দম্পতির সম্পর্ক। উপরের আমার উদাহরণে, আমি MyCustomTraitবেশ কয়েকটি অন্যান্য সম্পর্কিত সম্পর্কযুক্ত পরীক্ষা ক্লাসের মধ্যে একটি মক ডাটাবেস বাস্তবায়ন সহজেই ভাগ করে নিই ।

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

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


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

চমত্কার পর্যবেক্ষণ। আমার সম্পাদনা দেখুন।
কার্ল বিলেফেল্ট

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

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