加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 存储库模式与ORM

发布时间:2020-12-13 17:18:54 所属栏目:PHP教程 来源:网络整理
导读:有ORM时存储库模式有什么用? 例.假设我有以下(虚构)表: 表:用户 pk_user_idfk_userrole_idusername 表:userroles fk_userrole_idrole 现在有一个orm我可以简单地把它放在一个模型文件中: $user = ORM::load('users',$id); 现在$user已经是我的对象,可以
有ORM时存储库模式有什么用?

例.假设我有以下(虚构)表:

表:用户

pk_user_id
fk_userrole_id
username

表:userroles

fk_userrole_id
role

现在有一个orm我可以简单地把它放在一个模型文件中:

$user = ORM::load('users',$id);

现在$user已经是我的对象,可以轻松加载:

(如果事物是??自动的单数/复数,会更好)

foreach ( $user->userroles()->role as $role )
{
    echo $role;
}

现在使用Repository模式,我必须为Users创建一个存储库,为Roles创建一个存储库.存储库还需要各种函数来为我检索数据并存储它.此外,它需要与Entity模型一起使用.所以我也必须创造所有这些.

对我来说,看起来很多东西…当我可以简单地获得像上面描述的ORM数据.而且我可以轻松存储它:

ORM ::店($用户);

在这种情况下,它不仅会将用户对象存储到数据库中,还会将对“角色”对象所做的任何更改存储起来.所以不需要像存储库模式那样需要任何额外的工作……

所以我的问题基本上是,为什么我要使用带有ORM的存储库模式?我已经看过教程在哪里使用该模式(与Doctrine一样).但它对我来说真的没有任何意义……任何人都可以解释它与ORM的结合使用.??

解决方法

ORM是存储库的实现细节. ORM使得以OOP友好方式访问db表变得容易.而已.

存储库抽象持久性访问,无论存储是什么.这是它的目的.事实上,您使用db或xml文件或ORM并不重要.存储库允许应用程序的其余部分忽略持久性详细信息.这样,您可以通过模拟或存根轻松测试应用程序,并且可以根据需要更改存储.你可能会使用MySql,明天你会想要使用NoSql或云存储.用ORM做到这一点!

存储库处理域/业务对象(从应用程序的角度来看),ORM处理数据库对象.业务对象不是数据库对象,首先是行为,第二个是美化的DTO,它只保存数据.

编辑
您可能会说存储库和ORM都抽象访问数据,但是恶魔在细节中.存储库抽象访问所有存储问题,而ORM抽象访问特定的RDBMS

简而言之,Repository和ORM具有不同的目的,正如我上面所说,ORM始终是repo的实现细节.

您还可以查看this post有关存储库模式的更多详细信息.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读