আমার অ্যাপ্লিকেশনটি মোতায়েনের জন্য আমি কীভাবে পঠনযোগ্য ডেটা সঞ্চয় করব?


17

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

ব্যবহারকারী সহজেই এই তথ্যটি পরিবর্তন করতে না পারলে এটি আরও ভাল (ধারণা করুন যে তাদের কাছে আইটি জ্ঞান নেই)।

আমার এই ধরণের তথ্য কীভাবে সংরক্ষণ করা উচিত? একটি স্থানীয় ডাটাবেস? এক্সএমএল যে আবেদন সঙ্গে প্রেরণ করা হয়?

আমি ডাব্লুপিএফ ব্যবহার করছি।


2
এটি কোনও মেটা নয়। মেটা হ'ল এমন একটি সাইট যা মূল সাইটগুলি নিয়ে প্রশ্ন জিজ্ঞাসা করা হয় সে সম্পর্কে সমস্যা বা উদ্বেগ নিয়ে আলোচনা করে।
jpmc26

1
আপনি কেন ব্যবহারকারীদের তথ্য পরিবর্তন করতে চান না? এটি কি সুরক্ষা উদ্বেগ নাকি? এই তথ্যটি কি ব্যবহারকারীর কাছ থেকে গোপন রাখা হবে? উত্তরগুলি উপযুক্ত কি কারণে কারণগুলি ব্যাপকভাবে পরিবর্তন করতে পারে।
jpmc26

1
@ jpmc26 ওয়েল, এটা ধরনের একটি নিরাপত্তা উদ্বেগ, কিন্তু এটি একটি বড় চুক্তি না। আবেদন প্রধান উদ্দেশ্য একটি তাপমাত্রা নিয়ন্ত্রক (যেমন সঙ্গে একটি সিরিয়াল পোর্টের মাধ্যমে যোগাযোগ করতে হয় এই এক), এবং XML নিয়ন্ত্রকের মেমরি অ্যাড্রেস সম্পর্কে কিছু তথ্য সংরক্ষণ করবে। যদি ব্যবহারকারী এটি পরিবর্তন করে তবে এটি কার্যকর করার সময় সমস্যা তৈরি করতে পারে তাই আমি এড়াতে চাই। তবে এটি কেবল একটি উদ্বেগ, যেমনটি আমি বলেছিলাম, এটি কোনও বড় বিষয় নয়। PS: SE এর জন্য মেটা প্রতিস্থাপন করতে প্রশ্ন সম্পাদনা করেছে । ধন্যবাদ।
এপা ইয়িপ ইপ

2
আপনি যদি কোনও স্থানীয় ডাটাবেস চান তবে এসকিউএলাইটটি একবার দেখুন। (তবে যদি ডেটা শুরুতে র‍্যামে লোড করার মতো পরিমাণে ছোট থাকে তবে আমি
জাসন

1
"যদি ব্যবহারকারী এটি পরিবর্তন করে তবে মৃত্যুদন্ড কার্যকর করার সময় সমস্যা হতে পারে, তাই আমি এড়াতে চাই" " মোটেই সুরক্ষা উদ্বেগের মতো শোনাচ্ছে না। একটি সুরক্ষার উদ্বেগ হ'ল ফাইলটিতে আপনার পাসফ্রেজ বা অনুরূপ। এক্সিকিউটেবলের পাশে একটি এক্সএমএল ফাইলে কেবল সেটিংসটি রেখে দিন এবং শীর্ষে একটি মন্তব্য করুন যা "এই ফাইলের সেটিংসগুলিকে স্পর্শ করবেন না !!"! যদি আপনার ইনস্টল ডিরেক্টরিতে ব্যবহারকারীর এলোমেলো ফাইলগুলি সম্পাদনা করা হয় তবে তারা যাই হোক না কেন তার বিরক্তি প্রাপ্য।
রজার লিপসক্বে

উত্তর:


14

একটি বাইনারি ফাইল হ'ল সুস্পষ্ট উত্তর, তবে এটি আপনি কীভাবে লোড করছেন তার উপর নির্ভর করে - আপনি যদি পারেন তবে আপনার পক্ষে জীবনকে সহজ করে তুলতে পারে।

এটি পড়ার জন্য সি # তে পদ্ধতিতে নির্মিত হওয়ায় এক্সএমএল একটি ভাল পছন্দ হতে পারে। আপনি আপনার ডেটাতে একটি চেকসাম যুক্ত করতে পারেন , যাতে ব্যবহারকারী এটি পরিবর্তন করে দেয় তবে চেকসাম আর মিলবে না (চেকসামটি বৈধ কিনা তা নিশ্চিত করার জন্য আপনাকে একটি চেক যোগ করতে হবে)

একটি স্থানীয় ডিবি আরও সমস্যা তৈরি করতে পারে কারণ আপনার অন্যান্য নির্ভরতা রয়েছে যা আপনার অ্যাক্সেস করতে সক্ষম হতে হবে


আমি চেকসাম সম্পর্কে ভাবি নি, এটি একটি দুর্দান্ত ধারণা। তাই আমি একটি চেকসাম উত্পন্ন করি এবং এটি আমার অ্যাপ্লিকেশনটিতে সঞ্চয় করি, তাই যতবারই আমি এক্সএমএলকে আনসিরিয়্যাল করি, আমি একটি নতুন চেকসাম উত্পন্ন করি এবং এটি প্রথমটির সাথে তুলনা করি?
এপা ইয়াপ ইপ

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

4
ফাইল বা স্থানীয় ডিবি পরিবর্তে সমাবেশে এম্বেড করা রিসোর্স ফাইলটি আরও ভাল। শেষ ব্যবহারকারী থেকে লুকানো, বিকাশকারী দ্বারা সহজেই পরিচালনাযোগ্য এখনও পাওয়ার-ব্যবহারকারী বান্ধব। পারফরম্যান্স যদি উদ্বেগের বিষয় হয় তবে বাইনারি সিরিয়ালাইজেশন উচ্চতর হবে।
PTwr

@ এসজুয়ান 7676 হ্যাঁ, এক্সএমএলে হ্যাশের সমস্যা হ'ল কেউ যদি এটি অনিয়ন্ত্রিত করে তবে এটি পরিবর্তন করা যেতে পারে। যাইহোক, যদি এক্সএমএল পরিবর্তন হয় (যা আমি মনে করি এটি ঘটবে না, তবে কে জানে) এটি কেবল অ্যাপের নতুন সংস্করণে পরিবর্তিত হবে, সুতরাং অনুমান করুন যে আমি কোডটিতে হ্যাশটি আটকে দেব।
আপ্পা ইপ ইপ

2
@ এসএসএমএডেক: রিসোর্স ফাইলগুলি কার্যকরভাবে এক্সিকিউটেবল বাইনারি-র ভিতরে ফাইল। আইকন এবং স্ট্রিং এবং আপনার প্রোগ্রামের যে কোনও ধ্রুবক ডেটা প্রয়োজন।
23

21

যদি ডেটা কখনই পরিবর্তন হয় না এবং কেবল পঠিত হয় তবে কেবল ধ্রুবকের তালিকা হিসাবে একটি কোড ফাইলে এটি রাখুন।

public readonly string AppStartUpData = "MyAppNeedsThis";

যদি এই ডেটা প্রতি ডিপ্লয়মেন্টে আলাদা হয় তবে একটি বাহ্যিক ফাইল ঠিক আছে।

। নেট বিল্ট ইন .কনফিগ ফাইলগুলি (অ্যাপ। কনফিগ) সহ আসে। সেগুলির তথ্য পড়ার জন্য স্ট্যান্ডার্ড উপায়গুলি (ফ্রেমওয়ার্কে অন্তর্নির্মিত) যেমন ব্যবহার করা উচিত One

কনফিগারেশন ফাইলগুলি ব্যবহার করুন যদি কোনও সেটিংটি পরিবর্তনের প্রয়োজন হয় (কখনই কখনই বলবেন না) কারণ সেগুলি কেবল টেক্সট ফাইল (এক্সএমএল)। সংবেদনশীল তথ্য থাকলে প্রয়োজনে যে কোনও সেটিং এনক্রিপ্ট করতে পারে।


আমি কনস্ট্যান্ট / রিডোনলিগুলি সম্পর্কে ভেবেছিলাম, সমস্যাটি হ'ল প্রচুর ডেটা রয়েছে, তাই আমার ধারণা আমি বাহ্যিক ফাইলটি অনুসরণ করব। ধন্যবাদ!
এপা ইয়াপ ইপ

5
@ শচমেডেক ... তাই? আপনি এই সংজ্ঞাগুলি একটি পৃথক ফাইলে রাখতে পারেন এবং সেটিকে আমদানি করতে পারেন। প্রকৃতপক্ষে আমি বিশ্বাস করি ফর্ম এবং স্টাফগুলি সংকলন করার সময় কিউটি এই ধরণের কাজ করে যাতে আপনি স্বয়ংক্রিয়ভাবে উত্পন্ন ফাইলগুলির সাথে শেষ হন যা কিছু মেগাবাইটে বাইনারি ডেটা (যেমন চিত্রগুলি) থাকে তবে এটি কোনও পৃথক ফাইলে থাকলে এর সাথে কোনও ভুল নেই ।
বাকুরিউ

15

আপনি সর্বদা আপনার প্রকল্পে একটি ফাইল যুক্ত করতে পারেন এবং এর বিল্ড প্রকারটি সেট করতে Embedded Resourceপারেন যাতে এটি সরাসরি অ্যাপ্লিকেশনটিতে এম্বেড থাকে।

বিকল্পভাবে এমন একটি ফাইল যা এনক্রিপ্ট করা এবং অ্যাক্সেসযোগ্য স্থানে স্থাপন করা হয়।


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

5

আপনি যদি না চান যে ব্যবহারকারী এমনকি ডেটাটিও দেখুন, আপনার এটি বাইনারি ডেটা ফাইলে সিরিয়ালাইজ করা উচিত।

কেবলমাত্র অ্যাপ্লিকেশনটি এ থেকে পড়ার খণ্ডগুলির দৈর্ঘ্য জানতে পারে।

আমি সি # জানি না তবে জাভাতে আপনি এই ফাইলটি তৈরি করবেন:

FileOutputStream fos = new FileOutputStream(file);      
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(var1);
oos.writeObject(var2);
oos.writeObject(var3);
oos.writeObject(var4);

... এবং তারা এটি পড়েন:

FileInputStream fis = new FileInputStream(file);
ObjectInputStream ois = new ObjectInputStream(fis);
Object o[] = new Object[4];
o[0] = ois.readObject();
o[1] = ois.readObject();
o[2] = ois.readObject();
o[3] = ois.readObject();

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