Hej!
Skulle tycka att det vore jättekul om någon hade lust att kommentera mitt resonemang kring hur jag ska lägga upp databaskommunikationen i ett lite större projekt jag har framför händerna just nu.
Det skall byggas en applikation som kommer att installeras på diverse olika plattformar. Applikationens olika moduler kommer att använda sig utav en databasklass vars funktionalitet kommer måsta att variera beroende på miljön (det kan vara en mysql-db som används i en installation och en access-db i en annan installation. Det kan komma att ställas olika krav på hur kommunikationen med datbasen hanteras).
Tanken är att det ska finnas två databasklasser. Databasklass 1 innehåller funktionaliteten för att kommunicera med databasen. Databasklass 2 skall ha diverse statiska funktioner såsom update, delete, replace, insert etc. Men funktionaliteten sker fortfarande i klass 1. Databasklass 2 kommer även kunna föra vidare en instans av datbasklass 1. Databasklass 1 kommer vara klassen som varierar beroende på miljön medans databasklass 2 kommer vara densamma i alla installationer av applikationen.
Applikationen kommer att vara modulbaserad. Modulerna använder databasklass 2, antingen klassens statiska funktioner för att kommunicera med databasen eller för att få en instans av databasklass 1.
Databasklass 1 kommer alltid att implementera ett kommunkationsinterface. De statiska funktionerna i databasklass 2 använder sig av metoderna i klass 1 bestämda av kommunikationsinterfacet.
Detta var en snabb inte allt för bra förklaring, kanske att ett litet utdrag ur koden också kan va till hjälp.
## Databasklass 2
class databaseConnection
{
private static $instance = null;
public static function getDatabaseInstance()
{
$instance = create_function(
'$h, $u, $p, $d',
'return new '.config::getValue('database_class').'($h, $u, $p, $d);'
);
return $instance(
config::getValue('database_host'),
config::getValue('database_username'),
config::getValue('database_password'),
config::getValue('database_name')
);
}
private static function dbInstance()
{
if(self::$instance == null)
{
self::$instance = self::getDatabaseInstance();
}
return self::$instance;
}
public static function query($query, $get_result=false)
{
self::dbInstance()->connect();
self::dbInstance()->query($query, $get_result);
self::dbInstance()->close();
}
public static function selectQuery($selects = '', $table, $wheres='', $orders ='', $start=0, $limit='')
{
}
}
##Interface som alltid ska komma att implementeras av databasklass 1
interface databaseCommunication
{
function __construct($host, $username, $password, $database);
function connect();
function close();
function query($query, $get_result=false);
function selectQuery($selects = '', $table, $wheres='', $orders ='', $start=0, $limit='');
function insertQuery($table, $input);
function updateQuery($table, $input, $wheres);
function deleteQuery($table, $where);
function getNumRows($table, $wheres='');
}
Verkar det som ett rimligt upplägg eller är jag helt galen?