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