ডিআই / আইওসি ব্যবহারের ফলে "নতুন" কীওয়ার্ডের সমস্ত উপস্থিতি সরিয়ে নেওয়া উচিত?


21

ডিপেন্ডেন্সি ইনজেকশন এবং নিয়ন্ত্রণের ধারকটির একটি বিপরীত ব্যবহার আপনার কোড থেকে কীওয়ার্ডের সমস্ত উপস্থিতি সরিয়ে ফেলতে হবেnew ?

অন্য কথায়, প্রতিটি বস্তু / নির্ভরতা, যতই সরল বা স্বল্পজীবী হোক না কেন, আপনার আইওসি ধারকটির মধ্যে "নিবন্ধিত" হওয়া উচিত এবং সেই পদ্ধতি / শ্রেণিতে ইঞ্জেকশন করা উচিত যা তাদের ব্যবহার করা উচিত?

যদি না হয়, আপনি কী কীওয়ার্ডের মাধ্যমে আইওসি পাত্রে কোন নির্ভরতা / অবজেক্টগুলি নিবন্ধভুক্ত করবেন তার মধ্যে রেখাটি কোথায় আঁকবেন new?


আমারও একই চিন্তা ছিল, "নতুন 'কি 4-অক্ষরের শব্দ?"
মাইকেল ইস্টার

উত্তর:


27

ডগমা এড়ান। যা ঠিক মনে হয় তা করুন।

আমি ডেটা স্ট্রাকচারের জন্য "নতুন" ব্যবহার করতে পছন্দ করি যার কোনও আচরণ নেই।

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


15
"ডগমা এড়ানো" এর জন্য +1। কী ঘটছে বা কোথায় এটি সঠিকভাবে ব্যবহার করা উচিত তা না বুঝে কেবল গতি অনুসরণ করার ফাঁদে পা রাখা সহজ উপায়।
ওয়েইন মোলিনা

@ অ্যালেক্স আমি এটি পছন্দ করি একটি খুব বাস্তববাদী পদ্ধতির। আনন্দের সাথে যথেষ্ট, আমি আমার প্রশ্নে কিছু কোড যুক্ত করতে যাচ্ছিলাম যা newআমার নিজের কোডে একটি 'এড নির্ভরতা দেখায় যা আমার প্রশ্নকে উত্সাহিত করেছিল। এটি একটি সাধারণ শ্রেণি ছিল যা কোনও কার্যকারিতা বা "আচরণ" প্রতি সেয়ে নয়, কেবল সাধারণ বৈশিষ্ট্য।
ক্রেগটিপি

11

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

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

কিছু লোক আসলে ডিআই কনটেইনারগুলির তুলনায় পুরি ম্যানের ডিআই পছন্দ করে। রক্ষণাবেক্ষণ ব্যয় বেশি হতে পারে তবে বিনিময়ে আপনি সংকলন-সময় সুরক্ষা পাবেন। যেমন আমি সম্প্রতি ড্যান উত্তর বলতে শুনেছি: " newনতুন new"

এর দ্বারা যা বোঝানো হয়েছে তা ডিআই কনটেইনার দিয়ে কম্পোজিশন রুটটি প্রয়োগ করার পরিবর্তে কেবল নেস্টেড newস্টেটমেন্টের পুরো গোছা থাকতে চাই contain


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

3
নির্ভরতা-ইনজেকশন ট্যাগটিতে স্ট্যাক ওভারফ্লোতে 2000+ টি প্রশ্ন রয়েছে এবং তাদের মধ্যে অনেকগুলিই এর মতো। প্রোগ্রামারদের একই ট্যাগে 23 টি প্রশ্ন রয়েছে। এই সংখ্যাগুলির উপর ভিত্তি করে, কোনও বিকাশকারীকে এই জাতীয় প্রশ্নের উত্তর পাওয়ার সবচেয়ে বড় সুযোগ কোথায় পাওয়া উচিত?
মার্ক সিম্যান

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

3

"নতুন" কোনও নিষিদ্ধ কীওয়ার্ড নয়। আমার ব্যক্তিগত নিয়ম:

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

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


2

আমি কেবল বিদ্যমান উত্তরগুলিতে যুক্ত করতে চাই যা কানের প্রতিপালক হিসাবে উত্থাপিত হয়েছিল, newখাঁটি মান অবজেক্ট ( যেগুলির কেবলমাত্র সম্পত্তি / গেটার / সেটটার রয়েছে) তৈরি করতে সঠিকভাবে জরিমানা। আরও বিশদের জন্য গুগল টেস্টিং ব্লগ দেখুন।


লিঙ্কের জন্য +1। ব্লগ পোস্টের 9 new
নং

1

আপনি যে ভাষাটি ব্যবহার করেন তার উপর স্পষ্টভাবে নির্ভর করে। যদি আপনার ভাষা আপনাকে প্রকৃত বস্তু এবং রেকর্ড উভয় (মান অবজেক্ট, স্ট্রাক্ট) উপস্থাপন করতে অবজেক্টগুলি ব্যবহার করতে বাধ্য করে, তবে উত্তরটি সম্ভবত হ্যাঁ।

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

সংক্ষিপ্তসার হিসাবে: কেবলমাত্র এই জাতীয় ক্লাসগুলিতে সরাসরি অবজেক্টগুলি ইনস্ট্যান্ট করা উচিত, কোন শ্রেণীটি ইনস্ট্যান্ট করতে হবে তা বেছে নেওয়ার দায়িত্ব কার who
আপনি এই মানদণ্ডগুলি সহায়ক মনে করতে পারেন: http://en.wikedia.org/wiki/GRASP_(object-oriented_design)# ক্রিয়েটর


1

একটি শব্দ: না

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

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

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

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