php – Laravel存储库模式说明
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php – Laravel存储库模式说明,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2727字,纯文字阅读大概需要4分钟。
内容图文
![php – Laravel存储库模式说明](/upload/InfoBanner/zyjiaocheng/789/569cf2229c3148f4a259e10604a3917a.jpg)
我正在使用Repository Pattern在我的Laravel 5.4项目中工作(我对这种模式很新).我在网上对此有很多不满,但我还有两个重要问题:
>问题#1:
想象一下,我使用Laravel ORM Eloquent,我有一个如下所示的界面:
<?php
namespace App\Repositories\User;
interface UserRepoInterface
{
/**
* @param array $user
*/
public function update(array $request, User $user);
}
你可以看到我已经像参数一样指定了eloquentUser模型.
雄辩的实现看起来像这样:
public function update(array $request, User $user)
{
$user->name = $request['name'];
$user->last_name = $request['last_name'];
$user->email = $request['email'];
$toUpdate->save();
}
所以我的问题:
在我的界面中对雄辩的用户模型进行硬编码是不对的?在网络上的很多例子中,我看到人们这样做,但是如果我想用基于文件的实现交换雄辩的实现呢?这是一个问题,因为我必须将User模型传递给更新方法!
如果我只声明$user而不是User $user,那么这个问题的解决方案是什么?
>问题2:
我该如何处理分页?
例如,在我雄辩的UserRepository中,我有一个如下所示的方法:
public function index()
{
return User::orderBy('name', 'asc')
->withCount('messages')
->with('corporation')
->paginate(10);
}
这是错的吗?我应该只在控制器中分页吗?
一个很好的解释会对我有所帮助.
解决方法:
问题1
Laravel使用ActiveRecord作为其模型数据访问层的模式.
这种模式的目标是使事情变得更容易,更快捷.当您使用Repository模式时,您有点逃避.
要真正使用存储库模式,您必须创建数据传输对象DAT(在Java中,它们称之为POJO).然后,使用Eloquent实体作为实体管理器.
POPO
class User {
private $id;
private $a;
public setId ($id) { $this->id = $id; }
public getId () { return $this->id; }
public setA ($a) { $this->a = $a; }
public getA () { return $this->a; }
}
实体经理
class UserEloquent extends Eloquent {
protected $_table = 'user';
}
知识库
class EloquentUserRepository implements UserReposistory {
private $em;
public __constructor (UserEloquent $em) { $this->em = $em; }
public update (User $dat) {
$user = $em->find($dat->getId());
$user->a = $dat->getA();
$user->save();
}
}
你能看出它有多详细吗?如果你真的想使用这种方法,我建议你使用Doctrine.
但是如果你想原样使用ActiveRecord,我建议你在rails项目上看到一些ruby!他们真的很擅长这种模式:)
现在我真正想到的是:做出对项目有益的事情.简单一点,与您的团队一起思考并为您构建最佳实践.不要总是使用相同的模式,因为有人告诉你.
如果项目小而快,请使用框架为您提供的内容(我不是说放松并制作错误的代码).如果这是一个大项目,团队中有很多开发人员,并且您知道最终您可能想要更改数据访问层,请考虑存储库模式.
当然,有时我们可以采取错误的架构决策,但这是我们学习的方式!并继续阅读模式,我认为你正在追随一个伟大的道路,成为一个伟大的建筑师:)
问题2
这取决于你上面的决定.如果它的Eloquent使用ActiveRecord,无论在哪里调用它(控制器或一些中产阶级).只需遵循一些模式.如果您在Controller中调用,请始终在Controller中执行此操作.否则你会迷失在你的代码中.
使用Repository,我认为在存储库中它很好:)
内容总结
以上是互联网集市为您收集整理的php – Laravel存储库模式说明全部内容,希望文章能够帮你解决php – Laravel存储库模式说明所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。