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 SettingsConfigurationSectionTutaj 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