Laravel 5 Laravel存储库模式和多对多关系
在我们的新项目中,我们决定使用六边形结构。我们决定使用存储库模式来获得更多的数据访问抽象。我们使用命令总线模式作为服务层。 在我们的仪表板页面中,我们需要大量数据,因此我们应该使用3级多对多关系(用户->项目->技能->审查),并且技能应该是活动的(状态=1) 问题来了,我应该把这个放在哪里Laravel 5 Laravel存储库模式和多对多关系,laravel-5,repository-pattern,ddd-repositories,Laravel 5,Repository Pattern,Ddd Repositories,在我们的新项目中,我们决定使用六边形结构。我们决定使用存储库模式来获得更多的数据访问抽象。我们使用命令总线模式作为服务层。 在我们的仪表板页面中,我们需要大量数据,因此我们应该使用3级多对多关系(用户->项目->技能->审查),并且技能应该是活动的(状态=1) 问题来了,我应该把这个放在哪里 $userRepository->getDashboardData($userId) 2.$userRepository->getUser($userId)->withProjects()->withAct
在使用ActuvReCordD对象的情况下,您可以考虑在存储库上使用特定的方法来加载正确配置的成员对象。代码>$members->allIncludingSkills()或者类似的东西这是因为在返回多个实体时必须求解N+1。然后,需要对结果集使用即时加载,而不希望对每个请求使用相同的即时加载配置。。因此,您需要一种方法来描述每个请求的配置。。一种方法是针对不同的请求在存储库上调用不同的方法
然而,对我来说。。我不希望有一堆只有..的东西。。无限延伸。。例如您可以拥有$member->posts[0]->author->posts[0]->author->posts[0]->author->posts[0]
我更喜欢让事情尽可能“平淡”。
$member = $members->withId($id);
$posts = $posts->writtenBy($member->id);
或者类似的。(只是在头顶上打字)
没有人喜欢成吨的嵌套数组,ActiveRecord可能被滥用,以至于其对象本质上是带有方法的数组,并且可能无限嵌套。因此,虽然它是处理数据的一种方便方式。我会努力防止滥用人际关系作为一个概念,并尽可能保持你的结构平坦
在没有ORM“关系”功能的情况下编写代码是非常可能的。。这通常比较容易。。您可以看出,这个功能增加了很多麻烦,因为为了减轻痛苦,ORM必须提供多少功能
真的,这有什么意义?它只是让您不必使用特定成员的ID进行查找?我想,也许循环一大堆不同的东西更容易些
只有在ActiveRecord情况下,如果您希望能够单独测试代码,存储库才真正特别有用。否则,您可以使用Laravel的内置功能创建作用域等等,以防止到处都需要冗余(因而是脆弱的)查询逻辑
创建专门针对UI的模型也是完全合理的可以有多个ActiveRecord模型使用相同的数据库表,例如,仅用于特定用户界面用例。例如,仪表板。如果你有一个新的用例。。您只需创建一个新模型
这个,对我来说。。是设计系统的核心。自问。。好的,当我们有一个新的用例时,我们必须做什么?如果答案是肯定的,那么我们的架构就是这样的,我们只需要做这个和这个,而不必真的去搞乱其他的。。那太好了!否则,答案可能更像。。我不知道。。我想修改一下一切,希望它能起作用
有很多方法可以解决这个问题。但是,我建议避免使用大量复杂的工具来换取更简单的方法/解决方案。存储库是一种提取数据持久性以允许隔离测试的好方法。如果您想单独测试,请使用它。但是,我不确定我对ORM关系如何与对象模型协同工作有多感兴趣。
$member = $members->withId($id);
$posts = $posts->writtenBy($member->id);
例如,我们是否有包含以下内容的大型成员对象
- 该成员曾经留下的所有评论
- 成员拥有的所有技能
- 该成员提出的所有建议
- 所有好友邀请会员已发送
- 成员已建立的所有朋友
只有我的2美分。我非常感谢你花时间帮助我。我也喜欢尽可能地保持事物的平面,但是N-N关系打破了这种关系