我正在尝试在我的代码中实现一个简单的行为,但我想不出一个像样的方法。看看我正在尝试做什么:
$db = new Database('mydb');
$db->createTable('sample');
$myTable = $db->getTable('test');
$myTable->insert($data);
$myTable->insert($data);
$myTable->edit('2', $data2);
$myTable->remove('1');
getTable是数据库类的一种方法,它返回 Table 类的对象。 表类具有特定于表操作的方法,例如插入,编辑和删除。 数据库类具有表应该能够使用的重要方法,例如exec和query。它还应该能够访问数据库中的属性,例如$ this-> pdo。
表扩展数据库或数据库是否应该使用静态方法? 表使用数据库中的多种方法。有没有我可以用来实现这个的设计模式?一个工厂?
答案 0 :(得分:3)
由于您没有创建相同基类(或接口)的n
具体实现,因此工厂在这里没有意义。
我可能最终会做这样的事情(注意这可能实际上不是运行,提供一个概念而不是实际的实现,因为它不在我的头顶):
class Database
{
private $name;
public __construct($name)
{
$this->name = $name;
}
public function createTable($name)
{
$t = new Table($name, $this);
// sql stuff here
return $t;
}
public function exec($sql)
{
// table now has access to this due to the set reference
}
}
class Table
{
private $db;
public function __construct($name, $db)
{
$this->db = $db;
}
}
答案 1 :(得分:0)
我想说当$ db-> getTable()创建一个新的Table对象时,它会将对它自己的引用作为new()的参数传递给Table类。
然后,Table类将针对该引用执行任何exec或query命令。