5 বছর বয়সী নির্ভরতা ইনজেকশনটি কীভাবে ব্যাখ্যা করবেন? [বন্ধ]


208

ব্যাখ্যা করার একটি ভালো উপায় কি নির্ভরতা ইনজেকশন ?

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


72
এই বাচ্চাটি কঠিন জীবন যাপন করার মতো শোনায় ...
ire_and_curses

24
"একবার একবার ....." দিয়ে শুরু করুন
মার্টিন

1
আমরা কি জাভা শিক্ষানবিশ বা আক্ষরিক পাঁচ বছরের পুরানো সম্পর্কে কথা বলছি?
ড্র করুন

2
# নির্ভরতা ইনজেকশন # ডোন 'শিক্ষার্থীর বয়সের উপর নির্ভর করে, এটি প্রত্যেকের জন্য সমান
রাকেশ জুয়াল

2
রাকেশ: জাভাও ২০০৯ এর পরিচিতি ভিডিওটি এই ভিত্তিতে তৈরি করা হয়েছে যে 13 বছর এমনকি জাভা বিকাশকারী হতে পারে কারণ জাভা "সর্বত্র" এবং "সহজ"।
এসকো

উত্তর:


789

আমি আপনাকে পাঁচ বছরের বাচ্চাদের নির্ভরতা ইনজেকশন দেব।

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

আপনার যা করা উচিত তা হ'ল একটি প্রয়োজন উল্লেখ করে, "আমার কাছে দুপুরের খাবারের সাথে কিছু পান করার দরকার আছে" এবং তারপরে আমরা খেতে বসলে আপনার কাছে কিছু আছে তা নিশ্চিত করব।


93

এই সম্পর্কে কি?

আপনার যদি কোনও ক্লাস থাকে Employeeএবং এই কর্মচারীর একটি থাকে তবে Address আপনি Employeeক্লাসটি নিম্নলিখিতভাবে সংজ্ঞায়িত করতে পারেন :

class Employee {
    private Address address;

    // constructor 
    public Employee( Address newAddress ) {
        this.address = newAddress;
    }

    public Address getAddress() {
    return this.address;
    }
    public void setAddress( Address newAddress ) {
        this.address = newAddress;
    }
}

এখন পর্যন্ত সবকিছু ঠিক দেখাচ্ছে।

এই কোডটি কর্মচারী এবং তার ঠিকানার মধ্যে একটি HAS-A সম্পর্ক দেখায় , এটি দুর্দান্ত।

এখন, এই HAS-A সম্পর্ক তাদের মধ্যে নির্ভরতা তৈরি করেছে। সমস্যা কনস্ট্রাক্টরের মধ্যে আসে।

প্রতিবার আপনি যখন কোনও Employeeউদাহরণ তৈরি করতে চান আপনার একটি উদাহরণ প্রয়োজন Address:

 Address someAddress = ....
 Employee oscar = new Employee( someAddress ); 

এইভাবে কাজ করা সমস্যাযুক্ত হয়ে ওঠে বিশেষত যখন আপনি ইউনিট পরীক্ষা করতে চান।

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

এটি এড়াতে আপনি এইরকম নির্মাতা পরিবর্তন করতে পারেন:

  public Employee(){
  }

কোনও আরগস কনস্ট্রাক্টর ব্যবহার করে।

তারপরে আপনি যখনই চান ঠিকানাটি সেট করতে পারেন:

 Address someAddress = ....
 Employee oscar = new Employee();
 oscar.setAddress( someAddress ); 

এখন, এটি আপনার কাছে বেশ কয়েকটি বৈশিষ্ট্যযুক্ত বা অবজেক্টগুলি তৈরি করা শক্ত যদি থাকে তবে এটি একটি টানা হতে পারে।

তবুও, এই সম্পর্কে চিন্তা করুন, আসুন বলে নেওয়া যাক আপনি Departmentগুণটি যুক্ত করুন:

  class Employee {
      private Address address;
      private Department department;

  ....

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

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

একটি কল্পিত নির্ভরতা ইনজেক্টর জন্য একটি সম্পত্তি ফাইল অনুমান করুন:

  #mock employee
  employee.address = MockAddress.class
  employee.department = MockDepartment.class

  #production setup 
  employee.address = RealAddress.class
  employee.department = RealDepartment.class

প্রদত্ত দৃশ্যের জন্য কী ইনজেকশন করতে হবে তা আপনি সংজ্ঞায়িত করবেন।

নির্ভরতা ইনজেক্টর ফ্রেমওয়ার্কটি যা করবে তা হ'ল আপনার জন্য সঠিক জিনিসগুলি সেট করা, যাতে আপনার কোড setAddressবা কোড করতে হবে না setDepartment। এটি হয় প্রতিবিম্ব দ্বারা বা কোড উত্পাদন বা অন্যান্য কৌশল দ্বারা সম্পন্ন হবে।

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

এটি সম্পর্কে অনেক বেশি।

তবুও আমি মনে করি না যে এই অনুরোধটি আপনার অনুরোধ অনুসারে 5 বছরের পুরানো জন্য উপযুক্ত।

আমি আশা করি আপনি এটি এখনও দরকারী।


3
বা: নির্ভরতা ইনজেকশনগুলি তখন যখন আপনার জন্য কিছু নির্ভরতা নির্ধারণ করে। এই কিছু সাধারণত একটি কাঠামো হয়। :)
অস্কাররাইজ

2
সত্যিই খুব স্মার্ট এক।
অস্কাররাইজ

24

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

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

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


10

আমি কোনো সরলীকৃত টিউটোরিয়াল জানি না, কিন্তু আমি আপনি দিতে পারেন একটি প্রায় 25 250-শব্দ-অর-কম সংস্করণ:

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

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


7

যখন আপনাকে একটি নতুন নিন্টেন্ডো দেওয়া হয়, আপনি গেমস খেলতে কেবল বোতাম এবং টাচ স্ক্রিন ব্যবহার করতে পারেন।

তবে নিন্টেন্ডো কারখানায় তাদের কীভাবে একসাথে রাখা যায় তা জানতে হবে।

কারখানার স্মার্ট লোকেরা যখন একটি নিন্টেন্ডো ডিএস আনবে তখন এটি ভিতরে আলাদা হবে তবে আপনি কীভাবে এটি ব্যবহার করবেন তা আপনি জানতে পারবেন।


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