আমি সলিড ডিজাইনের নীতিগুলিতে বেশ নতুন । আমি তাদের কারণ এবং সুবিধাগুলি বুঝতে পারি, তবে তবুও আমি সেগুলিকে একটি ছোট প্রকল্পে প্রয়োগ করতে ব্যর্থ হই যা সলাইড নীতিগুলি ব্যবহারের জন্য একটি বাস্তব অনুশীলন হিসাবে আমি রিফ্যাক্টর করতে চাই act আমি জানি যে পুরোপুরি কার্যকর হয় এমন কোনও অ্যাপ্লিকেশন পরিবর্তন করার দরকার নেই, তবে আমি যাহাই হউক না কেন এটি রিফ্যাক্টর করতে চাই যাতে আমি ভবিষ্যতের প্রকল্পগুলির জন্য ডিজাইনের অভিজ্ঞতা অর্জন করি।
অ্যাপ্লিকেশনটিতে নিম্নলিখিত কাজটি রয়েছে (আসলে এর চেয়ে অনেক বেশি তবে আসুন এটি সহজ রাখুন): এটি একটি এক্সএমএল ফাইলটি পড়তে হবে যাতে ডেটাবেস টেবিল / কলাম / ভিউ ইত্যাদি সংজ্ঞা রয়েছে এবং একটি এসকিউএল ফাইল তৈরি করতে হবে যা তৈরির জন্য ব্যবহার করা যেতে পারে একটি ORACLE ডাটাবেস স্কিমা।
(দ্রষ্টব্য: কেন আমার এটি প্রয়োজন বা কেন আমি এক্সএসএলটি ব্যবহার করি না ইত্যাদি কারণগুলি নিয়ে আলোচনা থেকে বিরত থাকুন, কারণ রয়েছে তবে সেগুলি অফ-টপিক))
শুরু হিসাবে, আমি কেবল সারণী এবং সীমাবদ্ধতার দিকে নজর দেওয়া বেছে নিয়েছি। আপনি যদি কলামগুলি উপেক্ষা করেন তবে আপনি এটি নিম্নলিখিত উপায়ে বর্ণনা করতে পারেন:
সীমাবদ্ধতা একটি টেবিলের অংশ (বা আরও সুনির্দিষ্টভাবে, একটি তৈরি টেবিল বিবৃতি অংশ), এবং একটি সীমাবদ্ধতা অন্য সারণিকেও উল্লেখ করতে পারে।
প্রথমত, আমি এখনই অ্যাপ্লিকেশনটি কেমন দেখাচ্ছে তা ব্যাখ্যা করব (সোলিড প্রয়োগ না করে):
এই মুহুর্তে, অ্যাপ্লিকেশনটির একটি "টেবিল" শ্রেণি রয়েছে যা টেবিলের মালিকানাধীন সীমাবদ্ধতার দিকে নির্দেশকগুলির একটি তালিকা এবং এই সারণিকে উল্লেখ করে সীমাবদ্ধতার দিকে নির্দেশকের একটি তালিকা রয়েছে। যখনই কোনও সংযোগ স্থাপন করা হবে, পিছনের সংযোগটি পাশাপাশি স্থাপন করা হবে। সারণীতে একটি ক্রিয়েস্টেটমেন্ট () পদ্ধতি রয়েছে যা প্রতিটি প্রতিবন্ধকের ক্রিয়েস্টেটমেন্ট () ফাংশনটিকে কল করে। তাদের নামগুলি পুনরুদ্ধার করতে বলা পদ্ধতিটি নিজেরাই মালিকের টেবিল এবং রেফারেন্স টেবিলের সংযোগগুলি ব্যবহার করবে।
স্পষ্টতই, এটি মোটেও সলিডের জন্য প্রযোজ্য নয়। উদাহরণস্বরূপ, বিজ্ঞপ্তি নির্ভরতা রয়েছে, যা "অ্যাড" / "অপসারণ" পদ্ধতিগুলির প্রয়োজনীয়তা এবং কিছু বড় অবজেক্ট ডেস্ট্রাক্টরগুলির ক্ষেত্রে কোডটি স্ফূতিত করে।
সুতরাং প্রশ্ন দুটি আছে:
- Dependency Injection ব্যবহার করে বৃত্তাকার নির্ভরতাগুলি সমাধান করা উচিত? যদি তা হয়, তবে আমি মনে করি যে এই সীমাবদ্ধতার মালিক তার নির্মাণকারীর (এবং বিকল্পভাবে রেফারেন্সযুক্ত) সারণীটি গ্রহণ করবেন। তবে আমি কীভাবে একক টেবিলের জন্য সীমাবদ্ধতার তালিকার উপরে চলে যেতে পারি?
- যদি টেবিল শ্রেণি উভয়ই নিজের রাজ্য সংরক্ষণ করে (যেমন টেবিলের নাম, টেবিলের মন্তব্য ইত্যাদি) এবং সীমাবদ্ধতার লিঙ্কগুলি, তবে কি এই এক বা দুটি "দায়িত্ব", একক দায়িত্বের নীতিটির কথা চিন্তা করে?
- ক্ষেত্রে ২. যদি ঠিক হয় তবে লজিক্যাল বিজনেস লেয়ারে লিংকগুলি পরিচালনা করে আমি কি নতুন ক্লাস তৈরি করব? যদি তা হয় তবে, 1. অবশ্যই প্রাসঙ্গিক হবে না।
- "ক্রিয়েস্টেটমেন্ট" পদ্ধতিগুলি কি ছক / সীমাবদ্ধ শ্রেণির অংশ হওয়া উচিত বা আমিও সেগুলি সরিয়ে নিয়ে যেতে পারি? যদি তাই হয় তবে কোথায়? প্রতিটি ডেটা স্টোরেজ ক্লাসে একজন ম্যানেজার ক্লাস (যেমন টেবিল, সীমাবদ্ধ, ...)? অথবা বরং প্রতি লিঙ্কে একটি পরিচালক শ্রেণি তৈরি করুন (৩. এর মতো)?
যখনই আমি এই প্রশ্নের একটির উত্তর দেওয়ার চেষ্টা করি আমি নিজেকে কোথাও কোথাও চেনাশোনাগুলিতে দৌড়াতে দেখি।
সমস্যাটি স্পষ্টতই আরও জটিল হয়ে ওঠে যদি আপনি কলাম, সূচকগুলি এবং আরও কিছু অন্তর্ভুক্ত করেন তবে আপনি যদি আমাকে সাধারণ টেবিল / সীমাবদ্ধ জিনিস দিয়ে আমাকে সাহায্য করেন তবে আমি সম্ভবত আমার নিজের থেকে বাকি কাজগুলি করতে পারি।