متجر بيانات محلي بسيط بسيط للحفاظ على إعدادات المستخدم

StackOverflow https://stackoverflow.com/questions/4400192

  •  25-09-2019
  •  | 
  •  

سؤال

لدي هذا التطبيق الصغير c# winforms الذي لن ينمو بشكل أكبر بأي شكل من الأشكال. إنه مجرد حقلين إدخال وزر.

أريد أن أعرف ما إذا كان لديك يا رفاق معرفة طريقة متجر ال القيم أن المستخدم يدخل في مخزن بيانات محلي. قد تعتبر 10 سجلات الكثير من البيانات لهذا السيناريو.

متطلبات

  1. لا ينبغي أن يتطلب أي إعداد من جانب قاعدة البيانات. (إنشاء الجدول ، إلخ)

  2. يجب أن أكون قادرًا على إعطائه كائنًا ويجب أن يخزنه ، ولا أريد أن أضيع الوقت في ذلك.

  3. يجب أن تكون البيانات قابلة للاسترداد بسهولة إلى حد ما.

  4. أريد أن أكون قادرًا على إعادة استخدام هذا الشيء لكل تطبيق صغير أقوم بإنشائه مثل هذا.

أفكاري

  1. كائن POCO الذي سيتم تحريكه XML وحفظه في مجلد الإعدادات المحلية. عند تحميل التطبيق ، يتم تعديل هذا الملف مرة أخرى في كائن POCO.

  2. AODBMS: ليس لدي أي خبرة مع هذه ، لكنني اعتقدت دائمًا أنها تتألف من DLL واحد ، لذلك سيكون من السهل تجميعها مع البرنامج.

  3. أنا مرة واحدة ، منذ وقت طويل ، قمت ببناء تطبيق تخزين إعدادات المستخدم داخل السجل. لا أعرف ما إذا كان هذا لا يزال موضع تقدير رغم ذلك.

ما رأيك هو أفضل نهج؟

عينات الرمز موضع تقدير كبير!

هل كانت مفيدة؟

المحلول

لقد أخذت كلتا الإجابات في الاعتبار وصنعت ما يلي:

public static class IsolatedStorageExtensions
{
    public static void SaveObject(this IsolatedStorage isoStorage, object obj, string fileName)
    {
        IsolatedStorageFileStream writeStream = new IsolatedStorageFileStream(fileName, FileMode.Create);
        BinaryFormatter formatter = new BinaryFormatter();
        formatter.Serialize(writeStream, obj);
        writeStream.Flush();
        writeStream.Close();
    }

    public static T LoadObject<T>(this IsolatedStorage isoStorage, string fileName)
    {
        IsolatedStorageFileStream readStream = new IsolatedStorageFileStream(fileName, FileMode.Open);
        BinaryFormatter formatter = new BinaryFormatter();
        T readData = (T)formatter.Deserialize(readStream);
        readStream.Flush();
        readStream.Close();

        return readData;
    }
}

كائن poco غلاف يحتوي على تلك البيانات المراد تسلسلها:

[Serializable]
internal class DataStoreContainer
{
    public DataStoreContainer()
    {
        UserIDs = new List<int>();
    }

    public List<int> UserIDs { get; set; }
}

لاستهلاك هذه الامتدادات:

private IsolatedStorageFile _isoStore = IsolatedStorageFile.GetStore(IsolatedStorageScope.User | IsolatedStorageScope.Assembly, null, null);
private DataStoreContainer _data = new DataStoreContainer();
private const string FILENAME = "MyAppName.dat";

وفي أي طريقة تريد الحصول على البيانات:

_data = _isoStore.LoadObject<DataStoreContainer>(FILENAME);

لحفظ البيانات:

_isoStore.SaveObject(_data, FILENAME);

نصائح أخرى

هل نظرت إلى تخزين معزول؟ يقوم بتخزين البيانات في ملف محلي ، خاص بهذا المستخدم (أو للتطبيق ، اعتمادًا على كيفية تحديدك). يمكنك بسهولة تخصيص الكائنات من وإلى المتجر لأنه يعتمد على الدفق. يبدو وكأنه الحل الأمثل لمشكلتك.

نظرًا لأن you you you adder 10 عناصر ستكون كثيرًا ، سأصوت لصالح رقم 1 أو تباين رقم 1 ، التسلسلي الثنائي ... لا يبدو أنك تشير إلى أن القدرة على قراءة البيانات مهمة وينبغي أن تمنحك البيانات الثنائية أصغر أحجام الملفات ، على الرغم من أنه إذا كان 10 لا يزال لا ينبغي أن يكون هذا مهمًا.

ومع ذلك ، فإنني أستمتع بما رأيته من DB4Objects.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top