Proszę o pomoc / wyjaśnienie w jaki sposób prawidłowo dzielić pewne dane ( np klasę DataBase ) dla całej aplikacji. Czytałem o wstrzykiwaniu zależności ( Dependency Injection ) i o wzorcu Singleton a teraz z czym mam problem...
Mamy klasę DataBase która ma być dostępna w kilku innych klasach w tym między innymi w klasie DataWorker w jaki sposób ja udostepniać?
// opcja 1 - dependency injection?
class DataBase
{
public:
DataBase();
void setValue( const std::string & key, const boost::any & value );
const boost::any value( const std::string & key ) const;
private:
std::map< std::string, boost::any > db;
};
class DataWorker
{
public:
DataWorker( const DataBase & inDataBase ) : dataBase( inDataBase ) {}
void process() { std::cout<< dataBase.value( "key" ); }
private:
const DataBase & dataBase;
};
class Application
{
public:
Application() : dataWorker( dataBase ) {}
private:
DataBase dataBase;
DataWorker dataWorker;
};
czy tak?
// opcja 2 z klasą z kilkoma metodami statycznymi
class DataBase
{
public:
DataBase();
static void setValue( const std::string & key, const boost::any & value );
static const boost::any value( const std::string & key );
private:
static std::map< std::string, boost::any > db;
};
//#include "database.h"
class DataWorker
{
public:
DataWorker();
void process() { std::cout<< DataBase::value( "key" ).toString().toStdString(); }
private:
//----
};
class Application
{
public:
Application();
private:
DataBase dataBase;
DataWorker dataWorker;
};
a może jest jeszcze inny sposób aby zrobić to co chcę?
Proszę o jakiekolwiek wskazówki, linki do stron, książek, wszystkiego co pomoże mi to zrozumieć. Dzięki ;)