আপনার বিশেষ্যগুলি, ক্রিয়াগুলি, বিশেষণগুলি লেখার পক্ষে একটি দুর্দান্ত পদ্ধতি, তবে আমি কোন ডেটা লুকিয়ে রাখতে হবে এমন প্রশ্ন জিজ্ঞাসা করে ক্লাস ডিজাইনের কথা ভাবতে পছন্দ করি ?
কল্পনা করুন যে আপনার একটি Query
বস্তু এবং একটি Database
বস্তু রয়েছে:
Query
অবজেক্ট আপনার তৈরি সাহায্য এবং একটি ক্যোয়ারী সংরক্ষণ করবে - দোকান, কী এখানে, যেমন একটি ফাংশন সাহায্য করতে পারে আপনি এক ঠিক যেমন সহজে তৈরি হয়। হতে পারে আপনি থাকতে পারে: Query().select('Country').from_table('User').where('Country == "Brazil"')
। সিনট্যাক্সে ঠিক তেমন কিছু যায় আসে না - এটাই আপনার কাজ! - কীটি হ'ল অবজেক্টটি আপনাকে কোনও কিছু আড়াল করতে সহায়তা করছে , এক্ষেত্রে কোনও ক্যোয়ারী সংরক্ষণ এবং আউটপুট দেওয়ার জন্য প্রয়োজনীয় ডেটা। বস্তুটির শক্তি এটি ব্যবহারের সিনট্যাক্স থেকে আসে (এক্ষেত্রে কিছু চতুর শৃঙ্খলিত) এবং এটি কাজ করার জন্য এটি কী সঞ্চয় করে তা জানার দরকার নেই। ডান হয়ে গেলে Query
অবজেক্টটি আরও একটি ডাটাবেসের অনুসন্ধান করতে পারে। এটি অভ্যন্তরীণভাবে একটি নির্দিষ্ট বিন্যাস সংরক্ষণ করবে তবে আউটপুট দেওয়ার সময় সহজেই অন্যান্য ফর্ম্যাটগুলিতে রূপান্তর করতে পারে (পোস্টগ্রিস, মাইএসকিউএল, মঙ্গোডিবি)।
এখন আসুন Database
বস্তুর মাধ্যমে চিন্তা করা যাক । এটি কী লুকায় এবং সঞ্চয় করে? পরিষ্কারভাবে এটি ডাটাবেসের পুরো বিষয়বস্তু সংরক্ষণ করতে পারে না, যে কারণে আমাদের একটি ডাটাবেস রয়েছে! তাহলে কথাটা কী? লক্ষ্যটি হ'ল লুকিয়ে রাখা কীভাবে সেই Database
বস্তুটি ব্যবহার করে এমন লোকদের কাছ থেকে ডাটাবেস কীভাবে কাজ করে । অভ্যন্তরীণ স্থিতি পরিচালনা করার সময় ভাল ক্লাসগুলি যুক্তি সহজ করে তুলবে। এই Database
বস্তুর জন্য আপনি কীভাবে নেটওয়ার্কিং কলগুলি কাজ করতে পারে তা বা ব্যাচের কোয়েরি বা আপডেটগুলি বা ক্যাশে স্তর সরবরাহ করতে পারে hide
সমস্যাটি হ'ল এই Database
অবজেক্টটি বিশাল। এটি উপাত্ত কীভাবে অ্যাক্সেস করবেন তা উপস্থাপন করে, তাই কভারগুলির আওতায় এটি কিছু এবং সবকিছু করতে পারে। স্পষ্টতই নেটওয়ার্কিং, ক্যাশিং এবং ব্যাচিং আপনার সিস্টেমের উপর নির্ভর করে মোকাবেলা করা বেশ কঠিন, তাই এগুলি লুকিয়ে রাখা খুব সহায়ক। তবে, যেহেতু অনেকেই খেয়াল করবেন, একটি ডাটাবেস অত্যন্ত জটিল, এবং কাঁচা ডিবি থেকে আপনি যে কল পাবেন, পারফর্মেন্সের জন্য টিউন করা এবং জিনিসগুলি কীভাবে কাজ করে তা বোঝা তত বেশি কঠিন।
এটি ওওপির মৌলিক বাণিজ্য off আপনি যদি সঠিক বিমূর্তিটি চয়ন করেন তবে কোডিংটিকে সহজ করে তোলে (স্ট্রিং, অ্যারে, অভিধান), আপনি যদি খুব বড় একটি বিমূর্ততা বেছে নেন (ডাটাবেস, ইমেল ম্যানেজার, নেটওয়ার্কিং ম্যানেজার), এটি কীভাবে কাজ করে তা বুঝতে খুব জটিল হয়ে উঠতে পারে, বা কীভাবে আশা। লক্ষ্যটি জটিলতা আড়াল করা , তবে কিছু জটিলতা প্রয়োজন। থাম্বের একটি ভাল নিয়ম হল Manager
অবজেক্টগুলি এড়ানো শুরু করা , এবং পরিবর্তে এর মতো শ্রেণি তৈরি করা structs
- তারা যা করে তা ডেটা রাখা, আপনার জীবনকে সহজ করার জন্য ডেটা তৈরি / পরিচালনা করার জন্য কিছু সহায়ক পদ্ধতির সাহায্যে। উদাহরণস্বরূপ, EmailManager
কোনও ফাংশন দিয়ে শুরু করার ক্ষেত্রে sendEmail
যা কোনও Email
অবজেক্ট নেয় । এটি একটি সহজ সূচনা পয়েন্ট এবং কোডটি বোঝা খুব সহজ।
আপনার উদাহরণ হিসাবে, আপনি কী অনুসন্ধান করছেন তা গণনা করতে কোন ডেটা একসাথে হওয়া দরকার তা ভেবে দেখুন। যদি আপনি জানতে চান যে কোনও প্রাণী কতদূর হাঁটছে, উদাহরণস্বরূপ, আপনি AnimalStep
এবং AnimalTrip
(অ্যানিমাল স্টেপস সংগ্রহ) ক্লাস করতে পারেন। এখন যেহেতু প্রতিটি ট্রিপে সমস্ত ধাপের ডেটা রয়েছে, তারপরে এটি সম্পর্কে স্টাফ তৈরি করতে সক্ষম হওয়া উচিত, সম্ভবত এটি AnimalTrip.calculateDistance()
বোধগম্য।