对所有控制器使用单个 crud 模型,而不是对每个控制器使用单独的模型
Using a single crud model for all controllers instead of separate models for each controller
所以我通常看到一个模型是数据库中 table 的表示,就像用户 table 它是这样的:
class user_model {
public $id ;
public $username ;
public $password ;
public $email ;
public function save(){
$db->query(" insert into `users` (username , email , password ) values ( '$this->username' , '$this->email' , '$this->password' ) ");
}
public function delete( ){
$db->query(" delete from users where id = $this->id ");
}
}
但是这个过程非常慢,而且大多数模型所做的都是基本的 CRUD 操作……所以我对几乎所有控制器都使用一个单一的 CRUD 模型,例如:
class crud_model {
public function save( $tbl , $data ){
$db->query(" insert into $tbl ( ".explode( ',' , array_keys($data) )." ) values ( ".explode( ',' , $data )." ) ");
}
public function delete( $tbl , $data ){
$db->query(" delete from $tbl where $data['column'] = $data['val'] ");
}
}
请注意,这是我的模型的一个非常简化的版本,基本上它与原始代码完全不同(我在原始代码中使用活动记录,它可以处理复杂的场景)所以忽略语法和技术错误
所以我想知道这种方法是否有问题?我错过了什么吗?
当你可以使用一个 CRUD 模型时,拥有很多模型有什么意义....这似乎是在浪费时间
您的方法不一定错误。作为程序员,我们希望事情保持一致,这样当您必须修改代码时,您不必担心一个 table 模型与另一个 table 模型的工作方式不同。我们也很懒惰(以一种好的方式),因此您希望能够编写一次 CRUD class 并在任何地方使用它。你已经用你的单一 class 想法完成了那部分。
但是,如果您使用 CRUD class 然后让所有 table 模型继承它,您将获得只编写一次代码的好处,如果您需要做一些事情使用不属于基本 CRUD 代码的 table,您可以轻松覆盖或添加到子 table class.
中的功能
就使用模型来代表您的 table 的 模式 而言,您目前的方法无法真正代表个人 tables 带有通用的 CRUD class。模型 classes 通常会有额外的 class 属性,这些属性特定于所表示的 table。这允许您设计 classes,以便在它们被重用时,开发人员可以更好地理解底层数据结构。查看原始问题中 User
class 的示例。 class 具有 $id
、$username
和 $password
等属性。开发人员可以查看它并确切地知道创建新用户需要什么。
所以我通常看到一个模型是数据库中 table 的表示,就像用户 table 它是这样的:
class user_model {
public $id ;
public $username ;
public $password ;
public $email ;
public function save(){
$db->query(" insert into `users` (username , email , password ) values ( '$this->username' , '$this->email' , '$this->password' ) ");
}
public function delete( ){
$db->query(" delete from users where id = $this->id ");
}
}
但是这个过程非常慢,而且大多数模型所做的都是基本的 CRUD 操作……所以我对几乎所有控制器都使用一个单一的 CRUD 模型,例如:
class crud_model {
public function save( $tbl , $data ){
$db->query(" insert into $tbl ( ".explode( ',' , array_keys($data) )." ) values ( ".explode( ',' , $data )." ) ");
}
public function delete( $tbl , $data ){
$db->query(" delete from $tbl where $data['column'] = $data['val'] ");
}
}
请注意,这是我的模型的一个非常简化的版本,基本上它与原始代码完全不同(我在原始代码中使用活动记录,它可以处理复杂的场景)所以忽略语法和技术错误
所以我想知道这种方法是否有问题?我错过了什么吗?
当你可以使用一个 CRUD 模型时,拥有很多模型有什么意义....这似乎是在浪费时间
您的方法不一定错误。作为程序员,我们希望事情保持一致,这样当您必须修改代码时,您不必担心一个 table 模型与另一个 table 模型的工作方式不同。我们也很懒惰(以一种好的方式),因此您希望能够编写一次 CRUD class 并在任何地方使用它。你已经用你的单一 class 想法完成了那部分。
但是,如果您使用 CRUD class 然后让所有 table 模型继承它,您将获得只编写一次代码的好处,如果您需要做一些事情使用不属于基本 CRUD 代码的 table,您可以轻松覆盖或添加到子 table class.
中的功能就使用模型来代表您的 table 的 模式 而言,您目前的方法无法真正代表个人 tables 带有通用的 CRUD class。模型 classes 通常会有额外的 class 属性,这些属性特定于所表示的 table。这允许您设计 classes,以便在它们被重用时,开发人员可以更好地理解底层数据结构。查看原始问题中 User
class 的示例。 class 具有 $id
、$username
和 $password
等属性。开发人员可以查看它并确切地知道创建新用户需要什么。