【发布时间】:2019-10-03 12:48:11
【问题描述】:
我的每个数据库表都有一个类,例如events 表的行存储在Event 类中。对于我编写的每个类,有几个方法完全相同,只是变量或列名不同。例如:
玩家类update()
public function update() {
$conn = new PDO( db_host, db_user, db_pw );
$sql = "UPDATE players SET name=:name, picture=:picture, position=:position, num=:num, team=:team, description=:description WHERE id = :id";
$st = $conn->prepare ( $sql );
$st->bindValue( ":name", $this->name, PDO::PARAM_STR );
$st->bindValue( ":picture", $this->picture, PDO::PARAM_STR );
$st->bindValue( ":position", $this->position, PDO::PARAM_STR );
$st->bindValue( ":num", $this->num, PDO::PARAM_INT );
$st->bindValue( ":team", $this->team, PDO::PARAM_INT );
$st->bindValue( ":description", $this->description, PDO::PARAM_STR);
$st->bindValue( ":id", $this->id, PDO::PARAM_INT );
$st->execute();
$conn = null;
}
团队班update()
public function update() {
$conn = new PDO( db_host, db_user, db_pw );
$sql = "UPDATE teams SET name=:name, sname=:sname, logo=:logo, sport=:sport WHERE id = :id";
$st = $conn->prepare ( $sql );
$st->bindValue( ":name", $this->name, PDO::PARAM_STR );
$st->bindValue( ":sname", $this->sname, PDO::PARAM_STR );
$st->bindValue( ":logo", $this->logo, PDO::PARAM_STR );
$st->bindValue( ":sport", $this->sport, PDO::PARAM_STR );
$st->bindValue( ":id", $this->id, PDO::PARAM_INT );
$st->execute();
$conn = null;
}
正如您所见,方法的要点是相同的,只是将不同的变量绑定到语句(更多方法就是这种情况)。有没有一种简单的方法可以让每个类都具有相同的基本update()、insert()、delete()... 方法但具有各自的变量?我曾想过从超类继承基本行为,但从 OO 的角度来看没有多大意义(而且我不相信有任何方式可以说“对于在这个类中声明的每个公共变量”)但我不是确定是否有一种方法可以使用合成(或者根本没有,真的)来做到这一点。
【问题讨论】:
-
我希望有一种更简单/更原生的方式来做到这一点:(谢谢你的回答
-
使用合适的 ORM 非常简单。更不用说您受益于数百万人使用的成熟且经过测试的软件包。这没有什么问题。诚然,设置需要一点时间,但它会及时补偿。
-
我会将这些类命名为“PlayerRepository”、“TeamRepository”,而不要理会它们。这还不错,您可以 100% 控制正在发生的事情。