অ্যাপ্লিকেশন সেটিংস সংরক্ষণের সেরা উপায়


17

উইন্ডোজ ডিফল্ট উপায় রেজিস্ট্রি হয়। এটি আপনাকে সিস্টেম-ব্যাপী এবং প্রতি ব্যবহারকারী সেটিংসে পার্থক্য করতে দেয়।

ইউনিক্সে আপনাকে সিস্টেম-ওয়াইড সেটিংসের জন্য / ইত্যাদি ফোল্ডারে পাঠ্য ফাইলগুলি ব্যবহার করা উচিত (প্রতি ব্যবহারকারী সেটিংসের জন্য কনভেনশন কী?)

অনেকগুলি নতুন প্রোগ্রাম (এবং বিশেষত পোর্টেবল হওয়ার জন্য তৈরি করা) এক্সএমএল ফাইল ব্যবহার করে।

  • নন-ব্লব সেটিংস সঞ্চয় করার সর্বোত্তম উপায় (এবং অবস্থান) কোনটি?
  • আমাদের কি প্রতিটি সিস্টেম ডিফল্ট অনুসরণ করা উচিত বা একটি ইউনিফাইড সমাধান করা উচিত?
  • এবং সেরা পোর্টেবল উপায় কি?

আপনি "সেরা" বলতে কী বোঝাতে চেয়েছেন তা সম্পর্কে খুব সুনির্দিষ্ট হন ।

3
@ থরবজর্ন: সেরা অ্যাড \ সেরা
good উত্তমরূপের

3
আপনি স্ট্যাকএক্সচেঞ্জ সাইটে "সেরা" অর্থের বৈচিত্র্যে অবাক হয়ে যাবেন।

উত্তর:


23

নন-ব্লব সেটিংস সঞ্চয় করার সর্বোত্তম উপায় (এবং অবস্থান) কোনটি?

উইন্ডোজে, এটি রেজিস্ট্রিটি ব্যবহারযোগ্য বলে মনে হয়। আমার মতে, রেজিস্ট্রিটি একটি দুর্বল-নকশাকৃত সিস্টেম ছিল এবং পরিবর্তে ডিরেক্টরিতে একটি সাধারণ পাঠ্য ফাইল Users\Username\AppDataপছন্দ করা উচিত। এটি ব্যাক আপ করা সহজ, ব্যবহারকারীদের জন্য সংশোধন করা কম বিপজ্জনক এবং পরিষ্কার করা সহজ।

লিনাক্স এবং সর্বাধিক ইউনিক্সে, পছন্দের অবস্থানটি /home/user/.config/appnameব্যবহারকারী-নির্দিষ্ট সেটিংস এবং /etc/বৈশ্বিক (সিস্টেম-ব্যাপী) সেটিংসের জন্য। ব্যবহারকারীর সেটিংসের জন্য কম-পছন্দের (তবে গ্রহণযোগ্য) অবস্থানটি ~/.appnameতবে এটি সাধারণত সুবিধার বাইরে চলে যাচ্ছে। এই ফাইলগুলি ব্যবহারকারী-সম্পাদনাযোগ্য হওয়া উচিত, তাই মানব-পঠনযোগ্য ফর্ম্যাটটি সর্বদা পছন্দ করা হয়।

আমি বেশিরভাগ লোকের সাথে একমত নই যে এক্সএমএল হ'ল নন-ব্লব ডেটা সংরক্ষণের জন্য একটি গ্রহণযোগ্য বিন্যাস। এটি আমার মতে, একটি কাঠামোগত ডেটার খুব ছোট টুকরা হয়ে সাধারণত যেটি শেষ হয় তার জন্য একটি ওভারওভারড এবং অতিরিক্ত জটিল ফর্ম্যাট। আমি YAML, JSON, ASN.1, নাম = মান জোড়া, বা অনুরূপ ফর্ম্যাটগুলিতে ফাইল দেখতে পছন্দ করি। অত্যধিক সিনট্যাক্স থাকা ব্যবহারকারীর পক্ষে বিশৃঙ্খলা সৃষ্টি করা এবং ফাইলটিকে একটি অবৈধ বিন্যাসে রেখে দেওয়া খুব সহজ হয়ে যায়।

আমাদের কি প্রতিটি সিস্টেম ডিফল্ট অনুসরণ করা উচিত বা একটি ইউনিফাইড সমাধান করা উচিত?

এটি সম্পূর্ণ আপনার উপর নির্ভর করে তবে কিছু বিষয় মনে রাখবেন:

  • * নিক্সের মতো প্ল্যাটফর্মগুলির কঠোর সীমাবদ্ধতা রয়েছে যার উপর অবস্থানগুলি লিখনযোগ্য। উইন্ডোজের চেয়ে বেশি কঠোর। তাই:
    • আপনার যে কোনও কিছুতে লিখতে হবে এমন একমাত্র স্থানটি ব্যবহারকারীর হোম ডিরেক্টরিতে রয়েছে।
    • যদি না আপনার আবেদন একটি সিস্টেম সেবা হয়; যে ক্ষেত্রে, সমস্ত পরিবর্তনীয় ডেটা ফাইলগুলিতে লেখা উচিত /var/। Nonmutable ডেটা ফাইলগুলির মধ্যে আপনার অ্যাপ্লিকেশান ডিরেক্টরির মধ্যে রাখতে হবে /usr/share/বা /usr/local/share/বা/opt/
    • কনফিগারেশন ফাইলগুলিতে অ্যাপ্লিকেশনটি চলতে /etc/থাকা অবস্থায় কখনই সেগুলিতে লিখিত হওয়া উচিত নয় , এমনকি যদি এটিতে তাদের লেখার অ্যাক্সেস থাকে। ডিফল্ট আচরণ এবং অন্য কিছুর /etc/জন্য ভান্ডার হতে হবে।
    • আপনার অ্যাপ্লিকেশনের জন্য পরিকল্পনা তিনটি স্থানে এক ইনস্টল করার জন্য: /usr/local/, /opt/appname, অথবা /home/username/appname
    • ব্লবগুলি পরিবর্তন করতে হলে অন্যান্য কনফিগারেশন ফাইলের পাশাপাশি সংরক্ষণ করা উচিত। এটা সাধারণত বাঞ্ছনীয় ব্যবহারকারী-সম্পাদনাযোগ্য ফর্ম্যাট ব্যবহার তাই SQLite বা বার্কলে ডিবি ভালো কিছু পছন্দ করা হয় (যেহেতু সেখানে প্রত্যেকের জন্য কম্যান্ড-লাইন সরঞ্জাম), কিন্তু না, দরকার নেই।
  • উইন্ডোজে, আপনার অ্যাপ্লিকেশনগুলি কেবল ব্যবহারকারীর ডিরেক্টরিতে লেখা উচিত। ডেটা ফাইলের জন্য মানক অবস্থান Users\User\AppData। আর কোথাও গ্রহণযোগ্য বলে মনে হচ্ছে না।
  • ম্যাক ওএস এক্সে, আপনার অ্যাপ্লিকেশন সেটিংসটি ~/Library/Preferencesঅন্যান্য অ্যাপ্লিকেশনগুলির প্লাস্ট ফাইলগুলির সাথে সংরক্ষণ করা উচিত । plistপছন্দসই ফর্ম্যাট বলে মনে হচ্ছে তবে আপনি অ্যাপলের নির্দেশিকাগুলির সাথে ডাবল-চেক করতে চান।

এবং সেরা পোর্টেবল উপায় কি?

সৎ হওয়ার মতো কোনও "সেরা" নেই। কেবলমাত্র প্ল্যাটফর্ম-নির্দিষ্ট সীমাবদ্ধতা এবং প্রত্যাশা রয়েছে। আমার প্রস্তাবটি প্লাটফর্ম-নির্দিষ্ট উপায়ের সাথে থাকা, যদিও এটি আরও কোড লেখার অর্থ।


1
আমি মনে করি মাইক্রোসফ্ট কয়েক বছর ধরে রেজিস্ট্রি ব্যবহারকে নিরুৎসাহিত করছে - যা ভাল good অ্যাপডাটাতে লিখিত, যেমন আপনি উল্লেখ করেছেন, যাওয়ার উপায়। .NET- এ (সম্ভবত উইন্ডোজ এপিআইতেও রয়েছে?) এমন কি একটি পদ্ধতিও রয়েছে যা সঠিক পথে ফিরে আসে।
মেটালমাইকস্টার

একটি পরিবেশের পরিবর্তনশীলও রয়েছে:%APPDATA%
গ্রেফ্যাড

@ মেটালমিকেস্টার - হ্যাঁ, একেবারে স্পট করুন। অ্যাপডেটা কোনও ডোমেন পরিবেশের জন্যও রোমিং প্রোফাইল দ্বারা সমর্থিত।
জেবিআরওয়িলকিনসন

সেটিংস! = কনফিগারেশন
ইউসু আলেয়াউব

> In my opinion, the registry was a poorly-devised system, and instead a simple text file in the Users\Username\AppData directory should be preferred. @ গ্রেফ্যাড - দীর্ঘকালীন উইন্ডোজ এপিআই বিকাশকারী, রেমন্ড চেন, এটিকে সম্বোধন করেছেন এবং ব্যাখ্যা করেছেন যে কেন রেজিস্ট্রিতে পাঠ্য ফাইলগুলি ব্যবহার করা আরও ভাল ডিজাইনের ধরণ নয়: আইএনআই ফাইলগুলি কেন রেজিস্ট্রির পক্ষে
মিক

8

উইন্ডোজ অধীনে, ব্যবহার করুন %APPDATA%\appname। * এনআইএক্স এর অধীনে, ব্যবহার করুন ~/.appname। প্ল্যাটফর্মের অধীনে স্থির ডিরেক্টরি নাম ব্যবহার করবেন না, যেহেতু ব্যবহারকারীর হোম ডিরেক্টরি ডিফল্ট থেকে আলাদা হতে পারে (উদাহরণস্বরূপ এটি নেটওয়ার্কে থাকতে পারে)।

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

উদাহরণস্বরূপ, যদি আপনার অ্যাপ্লিকেশনটি ইতিমধ্যে অন্য কোনও কিছুর জন্য এক্সএমএল / জেএসএন ব্যবহার করে তবে ব্যবহারকারী ডেটা / কনফিগারেশন সংরক্ষণের জন্য এক্সএমএল / জেএসএন একটি ভাল উপায় হতে পারে। তবে এটি যদি একটি সাধারণ কনফিগারেশন ফাইল হয় তবে নির্ভরতা প্রবর্তন করে আপনার অ্যাপ্লিকেশনটিতে ফুল কেন যোগ করবেন? সেক্ষেত্রে কেবলমাত্র এর var: value\nপরিবর্তে লাইন সহ একটি সাধারণ পাঠ্য ফাইলটি ব্যবহার করা ভাল ।

সম্পাদনা: কোনও "সেরা" বহনযোগ্য উপায় নেই, কারণ ওএসগুলি এর জন্য খুব আলাদা কনভেনশন ব্যবহার করে। রক্তাক্ত ভাল কারণ ব্যতীত ওএসের মানগুলি ভঙ্গ করবেন না।

সম্পাদনা 2: আপনি যদি নিজেকে সিস্টেম ব্যাপী সেটিং তৈরি করতে দেখেন/etc বা HKEY_LOCAL_MACHINE, সেটিংটি সত্যই বিশ্বব্যাপী কিনা নিজেকে জিজ্ঞাসা করুন । তারপরে 5 মিনিট অপেক্ষা করুন এবং নিজেকে আবার জিজ্ঞাসা করুন। যদি উত্তরটি এখনও হ্যাঁ হয় তবে সর্বদা, একটি বিশ্বব্যাপী সেটিংস তৈরি করুন। মনে রাখবেন, একজন সাধারণ ব্যবহারকারী থেকে লেখার অ্যাক্সেস নেই /etcবা HKEY_LOCAL_MACHINEকরতে এবং এই করছেন, আপনি প্রশাসনিক অধিকার ছাড়া যে কেউ আপনার অ্যাপ ইনস্টল করা যাবে না নিশ্চিত করছি দ্বারা।


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

1
@ টমউইজ: অবশ্যই যে কোনও সক্ষম বিকাশকারী এটি নির্ধারণ করতে সক্ষম হবেন যে আপনার যে কোনও জায়গায় আক্ষরিক ব্যবহারের দরকার নেই;)। ভেরিয়েবলের জন্য এটিই।
চিন্ময় কাঞ্চি

1
~/.config/applicatonক্রমবর্ধমান * নিক্সে পছন্দের অবস্থান হয়ে উঠছে।
গ্রেফ্যাড

@ গ্রেফ্যাড: আমি আসলে এটি কখনই বুঝতে পারি নি তবে আপনি ঠিক বলেছেন। আমার মেশিন, অ্যাপ্লিকেশন এক চতুর্থাংশই উপর সঞ্চয় কনফিগ ডেটা আছে যা ~তাই না ~/.config/appname
চিন্ময় কাঞ্চি

পুরো গোছা অ্যাপ্লিকেশনগুলি উইন্ডোজে ~ / .appname ব্যবহার করে (যা আপনার ব্যবহারকারী প্রোফাইলের সাথে সমান হয়, নথি নয়) এবং এটি খুব বিরক্তিকর। এই ফোল্ডারগুলি নিজেকে লুকায় না!
অ্যালান পিয়ার্স

3

আমি চেষ্টা করে দেখুন এবং রেজিস্ট্রি থেকে দূরে রাখি, এটি ব্যবহারের উপায় । আমি সবাই চাই।

আমি এক্সএমএল কনফিগারেশন ফাইল বা একটি বিন ফাইল বা মাঝেমধ্যে একটি স্থানীয় ডাটাবেস (এসকিউলাইট) রাখা পছন্দ করি।


রেজিস্ট্রি থেকে দূরে রাখার জন্য +1। আমি এখন এটি খুঁজে পাচ্ছি না, তবে এমএসের কেউ একজন স্বীকার করেছেন যে রেজিস্ট্রিটি একটি ভুল ছিল reading
চিন্ময় কাঞ্চি

1
এক্সএমএল অংশ ব্যতীত আপনার সাথে সম্মত হন। আমি সাধারণ সেটিং প্রয়োজনীয়তার জন্য আইএনআই (বা সাধারণ পাঠ্য ফাইল) এবং জটিল অ্যাপ্লিকেশনগুলির জন্য এসকিউএলাইট ব্যবহার করব।
কোডিজম

তারা ঠিক এখন তা স্বীকার করছে? আমি আপনাকে 1995 সালে ফিরে যে বলতে পারে! ম্যাক ওএস ক্লাসিকটি এটি সঠিকভাবে পেয়েছে: প্রতিটি অ্যাপ্লিকেশানের নিজস্ব ফাইলে সংরক্ষণ করে কনফিগার তথ্য সংরক্ষণ করার জন্য একটি কেন্দ্রিক স্থান দেওয়ার জন্য একটি পছন্দসই ফোল্ডার আমি যখন রেজিস্ট্রিটি প্রথম দেখলাম তখন আমার মতো হয়েছিল, "মাইক্রোসফ্ট কি কখনও আপনার সমস্ত ডিম এক ঝুড়িতে রাখার কথা শুনেনি?!?"
ম্যাসন হুইলারের

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

@ চিন্ময়, @ মেসন, রেজিস্ট্রি একটি ভুল নয় কারণ রেজিস্ট্রি কেবল কনফিগারেশন ডেটা সঞ্চয় করে (দেখুন: গোষ্ঠী নীতি, ডোমেনস, অনুলিপি) AR ভুলটি হ'ল মাইক্রোসফ্ট কীভাবে এটি বিকাশকারীদের কাছে এনেছে এবং কীভাবে এটি ব্যবহার করবেন সে সম্পর্কে কোনও ভাল মানের অভাব রয়েছে। এটি অ্যাপ্লিকেশন ডেটার জন্য একটি ডাম্পিং গ্রাউন্ড হিসাবে শেষ হয়েছিল, যা এটি কখনও বোঝানো হয়নি।
ম্যাট ওলেনিক

3

আমার উত্তরটি চিন্ময় কাঞ্চীর উত্তরের সংমিশ্রণ এবং BioBuckyBall এর উত্তর

সাধারণ কনফিগারেশনের জন্য এক্সএমএল / জসন, জটিলগুলির জন্য এসকিউএলাইট, ডিফল্ট ওএস অ্যাপ্লিকেশন ফোল্ডারে পার্ক করা বৃহত্তর কনফিগারেশন বা ডিফল্ট ওএস ব্যবহারকারী ফোল্ডার যখন কনফিগারেশনগুলি ব্যবহারকারী নির্ভর হয়। উভয় ব্যবহার করা যেতে পারে।


2

উইন্ডোজে, আমি AppDataফোল্ডারে অ্যাপ্লিকেশন সেটিংটি রাখব


1

ব্যবহারকারীর সেটিংস সাধারণত থাকে

/home/<user>/.<application> 

সুতরাং উদাহরণস্বরূপ ইরশির সেটিংস হ'ল / home//.irssi/config


তবে এটি ইউনিক্স কনভেনশন। উইন্ডোজ সম্পর্কে কি? এবং লিনাক্সে, উপ-ডিরেক্টরি সহ ব্যবহারকারীদের হোম ডিরেক্টরি বন্যা হয় না? না কেন /home/<user>/etc/application?
উইজার্ড 79

@ লোরেঞ্জো: ব্যবহারকারীর হোম ডিরেক্টরি বন্যায় খুব কমই সমস্যা হয়।
চিন্ময় কাঞ্চি

1
~/.config/applicationজিনিসগুলিকে একীভূত রাখতে সহায়তা করার জন্য কনফিগারেশন সেটিংস ক্রমশ সরানো হচ্ছে moved আমি এই আন্দোলনের সাথে একমত হতে আগ্রহী।
গ্রেফ্যাড

1
@ লোরেঞ্জো: এটি কনফিগারেশন ফাইলগুলি সংরক্ষণ করার উইন্ডোজ কনভেনশনের মতোই AppData
গ্রেফ্যাড

1
@ ক্রিস: উপায় নেই! :-)
উইজার্ড 79

1

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

যদি আপনার অ্যাপ্লিকেশনটি ক্রস প্ল্যাটফর্ম হয় তবে আপনি এটিকে ক্লাস বা হোয়াট নোট দিয়ে বিমূর্ত করতে পারেন।


0

আমি রেজিস্ট্রিটিতে কেবল একটি জিনিস লিখি তা হ'ল অ্যাপটির অবস্থান, যাতে ইনস্টলার এবং আপডেটাররা সহজেই এটি সন্ধান করতে পারে। আর সমস্ত কিছু ফাইলগুলিতে / অ্যাপডেটা / সংস্থা / অ্যাপে সঞ্চিত থাকে


-2

জাভা অ্যাপসের জন্য আমি মনে করি জিএসন একটি ভাল পছন্দ। আপনার সেটিংস অবজেক্ট তৈরি করুন এবং এটিকে জেএসএন এবং এর বিপরীতে রূপান্তর করতে জিএসন ব্যবহার করুন। কিছু সিরিয়ালযুক্ত ব্লবের পরিবর্তে মানব পাঠযোগ্য হওয়ার সুবিধা রয়েছে Has

সম্পাদনা: ঠিক আছে, তাই এটি সম্ভবত এত সাধারণ না ...


-2

আপনি। নেট এ লিখতে থাকলে, আপনি কনফিগারেশন বা এমনকি কিছু ডেটা সংরক্ষণ করার জন্য কোন ফোল্ডারের অবস্থান ব্যবহার করতে পারেন তা সন্ধান করতে আপনি System.EnLive.Sp خصوصی ফোল্ডার ব্যবহার করতে পারেন।

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