I am working on code re-factoring of configuration file loading part in PHP. Earlier I was using multiple ‘ini’ files but now I plan to go for single XML file which will be containing all configuration details of the project. Problem is, if somebody wants configuration file in ini or DB or anything else and not the default one (in this case XML), my code should handle that part.
If somebody wants to go for other configuration option like ini, he will have to create ini file similar to my XML configuration file and my configuration manager should take care everything like parsing, storing in cache. For that I need a mechanism lets say proper interface for my configuration data where the underlying data store can be anything( XML, DB, ini etc) also I don’t want it to be dependent on these underlying store and anytime in future this should be extensible to other file formats.
Assuming you’re wanting to use a class to handle all this, you have 3 options:
ReadConfigurationBasethen 3 implementation classes,ReadConfigurationXML,ReadConfigurationINI, andReadConfigurationDatabaseand you’d have to choose the right oneconfig.xmlit would know to returnReadConfigurationBaseimplemented usingReadConfigurationXMLReadConfigurationand it acts as step 2, but creates, contains, and owns, the 3 other classes.The 3 non-base classes would simply know how to read that type of configuration file, and pass the information back in a generic manner. think along the lines of an interface: You know you can get the data, but you don’t care how.
I’d suggest option 3, since it would make life easiest. You would have to do a little bit of modification every time you want to add a storage method, but that would just be adding a little bit into the
ReadConfigurationclass.There is a way you could make it 100% dynamic, but that would complicate matters, and I don’t think you really need it for this.