উত্তর:
আপনি যদি এমন কোনও ভাষায় কাজ করে যা এটি সমর্থন করে তবে আমি একটি সংরক্ষণ পদ্ধতি সরবরাহ করব যা একটি স্ট্রিম গ্রহণ করে। এইভাবে, ব্যবহারকারী যেভাবে বা সে ইচ্ছা ডেটা সংরক্ষণ করতে পারে।
এটি কেবলমাত্র একটি ফাইলে সংরক্ষণের চেয়ে লেখার জন্য 20 সেকেন্ড বেশি সময় নেয়, তবে এটি কোনও প্রোগ্রামার দ্বারা সহজেই বোঝা যায়, এবং কলিং সাইটে এটি আসলে কী ঘটে তা খুব স্পষ্ট clear
আপনি যেভাবে এটি বর্ণনা করেছেন (কোনও বস্তু যা ইনপুট পড়ে এবং অন্য কোনও ফাইলে আউটপুট দেয়) অন্যথায় অদ্ভুত বলে মনে হয়। নির্মাণের সময় সমস্ত কিছু করে এমন একটি বস্তু তৈরির উদ্দেশ্য কী?
আপনি কি এভাবে ডাকবেন?
var stuff = DoStuff();
new SaveFileWeirdClass(stuff);
return;
SaveFileWeirdClass এর যেকোন যুক্তিসঙ্গত বাস্তবায়নের জন্য আমি কেবল এটি তৈরির ফলে কোনও পার্শ্ব প্রতিক্রিয়া আশা করব না। একটি ফাইল পড়া - ঠিক আছে। একটি ফাইল তৈরি করছেন? না।
আমার কাছে এটি এইভাবে পরিষ্কার মনে হয়:
var stuff = new StuffReader(); //Better name needed...
string filePath = this.whatever;
using(Stream stream = new FileStream(filePath))
stuff.Save(stream);
আপনি যদি এটি ক্লাসে করার বিষয়ে বেঁকে থাকেন তবে শুরু করার সময় এটি তৈরি করুন। এই পদক্ষেপটি বিলম্বিত করাই দুটি খারাপ কাজ করে: প্রথমত, এটি কলারের জন্য একটি অতিরিক্ত, স্পষ্ট পদক্ষেপ যুক্ত করে, যারা আউটপুট উত্পাদন করার জন্য এটি ব্যবহার না করার ইচ্ছা না করে প্রথমে বস্তুটি তৈরি করতে পারত না। দ্বিতীয়ত, এটি কমপক্ষে দুটি পয়েন্ট যুক্ত করে যেখানে ক্লাসের কোডটি ফাইলটি খোলা আছে কিনা সে সম্পর্কে সিদ্ধান্ত নিতে হবে এবং সেই শর্তটি পরিচালনা করবে: একবার আপনি আউটপুট লিখতে যান এবং ধ্বংসের সময় একবার আপনি এটি বন্ধ করতে গেলে। পূর্বের অর্থ হ'ল প্রতিটি লেখার সময় আপনাকে সেই চেকটি করতে হবে, যদি আপনি সেগুলি প্রচুর পরিমাণে করছেন তবে তা অপব্যয় হতে পারে।
ব্যক্তিগতভাবে, আমি উভয়ই করবো না এবং কলার পাসটি প্রি-ওপেন করা ফাইলটি কনস্ট্রাক্টরের কাছে হ্যান্ডলগুলি করার বিকল্প হিসাবে বেছে নেব। ক্লাসের মধ্যে ফাইল তৈরি করা কলারদের অনুমতি নির্ধারণ বা ডিভাইসে লিখতে থাকলে, ডিভাইস-নির্দিষ্ট সূচনাকরণের মতো কাজ করার বিকল্পগুলি দেয় prec আপনি যদি আপনার FooConverter
ক্লাসের এমন কোনও সংস্করণ রাখতে চান যা ফাইলগুলিতে কাজ করে এবং সৃষ্টি গ্রান্ট কাজ করে তবে এটিকে মোড়কে FooFileConverter
।
স্পষ্টভাবে।
আপনি নিশ্চিত করতে চান যে আপনি চতুর পার্শ্ব প্রতিক্রিয়া নিয়মের উপর নির্ভর করেন না যা ভবিষ্যতে প্রকাশে বা অস্বাভাবিক স্থাপত্যগুলিতে ভঙ্গ হতে পারে। অবশ্যই, আপনার একটি ডিফল্ট ফাইল থাকা উচিত যা ব্যবহারকারীরা তাদের চয়ন করা উচিত ওভাররাইট করতে পারে।
একটি সুস্পষ্ট পদ্ধতির জন্য অন্যান্য যুক্তিগুলির পাশাপাশি: আপনি যদি কনস্ট্রাক্টরে কাজটি করেন তবে আপনি আপনার শ্রেণির প্রত্যেক ব্যবহারকারীকে কেবল অবজেক্ট তৈরির জন্য ব্যতিক্রম হ্যান্ডলিং করতে বাধ্য করেন। এটি প্রচুর বয়লারপ্লেট কোডের দিকে নিয়ে যেতে পারে।
তার চারপাশের আলোচনার জন্য /programming/6086334/is-it-good-p ੈਕਟ- to- make- the- constructor- throw- an- exception দেখুন ।