Klasa ma dostarczać następujących możliwości:
dostęp do konfigów w każdym miejscu aplikacji, moge to rozwiązać na 2 sposoby, albo singleton, albo 'registry' które delikatnie mowiąc 'podpatrzyłem' (ctrl+c) z zenda:
<?php // registry Carpo::registry('Config')->someParam; // lub singleton Core_Config::GetInstance()->someParam; ?>
nie zdecydowałem się jeszcze której z metod będe się trzymał, singleton jednak w tym momencie wydaje sie być rozsądniejszy.
Chciałbym w tak inteligentny sposob przygotować klase, aby moc dodawać do niej nowe 'rodzaje' przechowywania danych. Na starcie mam dwa - ini oraz mysql. Nie chciałbym tego jednak wpakować w jedną klasę. Chciałbym rodzielić to i w razie potrzeby mieć łatwo dopisać kolejne rodzaje, np pliki.txt, xml itp. Napewno tez w jakiś sposób musiałbym zawładnąć nadpisywaniem czy tam 'priorytetem' parametrów w momencie kiedy parametry w ini i mysql mają takie same nazwy.
Myslałem o zastosowaniu wzorca Factory:
<?php ConfigFactory::build('ini','mysql'); ?>
Tylko pytanie, jak przyjaźnie oddzielić kod odpowiedzialny za zarządzanie konfigami (W przypadku ini chodzi o zwykłe wczytanie danych z pliku, natomiast w momencie mysql'a chciałbym miec tez możliwość dodania metody setParam($name, $value);
myslalem o zastosowaniu klas abstrakcyjnych (Core_Config_Ini, Core_Config_Mysql, Core_Config_Xml), ale niestety nie napiszę
<?php class Core_Config extends Core_Config_Ini, Core_Config_Mysql ...{} ?>
z wiadomych przyczyn.