আপনি প্রায়শই অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং, স্টাইলের নিয়ম এবং অন্য সব কিছুর সাথে একই সমস্যাটি পান। এটি খুব সম্ভব - খুব সাধারণ, আসলে - অত্যধিক বিমূর্ততা করা এবং খুব বেশি দিকনির্দেশনা যুক্ত করা এবং সাধারণত ভাল কৌশলগুলি অতিরিক্ত এবং ভুল জায়গায় প্রয়োগ করা apply
আপনার প্রয়োগ করা প্রতিটি প্যাটার্ন বা অন্যান্য নির্মাণ জটিলতা নিয়ে আসে। বিমূর্ততা এবং দিকনির্দেশের ছড়িয়ে পড়া তথ্য চারপাশে, কখনও কখনও অপ্রাসঙ্গিক বিশদটি পথ থেকে দূরে সরিয়ে দেয়, তবে সমানভাবে কখনও কখনও ঠিক কী ঘটছে তা বোঝা আরও শক্ত করে তোলে। আপনার প্রয়োগ করা প্রতিটি বিধি অবিচ্ছিন্নতা এনেছে, কেবলমাত্র সর্বোত্তম পদ্ধতির হতে পারে এমন বিকল্পগুলি বাতিল করে।
মূল কথাটি কোডটি লিখতে হয় যা কাজটি করে এবং শক্ত, পাঠযোগ্য এবং রক্ষণাবেক্ষণযোগ্য। আপনি একটি সফ্টওয়্যার বিকাশকারী - আইভরি টাওয়ার নির্মাতা নন।
প্রাসঙ্গিক লিঙ্ক
http://thedailywtf.com/Articles/The_Inner-Platform_Effect.aspx
http://www.joelonsoftware.com/articles/fog0000000018.html
সম্ভবত নির্ভরতা ইনজেকশনটির সহজতম রূপ (হাসবেন না) একটি প্যারামিটার। নির্ভরশীল কোডটি ডেটা নির্ভর করে এবং সেই তথ্যটি প্যারামিটারটি পাস করার মাধ্যমে ইনজেক্ট করা হয়।
হ্যাঁ, এটি নির্বোধ এবং নির্ভরতা ইনজেকশনটির উদ্দেশ্য-ভিত্তিক বিষয়টিকে চিহ্নিত করে না, তবে একটি কার্যকরী প্রোগ্রামার আপনাকে বলবে যে (যদি আপনার প্রথম শ্রেণির ফাংশন থাকে) এটি আপনার প্রয়োজন একমাত্র ধরনের নির্ভরতা ইনজেকশন। এখানে কথাটি হল একটি তুচ্ছ উদাহরণ নেওয়া, এবং সম্ভাব্য সমস্যাগুলি দেখানো।
এই সাধারণ traditionalতিহ্যবাহী ফাংশনটি গ্রহণ করা যাক - সি ++ সিনট্যাক্স এখানে গুরুত্বপূর্ণ নয়, তবে আমি এটি কোনওভাবে বানান করতে চাই ...
void Say_Hello_World ()
{
std::cout << "Hello World" << std::endl;
}
আমার একটি নির্ভরতা আছে যা আমি বের করতে এবং ইনজেকশন করতে চাই - "হ্যালো ওয়ার্ল্ড" পাঠ্য। যথেষ্ট সহজ ...
void Say_Something (const char *p_text)
{
std::cout << p_text << std::endl;
}
আসলটির চেয়ে কী আরও জটিল? ঠিক আছে, আমি যদি সিদ্ধান্ত নিই যে আউটপুটটি ইউনিকোড হওয়া উচিত। আমি সম্ভবত std :: cout থেকে std :: wcout এ পরিবর্তন করতে চাই। তবে তার মানে আমার স্ট্রিংগুলি তখন wchar_t হতে হবে, চরের নয়। হয় প্রতিটি কলার পরিবর্তন করতে হবে, বা (আরও যুক্তিসঙ্গতভাবে), পুরানো বাস্তবায়ন একটি অ্যাডাপ্টারের সাথে প্রতিস্থাপন হয়ে যায় যা স্ট্রিংটিকে অনুবাদ করে এবং নতুন বাস্তবায়ন কল করে।
ঠিক এখনই এটি রক্ষণাবেক্ষণের কাজ যা আমরা যদি মূলটি রাখি তবে প্রয়োজন হবে না।
এবং যদি এটি তুচ্ছ মনে হয়, তবে উইন 32 এপিআই থেকে এই আসল-ওয়ার্ল্ড ফাংশনটি একবার দেখুন ...
http://msdn.microsoft.com/en-us/library/ms632680%28v=vs.85%29.aspx
এটি মোকাবেলায় 12 "নির্ভরতা"। উদাহরণস্বরূপ, যদি স্ক্রিন রেজোলিউশনগুলি সত্যিই বিশাল আকার ধারণ করে, তবে আমাদের প্রয়োজন হবে -৪-বিট সমন্বিত মান - এবং ক্রিয়েট উইন্ডোএক্সের অন্য সংস্করণ। এবং হ্যাঁ, ইতিমধ্যে একটি পুরানো সংস্করণ ইতিমধ্যে ঝুলছে, সম্ভবত পর্দার পিছনে নতুন সংস্করণে ম্যাপ করা হবে ...
http://msdn.microsoft.com/en-us/library/ms632679%28v=vs.85%29.aspx
এই "নির্ভরতা" কেবল মূল বিকাশকারীদের জন্যই সমস্যা নয় everyone যে ইন্টারফেসটি ব্যবহার করে তাদের প্রত্যেককে নির্ভরতাগুলি কী কী, কীভাবে নির্দিষ্ট করা হয় এবং কী বোঝায় এবং তাদের অ্যাপ্লিকেশনটির জন্য কী করা উচিত তা খুঁজে বের করতে হবে। এখানেই "বুদ্ধিমান ডিফল্ট" শব্দগুলি জীবনকে অনেক সহজ করে তুলতে পারে।
অবজেক্ট-ভিত্তিক নির্ভরতা ইনজেকশন নীতিগতভাবে আলাদা নয়। শ্রেণি লিখন একটি ওভারহেড, উভয় উত্স-কোড পাঠ্য এবং বিকাশকারী সময়ে, এবং যদি সেই শ্রেণিটি কিছু নির্ভরশীল অবজেক্টের নির্দিষ্টকরণ অনুসারে নির্ভরতা সরবরাহ করতে লেখা হয়, তবে নির্ভরশীল অবজেক্টটি সেই ইন্টারফেসটিকে সমর্থন করার জন্য লক হয়ে যায়, এমনকি যদি কোনও প্রয়োজনও থাকে যে বস্তুর বাস্তবায়ন প্রতিস্থাপন।
নির্ভরতা ইঞ্জেকশনটি খারাপ claim এটির থেকে দূরে দাবি করে এগুলির কোনওটিই পড়া উচিত নয়। তবে যে কোনও ভাল কৌশল অতিরিক্ত এবং ভুল জায়গায় প্রয়োগ করা যেতে পারে। প্রতিটি স্ট্রিংকে যেমন বের করে প্যারামিটারে পরিণত করার দরকার হয় না, তেমনি প্রতিটি নিম্ন স্তরের আচরণও উচ্চ-স্তরের অবজেক্টগুলি থেকে বের করে ইনজেক্টেবল নির্ভরতাতে পরিণত করা দরকার না।