我正在用 PHP 编写一个相当简单的“事实数据库”(使用 Codeigniter .. 但我正试图摆脱框架内部以进行学习),并试图改进我的 MVC/OOP 实践。
以前我会这样做:一个事实模型、一个用户模型、一个源模型……在每个模型中,我会为每个模型放置 CRUD 逻辑。所以它看起来像这样..
$this->fact_model->save($fact);
$this->user_model->deactivate($uid);
$this->source_model->get_id($sid);
但是在阅读更多之后,似乎有一个单独的持久性模型(即'database_model')是有意义的。但似乎它必须为每种类型的对象包含全范围的 CRUD,这对我来说似乎很浪费。我想我正在寻找如何去这个......
$this->db_m->save(Fact $fact);
$this->db_m->update(User $user);
// .. etc .. but also ..
$this->db_m->get_user_id($uid);
// .. and ..
$htis->db_m->get_all_facts();
这是朝着正确的方向前进吗?我是否只是在数据库模型中测试类型并在需要时进行切换?或者我是否为每种类型的对象扩展数据库模型?
$this->fact_db_m->save(Fact $fact);
$this->fact_db_m->get_all();
$this->source_db_m->get_id($sid);
或者类似的东西,我猜这是最接近 CIs AR 实现的。
$this->db_m->save('facts', Fact $fact);
$this->db_m->get('user', array('id'=>$uid));
我想这是“活动记录与存储库”的情况。我知道存储库更容易测试,并且 CRUD 逻辑与对象数据是分开的,这种分离对我来说很有意义。但是仍然......这意味着您必须为每个实体编写一个单独的存储库模型。这是正确的吗?
顺便说一句 - 我知道 Codeigniter 有一个 Database 类并使用活动记录,在某种程度上我只是用其中一些方法重新创建它。我只是想在不依赖框架内部的情况下理解事物。任何意见?只是选择的问题吗?