কত বড় অ-ওও কোড ঘাঁটি পরিচালিত হয়?


27

আমি সর্বদা দেখতে পাই বিমূর্ততা একটি খুব দরকারী বৈশিষ্ট্য যা ওও কোড-বেস পরিচালনার জন্য সরবরাহ করে। তবে কীভাবে বড় অ-ওও কোড ঘাঁটি পরিচালিত হয়? বা এগুলি কি শেষ পর্যন্ত কেবল " বিগ বলের কাদা " হয়ে যায়?

আপডেট:
দেখে মনে হয়েছিল প্রত্যেকে 'বিমূর্ততা' কেবল মডুলারাইজেশন বা ডেটা-লুকানো thinking তবে আইএমএইচও, এর অর্থ 'অ্যাবস্ট্রাক্ট ক্লাস' বা 'ইন্টারফেস' ব্যবহার করাও যা নির্ভরতা-ইনজেকশন এবং এইভাবে পরীক্ষার জন্য আবশ্যক। অ-ওও কোড ঘাঁটি কীভাবে এটি পরিচালনা করে? এবং এছাড়াও, বিমূর্ততা ব্যতীত, এনক্যাপসুলেশন বৃহত কোড ঘাঁটিগুলি পরিচালনা করতে অনেক সহায়তা করে কারণ এটি ডেটা এবং ফাংশনগুলির মধ্যে সম্পর্কটিকে সংজ্ঞায়িত করে এবং সীমাবদ্ধ করে।

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


6
একটি ভাষা অজ্ঞাবল পদ্ধতিতে, দয়া করে কোনও বস্তুর বর্ণনা দিন। এটি কী, এটি কীভাবে সংশোধিত হয়, এর উত্তরাধিকারী হওয়া উচিত এবং এটি কী সরবরাহ করতে হবে? লিনাক্স কার্নেল প্রচুর সহায়ক এবং ফাংশন পয়েন্টার সহ বরাদ্দকৃত কাঠামোগুলিতে পূর্ণ , তবে এটি সম্ভবত বেশিরভাগের জন্য অবজেক্ট অরিয়েন্টেড সংজ্ঞাটি পূরণ করতে পারে না। তবুও, এটি একটি খুব ভাল রক্ষণাবেক্ষণ কোড বেসের সেরা উদাহরণগুলির মধ্যে একটি। কেন? কারণ প্রতিটি সাব সিস্টেম রক্ষণাবেক্ষণকারী তাদের দায়িত্বের ক্ষেত্রটি কী তা জানেন।
টিম পোস্ট

ভাষা-অজ্ঞাত উপায়ে, দয়া করে আপনি কীভাবে কোড ঘাঁটিগুলি পরিচালনা করছেন এবং ওও এর সাথে কী করতে হবে তা বর্ণনা করুন describe
ডেভিড থর্নলি

@ টিম পোস্ট আমি লিনাক্স কার্নেল উত্স কোড পরিচালনা সম্পর্কে আগ্রহী। আপনি দয়া করে আরও সিস্টেম বর্ণনা করতে পারেন? একটি উদাহরণ সহ উত্তর হিসাবে সম্ভবত?
গুলশান

7
পুরানো দিনগুলিতে, আমরা ইউনিট পরীক্ষার জন্য মোক এবং স্টাবগুলির জন্য পৃথক লিঙ্ক ব্যবহার করতাম । নির্ভরতা ইনজেকশন বেশ কয়েকটি মধ্যে একটি কৌশল। শর্তসাপেক্ষ সংকলন আরেকটি।
ম্যাকনিল

আমি মনে করি এটি "ম্যানেজড" হিসাবে বৃহত কোড বেসগুলিকে (ওও বা অন্যথায়) উল্লেখ করা এক প্রসারিত। আপনার প্রশ্নের কেন্দ্রীয় শব্দটির আরও ভাল সংজ্ঞা দেওয়া ভাল হবে।
টটিংজ

উত্তর:


43

আপনি মনে করেন যে OOP বিমূর্ততা অর্জনের একমাত্র মাধ্যম।

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


27
+1 এছাড়াও, আপনি কী করছেন তা যদি না জানেন তবে ওওপি ব্যবহার করে একটি "বিগ বলের বড়" লিখতে পারা সম্ভব।
ল্যারি কোলম্যান

সি কোড ঘাঁটি সম্পর্কে কি?
গুলশান

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

9
সি ফাইল স্তরে মডুলারাইজেশনের অনুমতি দেয়। ইন্টারফেসটি .h ফাইলে যায়, .c ফাইলে সর্বজনীনভাবে উপলব্ধ ফাংশন এবং ব্যক্তিগত ভেরিয়েবল এবং ফাংশনগুলি staticঅ্যাক্সেস সংশোধক সংযুক্ত করে।
ডেভিড থর্নলি

1
@ কনরাড: যদিও আমি একমত যে ওওপি এটি করার একমাত্র উপায় নয়, আমি বিশ্বাস করি ওপি'র মনে সম্ভবত কঠোরভাবে সি ছিল, যা কার্যকরী বা গতিশীল ভাষাও নয়। সুতরাং আমি সন্দেহ করি যে পার্ল এবং হাস্কেলের কথা উল্লেখ করা তাঁর পক্ষে কোনও উপকারে আসবে। আমি আসলে আপনার মন্তব্যটিকে ওপির সাথে আরও প্রাসঙ্গিক এবং দরকারী বলে মনে করি (এর অর্থ এই নয় যে ওওপি কিছুটা চেষ্টা করে অর্জন করা যায় না ); আপনি অতিরিক্ত বিশদ সহ এটি একটি পৃথক উত্তর হিসাবে যুক্ত করার কথা বিবেচনা করতে পারেন, সম্ভবত একটি কোড স্নিপেট বা কয়েকটি সংযোগের সাহায্যে সমর্থিত। এটি কমপক্ষে আমার ভোট জিততে পারে, এবং সম্ভবত ওপির পক্ষে। :)
গ্রো

11

মডিউল, (বাহ্যিক / অভ্যন্তরীণ) ফাংশন, সাবরোটাইন ...

যেমন কনরাড বলেছিলেন, বড় কোড বেইজগুলি পরিচালনা করার জন্য ওওপি একমাত্র উপায় নয়। প্রকৃতপক্ষে, এর আগে বরং অনেকগুলি সফ্টওয়্যার লেখা হয়েছিল (সি ++ এর আগে)।


* এবং হ্যাঁ, আমি জানি যে সি ++ কেবল ওওপি সমর্থনকারী নয়, তবে কোনওভাবেই সেই পদ্ধতির জড়তা নেওয়া শুরু হয়েছিল।
রক

8

পরিমিতি নীতি অবজেক্ট-ওরিয়েন্টেড ভাষাগুলির মধ্যে সীমাবদ্ধ নয়।


6

বাস্তবিকভাবে হয় হয় বিরল পরিবর্তন (ভাবুন সামাজিক সুরক্ষা অবসর গণনার গণনা) এবং / অথবা গভীরভাবে অন্তর্নির্মিত জ্ঞান কারণ সিস্টেমের মতো রক্ষণাবেক্ষণ করা লোকেরা কিছু সময়ের জন্য এটি করে চলেছে (ছদ্মবেশ গ্রহণ করা চাকরির সুরক্ষা)।

আরও ভাল সমাধানগুলি পুনরাবৃদ্ধযোগ্য বৈধতা, যার দ্বারা আমি স্বয়ংক্রিয় পরীক্ষা (উদাহরণস্বরূপ ইউনিট টেস্টিং) এবং মানব পরীক্ষা যা নিষিদ্ধ পদক্ষেপগুলি অনুসরণ করে (উদাহরণস্বরূপ রিগ্রেশন টেস্টিং) "চারপাশে ক্লিক করে এবং কী ভাঙা যায় তার বিরোধিতা করে"।

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


মাইকেল ফেদারসের বইয়ের জন্য +1। আপনি যখন একটি বড় কুৎসিত কোড-বেস সম্পর্কে হতাশ হন, (পুনরায় এটি পড়ুন :)
ম্যাথিউ

5

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

আমি মেটাডেটা সাথে কঠোর হওয়া খুব সহায়ক বলে মনে করেছি। ওও ভাষাগুলিতে কোডের বিটের মধ্যে সম্পর্কগুলি শ্রেণিবদ্ধ কাঠামোর দ্বারা (একটি ডিগ্রি পর্যন্ত) সংজ্ঞায়িত করা হয়, এমনভাবে একটি প্রতিবিম্ব এপিআইয়ের মতো জিনিসগুলির পর্যাপ্ত মানযুক্ত। পদ্ধতিগত ভাষায় এটি নিজেরাই আবিষ্কার করতে সহায়ক হতে পারে।

আমি এটিও খুঁজে পেয়েছি যে কোড জেনারেশন একটি পদ্ধতিগত ভাষায় (কোনও অবজেক্ট ওরিয়েন্টেড ভাষার তুলনায়) অনেক বেশি সহায়ক। এটি গ্যারান্টি দেয় যে মেটা-ডেটা কোডের সাথে সুসংগত রয়েছে (যেহেতু এটি তৈরির জন্য এটি ব্যবহৃত হয়) এবং আপনাকে দিক ওরিয়েন্টেড প্রোগ্রামিংয়ের কাটা পয়েন্টগুলির মতো কিছুটা দেয় - যখন আপনার প্রয়োজন হবে তখন আপনি কোড ইনজেক্ট করতে পারবেন। কখনও কখনও এমন পরিবেশে DRY প্রোগ্রামিংয়ের একমাত্র উপায় যা আমি বুঝতে পারি।


3

প্রকৃতপক্ষে, আপনি সম্প্রতি আবিষ্কার করেছেন , প্রথম অর্ডার ফাংশন হ'ল নির্ভরতা বিপরীতকরণের জন্য আপনার প্রয়োজন।

সি প্রথম অর্ডার ফাংশন এবং এমনকি কিছুটা ক্লোজার সমর্থন করে । এবং সি ম্যাক্রোস জেনেরিক প্রোগ্রামিংয়ের একটি শক্তিশালী বৈশিষ্ট্য, যদি প্রয়োজনীয় যত্ন সহ পরিচালিত হয়।

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


2

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

ছোট থেকে মাঝারি আকারের প্রকল্পগুলিতে কখনও কখনও পিউরিস্ট ওও প্রয়োগকরণের মাধ্যমে এটি করা সহজ।


2

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

মূল গোপন হ'ল নন-ওওপি কোডিং করার সময় ওওপি ভাবনা এড়ানো।

অ-ওও ভাষাগুলিতে মডিউলারিটি মূল বিষয়। সি তে এটি অর্জন করা হয়েছিল যেমন ডেভিড থর্নলি ঠিক একটি মন্তব্যে উল্লেখ করেছেন:

ইন্টারফেসটি .h ফাইলে যায়,


1

কোড পরিচালনার একটি উপায় হ'ল এমভিসি (মডেল-ভিউ-কন্ট্রোলার) আর্কিটেকচারের লাইন ধরে নিম্নলিখিত ধরণের কোডগুলিতে এটিকে পচন করা।

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

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

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

ওও প্রোগ্রামিং কোড সংগঠনকে শক্ত করে তোলার একটি উপায় হ'ল কিছু ক্লাস অবিরাম ডেটা স্ট্রাকচারের সাথে গভীরভাবে আবদ্ধ থাকে এবং কিছু না। যদি অবিচলিত ডেটা স্ট্রাকচারগুলি ক্যাসকেডিং 1: এন সম্পর্ক বা মি: এন সম্পর্কগুলির সাথে ঘনিষ্ঠভাবে সম্পর্কিত হয় তবে শ্রেণি সীমানা নির্ধারণ করা আপনার পক্ষে সঠিক না হওয়ার আগেই আপনি আপনার সিস্টেমের একটি উল্লেখযোগ্য এবং অর্থপূর্ণ অংশটি কোড না করা পর্যন্ত কঠিন is । ধ্রুবক ডেটা স্ট্রাকচারের সাথে আবদ্ধ যে কোনও শ্রেণীর অবিচ্ছিন্ন ডেটাগুলির স্কিমা পরিবর্তিত হলে বিবর্তন করা শক্ত হবে be অ্যালগরিদম, ফর্ম্যাট এবং পার্সিং পরিচালনা করে এমন ক্লাসগুলি ধ্রুবক ডেটা স্ট্রাকচারের স্কিমাতে পরিবর্তিত হওয়ার ঝুঁকির সম্ভাবনা কম থাকে। একটি এমভিসি ধরণের কোড সংগঠন ব্যবহার করা মডেল কোডে মেসিস্ট কোডগুলি পরিবর্তনকে আরও বিচ্ছিন্ন করে।


0

যে ভাষাগুলিতে ইনবিল্ট স্ট্রাকচার এবং সংস্থার বৈশিষ্ট্যগুলি অভাব রয়েছে সেগুলিতে কাজ করার সময় (যেমন এটির নামস্থান, প্যাকেজ, সমাবেশগুলি নেই ...) বা যেখানে এই আকারের কোডবেস নিয়ন্ত্রণে রাখতে অপর্যাপ্ত রয়েছে, সেখানে প্রাকৃতিক প্রতিক্রিয়া বিকাশ করতে হবে কোডটি সংগঠিত করার জন্য আমাদের নিজস্ব কৌশল।

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

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

সুতরাং আমি বিশ্বাস করি যে প্রকল্প-সুনির্দিষ্ট কৌশলটি আলিঙ্গন করা, এবং এটিকে পরিচালনা করা একটি মূল অগ্রাধিকার: সর্বোত্তম পরামর্শ হ'ল কাঠামোটি নথিভুক্ত করুন, কেন সেভাবে হয়, পরিবর্তনগুলি করার প্রক্রিয়াগুলি, এটি নিরীক্ষণ করা হচ্ছে তা নিশ্চিত করার জন্য নিরীক্ষণ, এবং গুরুতরভাবে: এটি পরিবর্তন করার দরকার হলে এটি পরিবর্তন করুন।

আমরা বেশিরভাগ রিফ্যাক্টরিং ক্লাস এবং পদ্ধতিগুলির সাথে পরিচিত, তবে এ জাতীয় ভাষায় একটি বৃহত কোডবেসের সাথে এটি নিজেই আয়োজক কৌশল (ডকুমেন্টেশন সহ সম্পূর্ণ) যা প্রয়োজন হিসাবে এবং যখন প্রয়োজন তখন পুনঃসংশ্লিষ্ট হওয়া প্রয়োজন।

রিফ্যাক্টরিংয়ের জন্য যুক্তিটি একই: আপনি যদি মনে করেন যে এটির সামগ্রিক সংগঠনটি একটি গোলমাল হয়ে পড়েছে এবং অবশেষে এটির অবনতি ঘটাতে দেবে (তবে এটি আমার পক্ষে কমপক্ষে) এটা)।

ক্যাভ্যাটগুলিও একই রকম: রিগ্রেশন টেস্টিং ব্যবহার করুন, রিফ্যাক্টরিংটি ভুল হলে আপনি সহজেই ফিরে যেতে পারবেন তা নিশ্চিত করুন এবং প্রথম জায়গায় রিফ্যাক্টরিংয়ের সুবিধার্থে নকশা তৈরি করুন (বা আপনি কেবল এটি করবেন না!)।

আমি সম্মত হয়েছি যে প্রত্যক্ষ কোডের রিফ্যাক্টরিংয়ের চেয়ে অনেক বেশি জটিল এবং ম্যানেজার / ক্লায়েন্টদের কাছ থেকে সময়টি বৈধ করা / আড়াল করা আরও কঠিন যে এটি কেন করা দরকার তা বুঝতে পারে না, তবে এগুলিও সেই ধরণের প্রকল্প যা সফ্টওয়্যার পচায় সবচেয়ে ঝুঁকিপূর্ণ pr অবিরাম শীর্ষ স্তরের ডিজাইনগুলির কারণে ...


0

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


0

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

  1. বিনামূল্যে ফাংশন
  2. সদস্য ফাংশন
  3. শ্রেণী
  4. উদ্দেশ্য
  5. ইন্টারফেস
  6. অভিব্যক্তি
  7. কনস্ট্রাক্টর কল / অবজেক্ট তৈরি করা
  8. ফাংশন কল
  9. টেমপ্লেট পরামিতি প্রকার

এই উপাদানগুলির সংমিশ্রণ এবং তাদের সীমানাগুলি স্বীকৃতি দিয়ে, আপনি সি ++ এর মধ্যে পছন্দসই যে কোনও প্রোগ্রামিং শৈলী তৈরি করতে পারেন।

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


-1

বৃহত্তম প্রযুক্তিগত চ্যালেঞ্জ নামস্থান সমস্যা। আংশিক লিঙ্কিং এর চারপাশে কাজ করতে ব্যবহার করা যেতে পারে। কোডিং মান ব্যবহার করে নকশা করা আরও ভাল পন্থা। অন্যথায় সমস্ত প্রতীক একটি জগাখিচুড়ি হয়ে যায়।


-2

ইমাকস এর একটি ভাল উদাহরণ:

Emacs আর্কিটেকচার

Emacs উপাদান

ইমাস লিস্প পরীক্ষা বৈশিষ্ট্য সনাক্তকরণ এবং পরীক্ষার ফিক্সচারগুলি ব্যবহার skip-unlesslet-bindকরতে:

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

 (ert-deftest test-dbus ()
   "A test that checks D-BUS functionality."
   (skip-unless (featurep 'dbusbind))
   ...)

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

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

যেমন এসকিউএলাইট। এটি এর নকশা:

  1. sqlite3_open () a নতুন বা বিদ্যমান SQLite ডাটাবেসের সাথে একটি সংযোগ খুলুন। বর্গক্ষেত্র 3 এর জন্য নির্মাতা।

  2. sqlite3 → ডাটাবেস সংযোগ অবজেক্ট। স্ক্লাইট 3_পেন () দ্বারা তৈরি এবং স্ক্লাইট 3_ক্লোজ () দ্বারা ধ্বংস করা।

  3. sqlite3_stmt statement প্রস্তুত বিবৃতি অবজেক্ট। Sqlite3_parepare () দ্বারা তৈরি এবং sqlite3_finalize () দ্বারা ধ্বংস করা হয়েছে।

  4. sqlite3_prepare () S এসকিউএল পাঠ্যটি বাইট-কোডে সংকলন করুন যা ডাটাবেস অনুসন্ধান বা আপডেট করার কাজ করবে। Sqlite3_stmt এর জন্য নির্মাতা।

  5. sqlite3_bind () application অ্যাপ্লিকেশন ডেটা মূল এসকিউএল এর পরামিতিগুলিতে সঞ্চয় করুন।

  6. sqlite3_step () next পরবর্তী ফলাফলের সারিতে বা সমাপ্তির জন্য একটি স্ক্লাইট 3_ স্টেমটি অগ্রসর করুন।

  7. sqlite3_column () s একটি ফলাফলের জন্য বর্তমান ফলাফলের সারিতে কলাম মান 3 একটি স্ক্লাইট 3_stmt।

  8. sqlite3_finalize () q sqlite3_stmt এর জন্য ডেস্ট্রাক্টর।

  9. sqlite3_exec () one এক বা একাধিক এসকিউএল স্টেটমেন্টের স্ট্রিংয়ের জন্য স্ক্লাইট 3_প্রেপার (), স্ক্লাইট 3_স্টেপ (), স্ক্লাইট 3_ক্লোনম () এবং স্ক্লাইট 3_ফাইনালাইজ () করে এমন একটি মোড়ক ফাংশন।

  10. sqlite3_close () q বর্গক্ষেত্রের জন্য ডেস্ট্রাক্টর।

sqlite3 আর্কিটেকচার

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

sqlite3 ভার্চুয়াল টেবিল

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

ভার্চুয়াল টেবিলটি ইন-মেমরি ডেটা স্ট্রাকচারের প্রতিনিধিত্ব করতে পারে। অথবা এটি ডিস্কে ডেটা এমন একটি দৃশ্য উপস্থাপন করতে পারে যা এসকিউএলাইট ফর্ম্যাটে নেই। অথবা অ্যাপ্লিকেশন চাহিদা অনুসারে ভার্চুয়াল টেবিলের সামগ্রী গণনা করতে পারে।

ভার্চুয়াল টেবিলগুলির জন্য এখানে কিছু বিদ্যমান এবং পোস্টুলেটেড ব্যবহার রয়েছে:

একটি সম্পূর্ণ পাঠ্য অনুসন্ধান ইন্টারফেস
আর-ট্রি ব্যবহার করে স্থানিক সূচকগুলি
কোনও এসকিউএল ডাটাবেস ফাইলের ডিস্ক বিষয়বস্তু (dbstat ভার্চুয়াল টেবিল) আত্মপুন
কমা-বিচ্ছিন্ন মান (সিএসভি) ফাইলের সামগ্রীটি পড়ুন এবং / অথবা লিখুন write
হোস্ট কম্পিউটারের ফাইল সিস্টেমটি অ্যাক্সেস করুন যেন এটি কোনও ডাটাবেস টেবিল were
আর এর মতো পরিসংখ্যান প্যাকেজে এসকিউএল ডেটা ম্যানিপুলেশন সক্ষম করে

এসকিউএলাইট সহ বিভিন্ন পরীক্ষার কৌশলগুলির ব্যবহার:

তিনটি স্বতন্ত্রভাবে পরীক্ষার জোতা বিকশিত
একটি স্থাপনা কনফিগারেশনে 100% শাখা পরীক্ষা কভারেজ
মিলিয়ন মিলিয়ন মিলিয়ন টেস্ট কেস
স্মৃতি বহির্ভূত পরীক্ষা
আই / ও ত্রুটি পরীক্ষা করে
ক্রাশ এবং শক্তি হ্রাস পরীক্ষা
ফজ পরীক্ষা
সীমানা মান পরীক্ষা
অক্ষম অপ্টিমাইজেশন পরীক্ষা
রিগ্রেশন টেস্ট
ত্রুটিযুক্ত ডাটাবেস পরীক্ষা
দাবী () এবং রান-টাইম চেকগুলির বিস্তৃত ব্যবহার
ভালগ্রাইন্ড বিশ্লেষণ
অপরিবর্তিত আচরণ চেক
checklists

তথ্যসূত্র

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