[৮.৩] প্রজেক্ট স্ট্রাকচার (Project structure)

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

আবারো, সবার আগে আমাদের যে বিষয়টি নিয়ে কাজ করতে হবে সেটি হচ্ছে ডিপেন্ডেনসি ম্যানেজমেন্ট। এর জন্য প্রজেক্ট ডিরেক্টরি তে ঢুকেই নিচের কমান্ডটি টার্মিনালে রান করতে হবে – 

				
					mkdir book-crud
    go mod init go-bootcamp
				
			

এর ফলে একটি go mod এবং go sum ফাইল তৈরি হবে যেখানে আমাদের প্রয়োজনীয় প্যাকেজগুলোর ট্র্যাক থাকবে। 

আমাদের থাকতে হবে একটা main.go ফাইল, যেখান থেকে শুরু টা হবে। 

এবারে সময় ফোল্ডার স্ট্রাকচারের, যার সব মিলিয়ে আমাদের ফাংশনালিটি গুলো ডেলিভার করবে। সহায়ক হিসেবে নিচের ছবিটা দেখা যাক, বাকি ব্যাখ্যা এর পরেই আসছে…

8.3 Project structure

pkg ফোল্ডারের ভেতরে আমাদের সকল ফোল্ডার থাকবে। প্রত্যেক ফোল্ডারের কোডের কাজ কি হবে তা নিচে হালকা ব্যাখ্যা দেয়া হলো : 

  1. Config : সকল এনভায়রনমেন্ট ভ্যারিয়েবল লোড করা হবে যাতে আমরা প্রজেক্টের যেকোনো জায়গা থেকে দরকারে সেগুলো ব্যবহার করতে পারি। 
  2. Connection : ডাটাবেসের সাথে কানেক্ট হওয়ার জন্য প্রয়োজনীয় কোড, সাথে কনফিগারেশন এবং মাইগ্রেশন ব্যবহার করে টেবিল তৈরি ও আপডেটের কাজ এখানে হবে। 
  3. Consts : পুনরাবৃত্তিমূলক মেসেজ গুলো এখানে রাখা হবে যাতে প্রয়োজনে বার বার পুরো মেসেজ না লিখতে হয়। 
  4. Containers : main.go থেকে এখানের serve.go ফাংশন টা কল করা হবে এবং এখানেই ডাটাবেস, ইন্টারফেস, Routes অর্থাৎ পুরো প্রজেক্ট রান করতে যা যা প্রয়োজন তা ইনিশিয়ালাইজ করা হবে। 
  5. Controllers : সকল প্রকার রিকোয়েস্ট Route অনুযায়ী এখানে ভিন্ন ভিন্ন ফাংশনে প্রসেস হবে, যেমন, কুয়েরি প্যারামিটার Read করা, রিকোয়েস্ট নিয়ে কাজ, ডাটা ভ্যালিডেশন সহ আরো অনেক কিছু এবং সকল রেসপন্স এখানেই উৎপন্ন হবে। 
  6. Domain : প্রজেক্টে ব্যবহৃত ইন্টারফেসগুলো এখানে থাকবে। 
  7. Models : ডাটাবেস টেবিলের স্কিমা এখানে থাকবে ।
  8. Repositories : সকল ধরণের ডাটাবেস অপারেশনের মেথড গুলো এখানে থাকবে। 
  9. Routes : সকল API এন্ডপয়েন্টগুলো এখানে থাকবে। অর্থাৎ ভিন্ন ভিন্ন ধরণের রিকোয়েস্ট গুলো কোন Path এ আসবে এবং সেগুলো কোন Controller ফাংশন সামলাবে তা এখানে ঠিক হবে। 
  10. Services : যে সার্ভিস ফাংশন গুলো ভিন্ন ভিন্ন প্রয়োজন অনুযায়ী Controller কে রেসপন্স তৈরি করে দিবে সেগুলো এখানে থাকবে। 
  11. Types : Models এ যে Struct থাকবে সেটা শুধুমাত্র ডাটাবেসের কাজের জন্য ব্যবহৃত হবে। অন্যান্য সকল ধরণের কাজ, যেমন, কাস্টম রেসপন্স/রিকোয়েস্ট ও ভ্যালিডেশনের জন্য যে Structগুলো প্রয়োজন, তা এখানে থাকবে। 

এই গেলো তাহলে আমাদের প্রজেক্ট স্ট্রাকচার। খুবই সাবধানতার সাথে আমরা বুঝে বুঝে ফোল্ডার স্ট্রাকচারটা বানাবো। যদি এর মধ্যে কোনোটায় বোঝার কোনো সমস্যা থাকে তাহলে ভাবনার কিছু নেই। পরবর্তীতে আমরা যখন উক্ত ফোল্ডারে কাজ করব তখন সব ক্লিয়ার হয়ে যাবে।