Silverlight Windows Phone 7, используя статический класс для хранения данных - PullRequest
0 голосов
/ 28 апреля 2011

Я пытаюсь написать приложение для Windows Phone 7. Это плохая практика - хранить все данные в статическом / одноэлементном классе?Если да, то какие у меня варианты?Спасибо.

Ответы [ 3 ]

1 голос
/ 28 апреля 2011

Нет, это неплохая практика.

При таком способе все настройки хранятся в одном месте для удобства хранения.

0 голосов
/ 29 апреля 2011

Было бы лучше не заставлять класс быть одноэлементным по дизайну, а скорее быть одноэлементным по использованию. Пусть ваш объект доступа к данным (DAO) будет обычным классом. Реализуйте Service Locator , который действует как реестр объектов, и пусть это будет класс, который поддерживает особенность DAO.

Пример кода:

public interface INotesDao {
    void Save (string s);
    String Load ();
}

public class NotesDaoImpl : INotesDao {
    // etc.
}

public interface IServiceLocator {
    public TIntfc GetImpl<TIntfc> () {
        return Activator.CreateInstance (m_Mapping[typeof(TIntfc)]);
    }
}

public static class ServiceLocator {
    public static IServiceLocator Instance { get; set; }
}

// this isn't a robust implementation, just meant to get the point across
public class MyAppServiceLocatorImpl : IServiceLocator {

    private Dictionary<Type,Type> m_Mapping = new Dictionary<Type,Type> ();
    private Dictionary<Type,Object> m_Cache = new Dictionary<Type,Object> ();

    public MyServiceLocatorImpl () {
        AddMapping<INotesDao, NotesDaoImpl> ();
    }

    private void AddMapping<TIntfc, TImpl> () {
        m_Mapping[typeof(TIntfc)] = typeof(TImpl);
    }

    public TIntfc GetImpl<TIntfc> () {
        var implType = m_Mapping[typeof(TIntfc)];
        if (!m_Cache.ContainsKey (implType))
            m_Cache[implType] = Activator.CreateInstance (implType);
        return m_Cache[implType];
    }
}

public class MyApp {
    public MyApp () {
        ServiceLocator.Instance = new MyAppServiceLocatorImpl ();

        var dao = ServiceLocator.Instance.GetImpl<INotesDao> ();
        var notes = dao.Load ();
        // etc
    }
}

Причина для реализации этого заключается в том, что одноэлементные классы сложнее правильно протестировать, не говоря уже о том, что это делает классы немного более сложными. Лучше всего, чтобы они были глупыми классами и позволяли другому классу специально управлять единичностью для всех типов классов.

0 голосов
/ 28 апреля 2011

use может создать статический класс, а use может использовать его в приложении, чтобы обеспечить постоянство, а другой вариант реализации -

Опция 1:

public static void SaveNote(string content)
        {
                var fileName = "myNotes.dat";
                using (var store = IsolatedStorageFile.GetUserStoreForApplication())
            {
                if (!store.FileExists(fileName))
                {
                    using (var writeStream = new IsolatedStorageFileStream(fileName, FileMode.Create, store))
                    {
                        using (var writer = new StreamWriter(writeStream))
                        {
                            writer.Write(content);
                        }
                    }
                }
                }
            }

        public static string LoadNote()
        {
            var fileName = "myNotes.dat";
            try
            {

                using (var store = IsolatedStorageFile.GetUserStoreForApplication())
                {
                    if (store.FileExists(fileName))
                    {
                        using (var readStream = new IsolatedStorageFileStream(fileName, FileMode.Open, store))
                        using (var reader = new StreamReader(readStream))
                        {
                            return reader.ReadToEnd();
                        }
                    }
                }
            }
            catch (IsolatedStorageException e)
            {

            }
                return String.Empty;
        }

Option 2:

var note = IsolatedStorageSettings.ApplicationSettings;
           note.Add("Note", txtNote.Text);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...