Podczas gdy zastanawiałem się nad rozwiązaniem problemu najprostszym pomysłem jest po prostu przechowywanie tego w bazie danych. Po głębszych przemyśleniach stwierdziłem ze dla podstawowych informacji nie ma sensu dodatkowo obwiązać bazy danych wiec postanowiłem skorzystać z plików konfiguracyjnych które są dostępne na platformie nie. Jako że i tak one są wykorzystywane podczas tworzenia serwisu wiec nie powoduje to żadnego zwieszonego obciążenia związanego z odczytywaniem tych danych.
Pliki konfiguracyjne
Jak większość wie pliki konfiguracyjne są podzielone na sekcje. Na początek dla naszego forum stworzymy podstawową sekcje która będzie przechowywała najprostsze informacje. Wygląda ona tak:
<mForum SiteTitle="mForum" MetaKeywords="Forum,Board,Project,.Net" MetaDescription="mForum is going to be fully featured forum implemented in C# on .NET platform" MinPasswordLength="5"> </mForum>Jednak żeby za bardzo nie mieszać postanowiłem konfiguracje dotyczacą forum przenieść do oddzielnego pliku konfiguracyjnego. Aby nasze forum o tym wiedziało w głównym web.configu musimy wstawic taka linie:
<mForum configSource="mForum.config"/>
Klasa Settings
Klasa ta będzie przechowywała informacje dotyczące wszystkich ustawień forum. Nic w tej klasie specjalnego. Zmienne i obiekty które będą zawierały dane z pliku konfiguracyjnego.
public class Settings { public Settings(string siteTitle, string metaKeywords, string metaDescription, int minPasswordLength) { Check.Argument.IsNotEmpty(siteTitle, "siteTitle"); Check.Argument.IsNotEmpty(metaKeywords, "metaKeywords"); Check.Argument.IsNotEmpty(metaDescription, "metaDescription"); Check.Argument.IsNotNull(minPasswordLength, "minPasswordLength"); Check.Argument.IsNotNegativeOrZero(minPasswordLength, "minPasswordLength"); SiteTitle = siteTitle; MetaKeywords = metaKeywords; MetaDescription = metaDescription; } public string SiteTitle { get; internal set; } ... }Klasa SettingsConfigurationSection
Tutaj mamy natomiast obiekt który będzie wykorzystywany w bezpośrednim wyciąganiu danych z plików konfiguracyjnych. Dane z sekcji są bindowane do tego obiektu. Sam obiekt dziedziczy po klasie ConfigurationSection. Wygląda tak:
public class SettingsConfigurationSection : ConfigurationSection { private static string _sectionName = "mForum"; public static string SectionName { [DebuggerStepThrough] get { return _sectionName; } [DebuggerStepThrough] set { Check.Argument.IsNotEmpty(value, "value"); _sectionName = value; } } [ConfigurationProperty("SiteTitle", DefaultValue = "mForum")] public string SiteTitle { [DebuggerStepThrough] get { return (string)this["SiteTitle"]; } [DebuggerStepThrough] set { this["SiteTitle"] = value; } } [ConfigurationProperty("MetaKeywords", DefaultValue = "")] public string MetaKeywords { [DebuggerStepThrough] get { return (string)this["MetaKeywords"]; } [DebuggerStepThrough] set { this["MetaKeywords"] = value; } } ... }Składa się on z zmiennych statycznych które bezpośrednio pobierają dane z sekcji. Oprócz tego jest jedna zmienna która jest na stałe ustawiania. Jest to nazwa sekcji.
Inicjowanie klasy Settings odbywa się podczas rejestracji kontenera IoC jak w przypadku wszystkich innych obiektów. Nie jest to nic skomplikowanego. Zapraszam do źródeł po dokładna implementacje.
Brak komentarzy:
Prześlij komentarz