Architektura rozbudowanej konfiguracji

0

Piszę ostatnio aplikację do symulacji strategii inwestycyjnych. Obecnie walczę z przejrzystością kodu rozbudowanej konfiguracji symulacji.
W istniejącym sofcie od strony GUI wygląda to tak: http://www.amibroker.com/guide/gifs/w_settings1.gif
Każde pojedyncze ustawienie ma swój default który nie wymaga zależności z zewnątrz.

Pojawia się pytanie, jak zaimplementować konfigurację, by nie pisać obiektu mającego kilkadziesiąt lub jeszcze więcej properties.

Wykombinowałem, że opakuję ustawienia klasami. Klasy ustawień będą inicjowane na życzenie. Po zainicjowaniu następuje ich zapamiętanie w słowniku.

Poniżej kod kontenera inicjującego ustawienia:

    public class SimulationSettings
    {
        public T Get<T>() where T : class, ISimulationSetting, new()
        {
            // sprawdzamy w prywatnym slowniku czy zostal zainicjowany obiekt ustawienia typu T
            // jesli tak, zwracamy ten obiekt
            // jesli nie, tworzymy, dodajemy do slownika i zwracamy
        }
    } 

Każde ustawienie musi implementować interfejs ISimulationSetting (który jest pusty, chodzi tylko o constraint), być typu referencyjnego i mieć defaultowy konstruktor.

Przykładowo ustawienie określające wysokość i sposób naliczania prowizji od transakcji wygląda tak:

    public class CommissionSetting : ISimulationSetting
    {
        public CommissionSetting()
        {
            Value = 0;
            Type = CommissionType.Percent;
        }

        public double Value { get; set; }
        public CommissionType Type { get; set; }
    } 

Co myślicie o takim rozwiązaniu ? Może jakieś wzorce rozwiązują już zbliżony problem ?

Pozdrawiam
Kuba

0

Pojawia się pytanie, jak zaimplementować konfigurację, by nie pisać obiektu mającego kilkadziesiąt lub jeszcze więcej properties.
Bo lepiej mieć kilkadziesiąt osobnych klas?
Czegoś tu nie rozumiem.

Co myślicie o takim rozwiązaniu ?

KISS, YAGNI

PS. http://filolozka.brood.pl/o-pisowni-znakow-interpunkcyjnych/

1 użytkowników online, w tym zalogowanych: 0, gości: 1