যদি "রিসোর্স ম্যানেজার" ক্লাসগুলি খারাপ হিসাবে বিবেচিত হয়, তবে বিকল্পগুলি কী?


19

আমি মতবিরোধী মতামত শুনছি:

  • "ডেডিকেটেড ম্যানেজার ক্লাসগুলি প্রায়শই সঠিক প্রকৌশল সরঞ্জাম নয়"
  • "ডেডিকেটেড ম্যানেজার ক্লাসগুলি হাজার হাজার সংস্থান সহ একটি বৃহত প্রকল্পের বেঁচে থাকার সেরা উপায় (বর্তমানে)"

আসুন একটি ক্লাসিক রিসোর্স ম্যানেজার ক্লাস নেওয়া যাক যেখানে নিম্নলিখিত কার্যকারিতা রয়েছে:

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

এর জন্যও টেবিল বন্ধ যুক্তি "singletons খারাপ" যাক এই ResourceManager বস্তু হওয়ার ভান করে singletons নয়, এবং পরিবর্তে মাধ্যমে প্রায় গৃহীত হয় নির্ভরতা ইনজেকশন

তারপরে "কারখানাটি ব্যবহার করুন" বা "এটিকে একটি কারখানা বলুন" যুক্তি রয়েছে। এর সাথে আমার সমস্যা হ'ল, এটি একটি কারখানা, তবে এটি একটি ক্যাশে এবং পুনরায় লোডারও (আরও ভাল শব্দের অভাবে)। এটিকে ফ্যাক্টরি বলা এটি সঠিকভাবে বর্ণনা করে না, এবং আমি যদি এটি একটি যথাযথ কারখানা করি তবে ক্যাশিং এবং পুনরায় লোডিং কোথায় কার্যকর হবে?

আমি সম্মত হই যে "ম্যানেজার" ক্লাসগুলি প্রায়শই খারাপ আর্কিটেকচারের লক্ষণ হয় তবে এই বিশেষ ক্ষেত্রে এটি পুনর্গঠন করা যায় এবং এখনও সমস্ত কার্যকারিতা ধরে রাখতে পারে ? এটি কি এমন পরিস্থিতি যেখানে "ম্যানেজার" শ্রেণিটি আসলে উপযুক্ত?


3
কারখানার পরিবর্তে এটিকে গুদাম বলবেন? : পি
ডিসলেরেটকাভিয়ার

উত্তর:


9

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

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

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

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

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


AssetLoader / AssetCache বিচ্ছেদ কোনও খারাপ ধারণা নয়।
টম ডালিং

4

"আমি কি এক জায়গায় এটি করি, বা আমি এটি অনেকগুলি করি?"

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

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

সবশেষে, কয়েকটি বিষয় বিবেচনা করতে হবে:

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

কোনও বস্তুর নিজস্ব সৃষ্টি এবং ধ্বংসের জন্য দায়বদ্ধ হওয়া উচিত ? এটি সত্তা পরিচালনার সময় প্রধান মাথাব্যাথা তৈরি করতে পারে। আপনি যদি কোনও বস্তুর নিজস্ব নির্মাণ প্রক্রিয়া সম্পাদন করার আশা করেন (সংস্থান নির্ভরতা সহ) তবে একইভাবে এটির নিজেরাই ধ্বংস করার দায়িত্ব থাকবে। এটি ঝোলা / নাল পয়েন্টারগুলির কারণ হতে পারে, সুতরাং সত্যই এটি বাইরে থেকে পরিচালনা করতে হবে। দেখুন এই উত্তর আরো বিস্তারিত যে সমস্যা outlining।


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

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