আমার পুতুলের প্যারামিটারাইজড ক্লাসটি কেন ব্যবহার করা উচিত?


12

সাধারণত জটিল পুতুল মডিউলগুলির সাথে কাজ করার সময়, আমি নোড স্তরে বা কোনও শ্রেণীর ভিতরে ভেরিয়েবলগুলি সেট করব। যেমন,

node 'foo.com' {
  $file_owner = "larry" 
  include bar 
}

class bar { 
  $file_name = "larry.txt"
  include do_stuff
}

class do_stuff {
  file { $file_name:
    ensure => file,
    owner  => $file_owner,
  }
}

এই পরিস্থিতিতে যখন প্যারামেট্রাইজড ক্লাসগুলি কীভাবে / কখন / কেন সহায়তা করে? আপনার পুতুল মডিউলগুলি গঠনের জন্য আপনি কীভাবে প্যারামিটারাইজড ক্লাস ব্যবহার করছেন?


2
এই উদাহরণটি খুঁজে পাওয়া সকলকে নোট করুন, এই কোডটি গ্লোবাল ভেরিয়েবল লুকআপগুলি দেখায় যা পুতুল সংস্করণ <3.0 এ অনুমোদিত ছিল। পুতুল> 3.0 এ, আপনি সুযোগের বাইরে ভেরিয়েবল অ্যাক্সেস করতে পারবেন না এবং ভেরিয়েবলগুলি অ্যাক্সেস করতে অবশ্যই নেমস্পেস ব্যবহার করতে হবে। এই উদাহরণে, আপনাকে সেই সম্পর্কিত ভেরিয়েবলগুলি ব্যবহার করতে $bar::file_nameএবং $::file_ownerঅ্যাক্সেস করতে হবে । যাইহোক, প্যারামেট্রাইজড ক্লাসগুলি ব্যবহার করার সময়, প্যারামিটারগুলির মাধ্যমে কোনও শ্রেণিতে পাস হওয়া ভেরিয়েবলগুলি স্থানীয়ভাবে স্কোপযুক্ত ভেরিয়েবল হয়ে যায়।
রববাইট

উত্তর:


12

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

কল্পনা করুন যে আপনি আপনার নোডের বর্ণনায় আরও 20 টি ক্লাস অন্তর্ভুক্ত করেছেন এবং সমস্তকে ম্যানিফেস্টের গ্লোবাল বা নোড স্কোপে সেট করার জন্য কিছু ভেরিয়েবলের প্রয়োজন হবে। এছাড়াও প্যারামিটারাইজড ক্লাসগুলি আপনাকে সহজেই ডিফল্ট প্যারামিটারগুলি রাখতে দেয়, যাতে আপনি বিভিন্ন স্থানে $file_ownerএকই মান (উদাহরণস্বরূপ larry) সরবরাহ না করে ডিফল্ট মানটি ব্যবহার করতে পারেন ।

আপনার উদাহরণ স্নিপেট (দুটি অতিরিক্ত নোড সহ) নীচে লেখা যেতে পারে:

node 'example.com' { 
  class { bar: }
}

node 'example.net' {
  class { bar: owner = "harry" }
}

node 'example.net' {
  class { bar: file_name = "barry.txt" }
}

class bar($owner = "larry", $file_name = "larry.txt") { 
  class { do_stuff: owner => $owner, file_name => $file_name }
}

class do_stuff($owner, $file_name) {
  file { $file_name:
    ensure => file,
    owner  => $owner,
  }
}

আপনার গ্লোবাল ভেরিয়েবলগুলির ব্যবহারের সাথে সাথে আপনাকে $ownerপ্রতিটি নোডে নামের একটি ভেরিয়েবল ঘোষণা করতে হবে এবং আপনি $file_nameপ্রতি নোডে ভেরিয়েবল / প্যারামিটারটি ওভাররাইট করতে সক্ষম হবেন না । পরিবর্তে আপনাকে barপ্রতিটি নোডের জন্য অন্য একটি ক্লাস ঘোষণা করতে হবে ।

পাপেটের ভাষার বিবর্তন এবং অবশ্যই ভাষা নির্দেশিকা নথিতে প্যারামিটারাইজড ক্লাসগুলি কীভাবে ব্যবহার করতে হয় এবং এই ভাষা গঠনের পিছনে যৌক্তিকতা সম্পর্কে কিছু ভাল উদাহরণ সরবরাহ করা হয়:


8

এ সম্পর্কে চিন্তাভাবনার সর্বোত্তম উপায় হ'ল ইতিমধ্যে পুতুলের প্রতিমাগুলি জেনে শুরু করার পরিবর্তে শুরু থেকেই এটি আসা।

আপনি প্রথম স্থানে যা করার চেষ্টা করছেন তা হ'ল একটি ক্লাসে প্যারামিটারগুলি পাস করা - আপনি কোনও ফাংশনে যুক্তি দেওয়ার মতো আচরণ করার সিদ্ধান্ত নেওয়ার জন্য এটির প্রয়োজনীয় তথ্য দিচ্ছেন। বলুন এটি পারল ছিল এবং আপনার গুণক নামে একটি ফাংশন ছিল। আপনি এটিকে পছন্দ করবেন multiply_squares(3, 4), কিছু বৈশ্বিক ভেরিয়েবল 3 এবং 4 এ সেট না করে ফাংশনটির ভিতরে থেকে সেগুলি পড়ুন!

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

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