[英]Repository pattern design
我正在将包含控制器的代码重构为存储库设计。
我发现困难的部分,考虑特定域/功能的责任。
我有一个ExchangeController
,它有一个trade
方法。 在这种方法中,可以改变一个Shift
与另一个移位。
所以我在考虑使用交易方法建立一个ExchangeRepository
,但是我必须检索一个Shift
。
直接从模型中检索Shift
( Shift::find($id)
),但是通过调用$shiftRepository->get($shiftId)
来封装它不是不好的做法吗?
我开始学习它,但有时很难搞清楚一些事情。 尝试将大多数事物封装到自己的内容中,而不仅仅是为模型进行扩展,这是一种好的做法吗?
我希望它有点清楚,哈哈...
存储库的主要思想是隐藏数据库操作与其他代码。 您不需要为每个模型或每个表都有一个存储库。 这将导致非常严重的后果:无法对数据库执行复杂查询。 你必须将它们分成小的简单的,每个都对着它自己的表。
直接从模型中检索Shift(Shift :: find($ id)),但是通过调用$ shiftRepository-> get($ shiftId)来封装它不是不好的做法吗?
我其实不喜欢称之为“不良做法”。 这完全取决于。
直接在控制器中调用模型收集方法可能看起来更简单,编写速度更快,但随着应用程序复杂性的增加,您将开始遇到麻烦。 例如,尝试使用通过代码溢出的Model::queryMethod()
的调用向您的应用程序添加缓存。
因此,作为摘要,我建议您将查询拆分为存储库。 明智地选择存储库。 不要注意表名,而应关注应用程序的域逻辑。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.