সলিড নীতি এবং কোড কাঠামো


149

একটি সাম্প্রতিক চাকরী ইন্টারভিউ, আমি সম্পর্কে একটি প্রশ্ন উত্তর দিতে পারে না কঠিন - বিভিন্ন নীতির মৌলিক অর্থ প্রদানের তার পরেও। এটা সত্যিই আমাকে বাগ। আমি প্রায় কয়েক দিন ধরে খোঁড়াখুঁড়ি করেছি এবং এখনও একটি সন্তোষজনক সংক্ষিপ্তসার নিয়ে এসেছি।

সাক্ষাত্কারের প্রশ্নটি ছিল:

আপনি যদি একটি নেট প্রকল্পের দিকে নজর রাখেন যে আমি আপনাকে কঠোরভাবে নীতি নীতি অনুসরণ করে বলেছি, আপনি প্রকল্প এবং কোড কাঠামোর দিক থেকে কী দেখার আশা করবেন?

আমি কিছুটা ঘুরে এসেছি, সত্যিই প্রশ্নের উত্তর দিলাম না, এবং পরে বোমা ফাটিয়ে দিলাম।

এই প্রশ্নটি আমি কীভাবে আরও ভালভাবে পরিচালনা করতে পারি?


3
আমি ভাবছিলাম যে
সলিডের

এক্সটেনসিবল অ্যাবস্ট্রাক্ট বিল্ডিং ব্লক।
রওয়ং

অবজেক্ট ওরিয়েন্টেড ডিজাইনের সলাইড নীতি অনুসরণ করে, আপনার ক্লাসগুলি স্বাভাবিকভাবেই ছোট, সুপরিচিত এবং সহজেই পরীক্ষিত হবে। সূত্র: docs.asp.net/en/latest/fundamentals/…
ট্র্রুস্লিপ

উত্তর:


187

এস = একক দায়িত্বের নীতি

সুতরাং আমি একটি সুবিন্যস্ত ফোল্ডার / ফাইল কাঠামো এবং অবজেক্ট হায়ারার্কিটি দেখতে আশা করব প্রতিটি শ্রেণি / কার্যকারিতার অংশটির নামকরণ করা উচিত যে এর কার্যকারিতাটি অত্যন্ত সুস্পষ্ট এবং এতে সেই কার্য সম্পাদনের জন্য কেবল যুক্তি থাকতে হবে।

আপনি যদি হাজার লাইনের কোড সহ বিশাল ব্যবস্থাপক শ্রেণি দেখে থাকেন তবে এটি একটি চিহ্ন যে একক দায়িত্ব পালন করা হচ্ছে না।

ও = উন্মুক্ত / বদ্ধ নীতি

এটি মূলত এই ধারণাটি যে নতুন ক্লাসগুলির মাধ্যমে নতুন কার্যকারিতা যুক্ত করা উচিত যা বিদ্যমান কার্যকারিতাটির ন্যূনতম প্রভাব / সংযোজন প্রয়োজন।

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

এল = লিসকভ প্রতিস্থাপনের নীতি

এটি উপ-প্রকারকে তাদের পিতামাতার ধরণের হিসাবে আচরণ করার ক্ষমতা নিয়ে কাজ করে। আপনি যদি উত্তরাধিকার সূত্রে প্রাপ্ত অবজেক্ট অবলম্বনটি প্রয়োগ করে থাকেন তবে এটি সি # এর বাক্স থেকে বেরিয়ে আসে।

আমি প্রত্যাশা করব যে কোডগুলি সাধারণ অবজেক্টগুলিকে তাদের বেস টাইপ হিসাবে কল করে এবং বেস / অ্যাবস্ট্রাক্ট ক্লাসে কল করার পদ্ধতিগুলি উপস্থাপন করে সাব-টাইপগুলিতে নিজে কাজ করার পরিবর্তে calling

আমি = ইন্টারফেস বিভাজন নীতি

এটি এসআরপির অনুরূপ। মূলত, আপনি কার্যকারিতাটির ছোট ছোট উপগ্রহগুলিকে ইন্টারফেস হিসাবে সংজ্ঞায়িত করেন এবং আপনার সিস্টেমকে ডিকপলড রাখার জন্য তাদের সাথে কাজ করেন (উদাহরণস্বরূপ FileManager, ফাইল I / O এর সাথে ডিল করার ক্ষেত্রে একক দায়বদ্ধতা থাকতে পারে তবে এটি কার্যকর করতে পারে IFileReaderএবং IFileWriterযার মধ্যে পড়ার জন্য নির্দিষ্ট পদ্ধতির সংজ্ঞা রয়েছে) এবং ফাইল লেখার)।

ডি = নির্ভরতা বিপরীতমুখী মূলনীতি।

আবার এটি কোনও সিস্টেমকে ডিউপলড রাখার সাথে সম্পর্কিত। সম্ভবত আপনি একটি .NET নির্ভরতা ইনজেকশন গ্রন্থাগার ব্যবহারের জন্য Lookout হতে চাই, যেমন সমাধান ব্যবহৃত হচ্ছে Unityবা Ninjectবা এই ধরনের একটি ServiceLocator সিস্টেম AutoFacServiceLocator


36
আমি সি # তে প্রচুর এলএসপি লঙ্ঘন দেখেছি, প্রতিবারই কেউ তাদের নির্দিষ্ট সাব টাইপ বিশেষায়িত বলে সিদ্ধান্ত নেয় এবং তাই ইন্টারফেসের কোনও অংশ প্রয়োগ করার প্রয়োজন হয় না এবং পরিবর্তে কেবল সেই অংশটি ব্যতিক্রম করে দেয় ... এটি একটি সাধারণ জুনিয়র পদ্ধতির ভুল বোঝাবুঝি ইন্টারফেস বাস্তবায়ন এবং ডিজাইনের সমস্যা সমাধান করতে
জিমি হোফা

2
@ জিমিহোফা এটি মূল কারণগুলির মধ্যে একটি যা আমি কোড চুক্তি ব্যবহারের জন্য জোর দিয়েছি; চুক্তিগুলি নকশা করার চিন্তাভাবনা প্রক্রিয়াটি অতিক্রম করে মানুষকে এই খারাপ অভ্যাস থেকে বেরিয়ে আসতে অনেক সহায়তা করে।
অ্যান্ডি

12
আমি পছন্দ করি না যে "এলএসপি বাক্সটি সি # তে বেরিয়ে আসে" এবং ডিআইপিকে নির্ভরতা ইনজেকশন অনুশীলনের সাথে সমান করে।
ইউফোরিক

3
+1 তবে নির্ভরতা বিপর্যয় <> নির্ভরতা ইনজেকশন। তারা একসাথে ভাল খেলেন, তবে নির্ভরতা ইনভার্সন কেবল নির্ভরতা ইনজেকশন থেকে অনেক বেশি। তথ্যসূত্র:
বুনোতে

3
@ অ্যান্ডি: ইন্টারফেসে সংজ্ঞায়িত ইউনিট টেস্টগুলি যা সমস্ত প্রয়োগকারী (যে শ্রেণিটি যা তাত্ক্ষণিকভাবে করতে পারে / করতে পারে) পরীক্ষা করা হয় যা অ্যানডি: পাশাপাশি সহায়তা করে।
মার্জন ভেনেমা

17

সমস্ত জায়গা জুড়ে নির্ভরতা ইনজেকশন সহ প্রচুর ছোট ছোট ক্লাস এবং ইন্টারফেস। সম্ভবত কোনও বড় প্রকল্পে আপনি এই সমস্ত ছোট ছোট অবজেক্টের লাইফটাইমটি তৈরি এবং পরিচালনা করতে আপনাকে একটি আইওসি ফ্রেমওয়ার্ক ব্যবহার করবেন। Https://stackoverflow.com/questions/21288/Wich-net-d dependency- inication- frameworks- are- worth- looking- into দেখুন

দ্রষ্টব্য যে একটি বড় নেট নেট প্রকল্পটি কঠিনভাবে নলগুলির নীতি অনুসরণ করে তার অর্থ প্রত্যেকের সাথে কাজ করার জন্য একটি ভাল কোডবেস অগত্যা নয়। সাক্ষাত্কারকারী কে ছিলেন তার উপর নির্ভর করে তিনি / আপনি চেয়েছিলেন যে আপনি সলিডের অর্থ কী তা বোঝেন এবং / অথবা আপনি কীভাবে নকশার নীতিগুলি অনুসরণ করেন তা পরীক্ষা করে দেখতে চান।

আপনি দেখতে পাচ্ছেন, সলিড হওয়ার জন্য আপনাকে অনুসরণ করতে হবে:

এস দায়বদ্ধতার নীতিটি এনগল করুন, সুতরাং আপনারা প্রত্যেকে কেবল একটি কাজ করে অনেকগুলি ছোট ছোট ক্লাস পাবেন

হে কলম-বন্ধ নীতি, যা .NET সাধারণত নির্ভরতা ইনজেকশন দিয়ে প্রয়োগ করা হয়, যার জন্য নীচের আই এবং ডিও প্রয়োজন ...

এল ইসকোভ প্রতিস্থাপনের নীতিটি সম্ভবত সি # তে ওয়ান-লাইনারের সাথে ব্যাখ্যা করা অসম্ভব। ভাগ্যক্রমে এগুলিকে সম্বোধন করার জন্য আরও অন্যান্য প্রশ্ন রয়েছে, যেমন https://stackoverflow.com/questions/4428725/can-you-explain-liskov-subst ্টation- মূলনীতি-with-a-ood-c-sharp- উদাহরণ

আমি পৃথক পৃথকীকরণ নীতি ওপেন-ক্লোজড নীতির সাথে মিল রেখে কাজ করে। আক্ষরিকরূপে অনুসরণ করা হলে এর অর্থ হ'ল কয়েকটি "বড়" ইন্টারফেসের পরিবর্তে খুব অল্প সংখ্যক ইন্টারফেসের সংখ্যাকে প্রাধান্য দেওয়া

ডি এপেন্ডেন্সি বিপরীত নীতি উচ্চ-স্তরের শ্রেণিগুলি নিম্ন-স্তরের শ্রেণীর উপর নির্ভর করে না, উভয়ই বিমূর্ততার উপর নির্ভর করবে।


এসআরপি এর অর্থ এই নয় যে "কেবল একটি কাজ করুন"।
রবার্ট হার্ভে

13

এমন কিছু মৌলিক জিনিস যা আমি তাদের দোকানের কোডবেজে দেখতে আশা করব যা তাদের প্রতিদিনের কাজগুলিতে সলিডকে প্রশ্রয় দিয়েছিল:

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

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

  • প্রচুর ইন্টারফেস এবং এবিসি - ডিআইপি প্রয়োজনীয়ভাবে বিমূর্ততা থাকা প্রয়োজন এবং আইএসপি এগুলিকে সংক্ষিপ্তভাবে বাদ দিতে উত্সাহ দেয়। সুতরাং, ইন্টারফেস এবং বিমূর্ত বেস ক্লাসগুলি হ'ল নিয়ম, এবং আপনার কোডবেসের ভাগ করে নেওয়া নির্ভরশীলতা কার্যকারিতাটি কভার করার জন্য আপনার প্রচুর প্রয়োজন। কঠোর SOLID সব কিছু ইনজেকশনের প্রয়োজন হবে , এটি স্পষ্টতই আপনাকে কোথাও তৈরি করতে হবে, এবং তাই যদি কোনও জিইউআই ফর্ম কেবল পিতামাতার ফর্মের সন্তানেরূপে অভিভাবকের উপরে কিছু ক্রিয়া সম্পাদন করে তৈরি করা হয় তবে আমার বাচ্চার ফর্মটি নতুন করে তোলার কোনও যোগ্যতা নেই if কোড থেকে সরাসরি পিতামাতার মধ্যে। আমি সাধারণত সেই কোডটিকে তার নিজস্ব পদ্ধতি হিসাবে তৈরি করি, সুতরাং যদি একই ফর্মের দুটি ক্রিয়া যদি কখনও উইন্ডোটি খোলায়, আমি কেবল পদ্ধতিটি কল করি।
  • অনেক প্রকল্প - এই সমস্তটির মূল বিষয়টি হ'ল পরিবর্তনের সুযোগকে সীমাবদ্ধ করা। পরিবর্তনের মধ্যে পুনরায় কম্পাইল করার প্রয়োজন রয়েছে (একটি তুলনামূলক তুচ্ছ ব্যায়াম আর, তবে এখনও অনেকগুলি প্রসেসরের মধ্যে গুরুত্বপূর্ণ- এবং ব্যান্ডউইথ-সমালোচনামূলক ক্রিয়াকলাপ যেমন কোনও মোবাইল পরিবেশে আপডেট স্থাপনের মতো)। যদি কোনও প্রকল্পের একটি ফাইল পুনর্নির্মাণ করতে হয় তবে সমস্ত ফাইল তা করে। এর অর্থ আপনি যদি তাদের প্রয়োগের মতো একই লাইব্রেরিতে ইন্টারফেস রাখেন তবে আপনি বিন্দুটি মিস করছেন; আপনি যদি ইন্টারফেসের একটি বাস্তবায়ন পরিবর্তন করেন তবে আপনাকে সমস্ত ব্যবহারগুলি পুনরায় সংকলন করতে হবে কারণ আপনি নিজেই ইন্টারফেস সংজ্ঞাটিও সংশোধন করবেন, ফলস্বরূপ বাইনারিটিতে একটি নতুন অবস্থানে নির্দেশ করার জন্য প্রয়োজনীয় ব্যবহারগুলি প্রয়োজন। অতএব, ইন্টারফেস ব্যবহার এবং ব্যবহার থেকে পৃথক রাখা বাস্তবায়নের সময়, ব্যবহারের সাধারণ ক্ষেত্রের দ্বারা এগুলি পৃথক করে রাখা, একটি সাধারণ সেরা অনুশীলন।
  • "গ্যাং অফ ফোর" টার্মিনোলজিতে প্রচুর মনোযোগ দেওয়া হয়েছিল - ১৯৯৪ সালে নকশার প্যাটার্নস বইয়ের নকশার নকশাগুলি কামড়ের আকারের, মডুলার কোড ডিজাইনের উপর জোর দেয় যা SOLID তৈরি করতে চায়। নির্ভরতা বিপরীতমুখী মূলনীতি এবং ওপেন / ক্লোজড নীতিমালা, উদাহরণস্বরূপ, সেই বইয়ের বেশিরভাগ চিহ্নিত নিদর্শনগুলির কেন্দ্রবিন্দুতে। এর মতো, আমি এমন একটি দোকান প্রত্যাশা করব যে সলিডের নীতিগুলিকে দৃ strongly়ভাবে মেনে চলেন গ্যাং অফ ফোর বইয়ের পরিভাষাটিও মেনে নেবে, এবং "আব্যাকফ্যাক্টরি", "জাইজরোপোসিতোরি", "ডিফটক্সএজএডাপ্টারের মতো লাইনগুলিতে তাদের ফাংশন অনুসারে ক্লাসের নাম রাখবে name "," এ 1 কম্যান্ড "ইত্যাদি
  • একটি জেনেরিক রিপোজিটরি - আইএসপি, ডিআইপি এবং এসআরপি হিসাবে সাধারণভাবে বোঝা যায়, রেপোজিটরি সলাইড ডিজাইনে প্রায় সর্বব্যাপী, কারণ এটি গ্রাহক কোডটি পুনরুদ্ধার / অধ্যবসায় ব্যবস্থার নির্দিষ্ট জ্ঞানের প্রয়োজন ছাড়াই একটি বিমূর্ত পদ্ধতিতে ডেটা ক্লাসের জন্য জিজ্ঞাসা করতে সক্ষম করে, এবং এটি কোডটি ডিএও প্যাটার্নের বিপরীতে এক জায়গায় এটি করে দেয় (যার মধ্যে যদি আপনি একটি চালানের ডেটা বর্গ করেন তবে আপনার কাছে একটি ইনভয়েসডেওও থাকত যা সেই ধরণের হাইড্রেটেড অবজেক্ট তৈরি করেছিল, এবং আরও কোডবেস / স্কিমাতে সমস্ত ডেটা অবজেক্ট / টেবিল)।
  • একটি আইওসি কনটেইনার - আমি এটি যুক্ত করতে দ্বিধা বোধ করি, কারণ আমি আসলে আমার বেশিরভাগ নির্ভরতা ইনজেকশন করতে কোনও আইওসি কাঠামো ব্যবহার করি না। এটি দ্রুত কোনও গড অবজেক্টের অ্যান্টি-প্যাটার্নে পরিণত হয় যা সবকিছু ধারকটিতে ফেলে দেয়, এটি ঝাঁকিয়ে পড়ে এবং ইনজেকশনের কারখানার পদ্ধতির মাধ্যমে আপনার প্রয়োজনীয় উল্লম্ব-জলীয় নির্ভরতা .েলে দেয়। দুর্দান্ত লাগছে যতক্ষণ না আপনি বুঝতে পেরেছেন যে কাঠামোটি বেশ একরকম হয়ে যায় এবং নিবন্ধকরণের তথ্য সহ প্রকল্পটি যদি "সাবলীল" হয় তবে আপনার সমাধানের সমস্ত কিছুর সবকিছুই এখন জানতে হবে। যে পরিবর্তন করার অনেক কারণ। যদি এটি সাবলীল না হয় (কনফিগার ফাইল ব্যবহার করে দেরীতে আবদ্ধ নিবন্ধকরণ), তবে আপনার প্রোগ্রামের একটি মূল অংশ "ম্যাজিক স্ট্রিং" এর উপর নির্ভর করে, সম্পূর্ণ ভিন্ন 'কৃমি'।

1
ডাউনভোটস কেন?
কিথস

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

10

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

স্কিটির নিবন্ধটির সংক্ষিপ্তসার (যদিও আমি মূল ব্লগ পোস্টটি না পড়ে তার নাম বাদ দেওয়ার পরামর্শ দিই না!):

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

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

আরেকটি ভাল উত্তর হবে, "আচ্ছা, এটি নির্ভর করে যে তারা এটি কতটা ভালভাবে বুঝতে পেরেছে they পণ্য পরিচালনার সাথে যোগাযোগের জন্য ব্যবহৃত ডোমেন ভোকাবুলারি প্রতিফলিত করুন .... "


6

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

সুতরাং, আপনি নিম্নলিখিত দেখতে আশা করি:

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

4

এটি একটি দুর্দান্ত প্রশ্ন, যদিও আমি মনে করি এটি একটি শক্ত সাক্ষাত্কারের প্রশ্ন।

সলাইড নীতিগুলি সত্যই ক্লাস এবং ইন্টারফেস পরিচালনা করে এবং কীভাবে তারা একে অপরের সাথে সম্পর্কিত।

এই প্রশ্নটি আসলেই এমন একটি যা ফাইলগুলির সাথে আরও বেশি কিছু করার দরকার এবং প্রয়োজনীয় ক্লাসগুলি নয়।

আমি একটি সংক্ষিপ্ত পর্যবেক্ষণ বা উত্তর দেব যা হ'ল সাধারণত আপনি এমন ফাইলগুলি দেখতে পাবেন যা কেবল একটি ইন্টারফেস রাখে এবং প্রায়শই কনভেনশনটি হ'ল এগুলি মূলধন -1 দিয়ে শুরু হয়। এর বাইরে, আমি উল্লেখ করব যে ফাইলগুলির নকল কোড (বিশেষত একটি মডিউল, অ্যাপ্লিকেশন, বা গ্রন্থাগারের মধ্যে থাকা) থাকবে না এবং সেই কোডটি মডিউল, অ্যাপ্লিকেশন বা লাইব্রেরির মধ্যে নির্দিষ্ট গণ্ডির মধ্যে সাবধানতার সাথে ভাগ করা হবে।

রবার্ট মার্টিন বুচ পদ্ধতিটি ব্যবহার করে (সংহতি, সমাপ্তি এবং পুনঃব্যবহারযোগ্যতা বিভাগগুলি দেখুন) এবং ক্লিন কোডে সিউটি + এর ক্ষেত্রের সিজিকাল অবজেক্টেড ওরিয়েন্টেড সি ++ অ্যাপ্লিকেশনগুলিতে আলোচনা করেন


.NET কোডারস আইএমই সাধারণত "ফাইল প্রতি 1 শ্রেণি" নিয়ম অনুসরণ করে এবং মিরর ফোল্ডার / নেমস্পেস স্ট্রাকচারগুলিও; ভিজ্যুয়াল স্টুডিও আইডিই উভয় অনুশীলনকে উত্সাহ দেয় এবং রিসার্চারের মতো বিভিন্ন প্লাগইন এগুলি প্রয়োগ করতে পারে। সুতরাং, আমি ক্লাস / ইন্টারফেস কাঠামোকে মিরর করে এমন একটি প্রকল্প / ফাইলের কাঠামো দেখতে আশা করব would
কিথস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.