প্রশ্ন একটি মিথ্যা দ্বিধা উপস্থাপন। YAGNI নীতিটির যথাযথ প্রয়োগ কিছু সম্পর্কিত নয়। এটি ভাল ডিজাইনের একটি দিক । সলিড নীতিগুলির প্রতিটি হ'ল ভাল ডিজাইনের দিকগুলি। আপনি সর্বদা কোনও নিয়মতে প্রতিটি নীতি পুরোপুরি প্রয়োগ করতে পারবেন না। রিয়েল-ওয়ার্ল্ড সমস্যাগুলি আপনার কোডকে প্রচুর পরিমাণে শক্তি প্রয়োগ করে এবং এর মধ্যে কয়েকটি বিপরীত দিকনির্দেশে চাপ দেয়। নকশাগুলির নীতিমালাগুলির মধ্যে তাদের সকলকেই জবাবদিহি করতে হয়, তবে কোনও মুঠোয় নীতিগুলি সমস্ত পরিস্থিতিতে মাপসই করে না।
এখন, প্রতিটি নীতিটি এই বোঝার সাথে একবার দেখে নেওয়া যাক যে তারা যখন কখনও কখনও বিভিন্ন দিকে টানতে পারে তবে তারা কোনওভাবেই সংঘাতের মধ্যে নেই।
YAGNI বিকাশকারীদের একটি বিশেষ ধরণের পুনরায় কাজ এড়াতে সহায়তা করার জন্য ধারণা করা হয়েছিল: যা ভুল জিনিস তৈরির ফলে আসে। ভবিষ্যতে আমাদের কী পরিবর্তন হবে বা কী প্রয়োজন তা অনুমান বা ভবিষ্যদ্বাণীগুলির উপর ভিত্তি করে খুব তাড়াতাড়ি ভুল সিদ্ধান্তগুলি এড়াতে আমাদের গাইড করার মাধ্যমে এটি এটি করে। সম্মিলিত অভিজ্ঞতা আমাদের বলে যে আমরা যখন এটি করি তখন আমাদের সাধারণত ভুল হয়। উদাহরণস্বরূপ, YAGNI আপনাকে পুনরায় ব্যবহারযোগ্যতার উদ্দেশ্যে ইন্টারফেস তৈরি না করার জন্য বলবে , যদি আপনি এখনই না জানেন যে আপনার একাধিক বাস্তবায়নকারী প্রয়োজন। একইভাবে YAGNI বলবে যে কোনও অ্যাপ্লিকেশনটিতে একক ফর্ম পরিচালনা করতে কোনও "স্ক্রিনম্যানেজার" তৈরি করবেন না যদি আপনি এই মুহুর্তে জানেন না যে আপনার একাধিক স্ক্রিন রয়েছে।
অনেক লোক যা মনে করেন তার বিপরীতে, সলিড পুনঃব্যবহারযোগ্যতা, উদারতা বা এমনকি বিমূর্ততা সম্পর্কে নয় । সলিড আপনাকে নির্দিষ্ট কোড পরিবর্তন করতে সহায়তা করার উদ্দেশ্যে তৈরি করা হয়েছে যা সেই নির্দিষ্ট পরিবর্তনটি কী হতে পারে সে সম্পর্কে কিছু না বলে change সলিডের পাঁচটি নীতিই কোড তৈরির জন্য একটি কৌশল তৈরি করে যা অতিরিক্ত জেনেরিক না হয়ে নমনীয় এবং নির্বোধ না হয়ে সহজ simple SOLID কোডের যথাযথ প্রয়োগের সাথে সংজ্ঞাযুক্ত ভূমিকা ও সীমানা সহ ছোট, ফোকাসযুক্ত ক্লাস তৈরি হয়। ব্যবহারিক ফলাফলটি হ'ল যে কোনও প্রয়োজনীয় প্রয়োজনীয়তার পরিবর্তনের জন্য, ন্যূনতম সংখ্যার ক্লাস স্পর্শ করা দরকার। এবং একইভাবে, যে কোনও কোড পরিবর্তনের জন্য, অন্যান্য ক্লাসের মাধ্যমে ন্যূনতম পরিমাণে "রিপল" থাকে।
আপনার যে উদাহরণস্বরূপ পরিস্থিতি রয়েছে তা দেখে, আসুন দেখুন য্যাগনি এবং সলাইড কী বলতে পারে। বাইরে থেকে সমস্ত সংগ্রহশালা একই দেখায় এই কারণে আপনি একটি সাধারণ সংগ্রহস্থল ইন্টারফেস বিবেচনা করছেন। তবে একটি সাধারণ, জেনেরিক ইন্টারফেসের মান হ'ল এটি নির্দিষ্ট করে কোনটি প্রয়োগ না করে প্রয়োগকারীদের যে কোনওটিকে ব্যবহার করার ক্ষমতা। আপনার অ্যাপে কোথাও না থাকলে যেখানে এটি প্রয়োজনীয় বা দরকারী হবে, YAGNI বলে যে এটি করবেন না।
দেখার জন্য 5 টি সলিড নীতি রয়েছে। এস একক দায়িত্ব। এটি ইন্টারফেস সম্পর্কে কিছুই বলে না, তবে এটি আপনার কংক্রিটের ক্লাসগুলি সম্পর্কে কিছু বলতে পারে। এটি যুক্তিযুক্ত হতে পারে যে ডেটা অ্যাক্সেস নিজেই পরিচালনা করা সর্বোত্তমভাবে এক বা একাধিক শ্রেণীর একটি দায়বদ্ধতা তৈরি করা যেতে পারে, তবে রিপোজিটরিগুলির দায়িত্ব একটি অন্তর্নিহিত প্রসঙ্গ (গ্রাহক সংস্থা, গ্রাহক সত্তাগুলির জন্য স্পষ্টভাবে একটি সংগ্রহস্থল) থেকে স্পষ্ট কলগুলিতে অনুবাদ করা হয় গ্রাহক সত্তার প্রকার নির্দিষ্ট করে সাধারণ তথ্য অ্যাক্সেস এপিআই।
ও খোলা-বন্ধ। এটি বেশিরভাগ উত্তরাধিকার সম্পর্কে। আপনি যদি সাধারণ কার্যকারিতা প্রয়োগ করে একটি সাধারণ বেস থেকে আপনার সংগ্রহস্থলগুলি সংগ্রহ করার চেষ্টা করছেন বা আপনি যদি বিভিন্ন সংগ্রহস্থল থেকে আরও কিছু প্রাপ্তি প্রত্যাশা করেন তবে এটি প্রয়োগ হবে। কিন্তু আপনি না, তাই না।
এল হ'ল লিসকভ সাবস্টিটিউবিলিটি। আপনি যদি সাধারণ সংগ্রহস্থল ইন্টারফেসের মাধ্যমে সংগ্রহস্থলগুলি ব্যবহার করতে চান তা এটি প্রয়োগ করে। এটি ধারাবাহিকতা নিশ্চিত করতে এবং বিভিন্ন প্রবর্তককে বিশেষ পরিচালনা করতে এড়াতে ইন্টারফেস এবং বাস্তবায়নের উপর বিধিনিষেধ স্থাপন করে। এর কারণ হ'ল এই জাতীয় বিশেষ হ্যান্ডলিং কোনও ইন্টারফেসের উদ্দেশ্যকে হ্রাস করে। এই নীতিটি বিবেচনা করা কার্যকর হতে পারে, কারণ এটি সাধারণ সংগ্রহস্থল ইন্টারফেসটি ব্যবহার থেকে দূরে আপনাকে সতর্ক করতে পারে। এটি YAGNI এর গাইডেন্সের সাথে মিলে যায়।
আমি ইন্টারফেস পৃথককরণ। আপনি যদি আপনার ভাণ্ডারগুলিতে বিভিন্ন ক্যোয়ারী অপারেশন যুক্ত করতে শুরু করেন তবে এটি প্রয়োগ করতে পারে। ইন্টারফেস পৃথককরণ প্রযোজ্য যেখানে আপনি কোনও শ্রেণীর সদস্যদের দুটি উপ-উপায়ে ভাগ করতে পারবেন যেখানে একটি নির্দিষ্ট গ্রাহক এবং অন্যজন অন্য দ্বারা ব্যবহৃত হবে, তবে কোনও গ্রাহক সম্ভবত উভয় উপসর্গ ব্যবহার করবেন না। গাইডেন্সটি হল একটি সাধারণের চেয়ে দুটি পৃথক ইন্টারফেস তৈরি করা। আপনার ক্ষেত্রে, এটি পৃথক উদাহরণগুলি আনা এবং সংরক্ষণ করা একই কোড দ্বারা গ্রাস করা হবে যা সাধারণ জিজ্ঞাসাবাদ করবে, সুতরাং এটি দুটি ইন্টারফেসের মধ্যে পৃথক করা কার্যকর হতে পারে।
ডি হ'ল ডিপেন্ডেন্সি ইনজেকশন। এখানে আমরা এস এর মতো একই জায়গায় ফিরে এসেছি আপনি যদি ডেটা অ্যাক্সেস এপিআই এর ব্যবহারকে একটি পৃথক বস্তুতে পৃথক করেন তবে এই নীতিটি বলে যে কেবলমাত্র সেই অবজেক্টের একটি উদাহরণ নতুন করে তৈরি করার পরিবর্তে আপনি এটি তৈরি করতে হবে যখন আপনি তৈরি করবেন একটি ভান্ডার এটি ডেটা অ্যাক্সেস উপাদানটির জীবদ্দশায় নিয়ন্ত্রণ করা সহজ করে তোলে, এটি আপনার সিভিলটন তৈরির পথে না গিয়েও আপনার সংগ্রহস্থলের মধ্যে রেফারেন্স ভাগ করে নেওয়ার সম্ভাবনাটি উন্মুক্ত করে।
এটি লক্ষ করা গুরুত্বপূর্ণ যে বেশিরভাগ সলিড নীতিগুলি আপনার অ্যাপ্লিকেশনটির বিকাশের এই নির্দিষ্ট পর্যায়ে অগত্যা প্রযোজ্য না। উদাহরণস্বরূপ, আপনার ডেটা অ্যাক্সেস ছড়িয়ে দেওয়া উচিত কিনা তা কতটা জটিল তা নির্ভর করে এবং আপনি ডাটাবেসটিকে আঘাত না করে আপনার সংগ্রহস্থল যুক্তি পরীক্ষা করতে চান কিনা তার উপর নির্ভর করে। এটি অসম্ভব বলে মনে হচ্ছে (দুর্ভাগ্যক্রমে, আমার মতে), সুতরাং এটি সম্ভবত প্রয়োজনীয় নয়।
সুতরাং এই সমস্ত বিবেচনার পরে, আমরা দেখতে পেলাম যে ইয়াগনি এবং সলিড আসলে একটি সাধারণ, তাত্ক্ষণিক-প্রাসঙ্গিক পরামর্শ সরবরাহ করে: সম্ভবত একটি সাধারণ জেনেরিক সংগ্রহস্থল ইন্টারফেস তৈরি করার প্রয়োজন হয় না necessary
এই সমস্ত যত্নশীল চিন্তা একটি শেখার অনুশীলন হিসাবে অত্যন্ত দরকারী। আপনি যেমন শিখেন এটি সময় সাশ্রয়ী, তবে সময়ের সাথে সাথে আপনি স্বজ্ঞাততা বিকাশ করেন এবং খুব দ্রুত হয়ে ওঠেন। করণীয় আপনি সঠিক জিনিসটি জানেন, তবে কেউ আপনাকে কেন এটি ব্যাখ্যা করতে জিজ্ঞাসা না করা হলে এই সমস্ত শব্দগুলি ভাবার দরকার নেই।