আমি যদি আরও কোড লিখতে থাকি তবে এমন একটি সময় আসবে যখন কোডটি সংগঠিত করা আমার পক্ষে কঠিন হবে।
এটি আপনার সমস্যা: সংস্থাকে সঠিকভাবে পান এবং শৈলীটি আরও সহজে প্রবাহিত হওয়া উচিত।
আপনার কোডটি সংগঠিত করার জন্য অপেক্ষা করবেন না : আপনার কোডটি আপনার যেতে যেতে সংগঠিত রাখুন। যদিও ভাষাটি এটি আপনার জন্য না করে, কোডটি এখনও কম সংযুক্তি এবং উচ্চ সংহতি সহ মডিউলগুলিতে व्यवस्थित করা উচিত।
এই মডিউলগুলি পরে স্বাভাবিকভাবে একটি নাম স্থান সরবরাহ করে। সংঘর্ষ এড়াতে মডিউলটির নাম (যদি এটি দীর্ঘ হয়) এবং উপস্থাপিত ফাংশন নামগুলি তাদের মডিউলটির সাথে সংযুক্ত করে।
স্বতন্ত্র সনাক্তকারীদের পর্যায়ে এগুলি মোটামুটি সাবজেক্টিভিটির ক্রমবর্ধমান ক্রম:
- একটি সম্মেলন বাছাই এবং এটি দিয়ে লাঠি
- যেমন,
function_like_this(struct TypeLikeThis variable)
সাধারণ
অবশ্যই হাঙ্গেরীয় স্বরলিপি এড়ানো (দুঃখিত জেএনএল)
যদি না আপনি এটিকে মূল উদ্দেশ্য হিসাবে ব্যবহার করতে ইচ্ছুক হন, যার অর্থ ভয়ঙ্কর সিস্টেমগুলির সংস্করণের চেয়ে সিমোনির অ্যাপস সংকেত
কেন? আমি এই সম্পর্কে একটি রচনা লিখতে পারে, তবে আমি পরিবর্তে আপনাকে জোয়েল স্পলস্কির এই নিবন্ধটি পড়ার পরামর্শ দিচ্ছি এবং আপনার আগ্রহী হলে আরও কিছু খোঁজাখুঁজি করব। নীচে সিমোনির মূল কাগজের সাথে একটি লিঙ্ক রয়েছে।
পয়েন্টার টাইপএফগুলি এড়িয়ে চলুন যতক্ষণ না তারা সত্যিকারেরভাবে অস্বচ্ছ কুকি ধরণের হয় - তারা কেবল জিনিসগুলিকেই বিভ্রান্ত করে
struct Type *ok;
typedef struct Type *TypePtr;
TypePtr yuck;
অস্বচ্ছ কুকি ধরণের দ্বারা আমি কী বুঝি ? আমি বলতে চাইছি মডিউল (বা গ্রন্থাগার, বা যা কিছু) এর অভ্যন্তরে এমন কিছু ব্যবহার করা হয়েছে যা ক্লায়েন্ট কোডে পাস করতে হবে, তবে সেই ক্লায়েন্ট কোডটি সরাসরি ব্যবহার করতে পারে না । এটি কেবল এটি লাইব্রেরিতে ফিরিয়ে দেয়।
উদাহরণস্বরূপ, একটি ডাটাবেস লাইব্রেরি মত একটি ইন্টারফেস এক্সপোজ হতে পারে
/* Lots of buffering, IPC and metadata magic held in here.
No, you don't get to look inside. */
struct DBContextT;
/* In fact, you only ever get a pointer, so let's give it a nice name */
typedef struct DBContexT *DBContext;
DBContext db_allocate_context(/*maybe some optional flags?*/);
void db_release_context(DBContext);
int db_connect(DBContext, const char *connect);
int db_disconnect(DBContext);
int db_execute(DBContext, const char *sql);
এখন, প্রসঙ্গটি ক্লায়েন্ট কোডের কাছে অস্বচ্ছ , কারণ আপনি ভিতরে দেখতে পারেন না। আপনি কেবল এটি লাইব্রেরিতে ফিরিয়ে দিন। এর মতো কিছু FILE
হ'ল অস্বচ্ছ, এবং একটি পূর্ণসংখ্যার ফাইল বর্ণনাকারীও একটি কুকি , তবে অস্বচ্ছ নয়।
নকশায় একটি নোট
আমি ব্যাখ্যা ছাড়াই উপরে কম সংযুক্তি এবং উচ্চ সংহতি বাক্যাংশটি ব্যবহার করেছি এবং এ সম্পর্কে আমি কিছুটা খারাপ অনুভব করছি। আপনি এটি অনুসন্ধান করতে পারেন, এবং সম্ভবত কিছু ভাল ফলাফল খুঁজে পেতে পারেন, তবে আমি এটি সংক্ষেপে সম্বোধন করার চেষ্টা করব (আবার, আমি একটি রচনা লিখতে পারলাম তবে চেষ্টা করব না)।
উপরের স্কেচ করা ডিবি লাইব্রেরিটি কম সংযোগ দেখায় কারণ এটি বাইরের বিশ্বে একটি ছোট ইন্টারফেস প্রকাশ করে। এর বাস্তবায়নের বিশদগুলি আংশিকভাবে আংশিকভাবে অস্বচ্ছ কুকি কৌশলটি গোপন করে, ক্লায়েন্ট কোডগুলি সেই বিবরণগুলির উপর নির্ভর করতে আসতে বাধা দেয়।
অস্বচ্ছ কুকির পরিবর্তে কল্পনা করুন, আমরা প্রসঙ্গ কাঠামো ঘোষণা করি যাতে এর বিষয়বস্তু দৃশ্যমান হয় এবং এতে ডাটাবেসের সাথে টিসিপি সংযোগের জন্য সকেট ফাইল বর্ণনাকারী অন্তর্ভুক্ত থাকে। যদি আমরা পরে ডিবি একই মেশিনে চলতে থাকে তখন ভাগ করা মেমরি বিভাগ ব্যবহার করে সমর্থন বাস্তবায়নে পরিবর্তন করি তবে ক্লায়েন্টকে কেবল পুনরায় সংযুক্ত করার পরিবর্তে পুনরায় সংকলন করা দরকার। আরও খারাপ, ক্লায়েন্ট ফাইল বর্ণনাকারী ব্যবহার শুরু করতে পারে , উদাহরণস্বরূপ setsockopt
ডিফল্ট বাফার আকার পরিবর্তন করার জন্য কল করা, এবং এখন এটির জন্য একটি কোড পরিবর্তনও দরকার। এই সমস্ত বিবরণটি আমাদের মডিউলটির ভিতরে লুকানো উচিত যেখানে ব্যবহারিক এবং এটি মডিউলগুলির মধ্যে কম সংযোগ দেয় ।
উদাহরণটি উচ্চ সংহতিও দেখায় , মডিউলের সমস্ত পদ্ধতি একই কাজ (ডিবি অ্যাক্সেস) এর সাথে সম্পর্কিত। এর অর্থ এই যে শুধুমাত্র কোডটি চাহিদা বাস্তবায়ন বিবরণ সম্পর্কে জানতে (যে, আমাদের কুকির বিষয়বস্তু) প্রকৃতপক্ষে সেগুলির অ্যাক্সেস দেওয়া, যা ডিবাগ সহজসাধ্য।
আপনি আরও দেখতে পারেন যে একক উদ্বেগ থাকার কারণে এই ফাংশনগুলিকে একসাথে ভাগ করে নেওয়ার জন্য উপসর্গটি বেছে নেওয়া সহজ হয়েছিল।
এখন, এই উদাহরণটি ভাল বলা সহজ (বিশেষত এটি সম্পূর্ণ না হলেও) তবে অবিলম্বে আপনাকে সহায়তা করে না। কৌশলটি হ'ল আপনার কোডটি লেখার সময় এবং প্রসারিত করার সাথে সাথে একই কাজ করে বা একই ধরণের (যা তাদের নিজস্ব মডিউলের জন্য প্রার্থী হতে পারে) কাজ করে এমন ফাংশনগুলির জন্য, এবং এমন অনেকগুলি পৃথক কাজ করে যা ফাংশনগুলি না করে ' টি সত্যিই সম্পর্কিত নয়, এবং বিভাজনের জন্য প্রার্থী হতে পারে।