我正在用 PHP 编写自己的 MVC 框架,仅用于学习目的。拥有一个路由器/调度程序类来调用正确的控制器/动作等并不难。
但现在我正处于我将要使用模型的部分。或者实际上,模型层。但是有一点让我很困惑。
许多其他 MVC 框架都有一个“BaseModel”。我读过这实际上是不好的做法,因为“模型”不应该被视为另一个类。但作为一个真正的“层”,它可以包含“映射器”模式或“存储库”模式等。
但老实说,我看不出这有什么好处。对我来说,“BaseModel”课程似乎是最快的方法,结果相同。
我可以简单地做类似的事情:
class User extends BaseModel
{
// the GetUserBy* could easily be something that's handled by the
// BaseModel class, like in the Repo pattern.
public function getUserByName ( $name )
{
// no error handling of any kind, just for simplicity
return $this->db->exec("SELECT * FROM users WHERE name='".$name."'");
}
// $data = array
public function saveUser ( $data )
{
// Make sure no extra fields are added to the array
$user = array ( 'name' => $data['name'],
'address' => $data['address']);
$this->db->autoSave ( $user );
}
}
但是,如果我选择存储库模式,那么我必须创建以下内容:存储库实体 DAO
实体具有到其他存储库的聚合。所以基本上我正在手动将我的整个数据库方案写出到对象......
最后,有什么区别???除了我可能只需使用 BaseModel 类就可以节省很多时间......
但是为什么它仍然被认为是一件坏事呢?并不是说 repo 模式比我现在做的更能解耦我的应用程序。因为对我来说,上面提到的那些模式似乎被高估了。它可能只适用于具有共享状态的应用程序;将对象保存在本地(在存储库中)并稍后提交。
这就是为什么我认为没有人能真正回答这个问题......
但我仍然希望看到一个体面的答案让我走:“啊……我在想什么……”。但如果不是,那么我确信 BaseModel 根本不是一件坏事,而且大多数博主只是一群羊 :-)