我正在开发一个具有许多雄辩模型的Laravel应用程序。这些雄辩的模型(例如User、Post等)还包含许多仅与模型(通常是原始sql)松散连接的查询。
有些查询是这样的:“从一个表中获取一些信息,从另一个表中获取一些信息,并从第三个表中获取一些信息”。现在,像用户模型这样的模型可以有很多像getAllUncompletedActionsForUser或getSessionsDurationsPerUser这样的方法。我认为,如果一个雄辩的模型有数千行代码,那就不好了。
你对拆分这些模型有什么看法,你会把这些模型放在哪里,以及如何命名返回数据库结果的类,这些类处理许多不同的表?
发布于 2017-11-27 04:14:52
欢迎来到active record模式的瓶颈。这就是为什么这么多人把它称为反模式。
与其试图在同一个类中挤压更多的功能,不如开始将仅与之模糊相关的持久性逻辑转移到独立的data mappers中。
有点像这样:
$user = App\Entity\User::find($id);
$mapper = new App\Mapper\UserActions($dbConnection);
$mapper->fetchIncompleted($users);
var_dump($user->getActions(App\Entity\User::ACTION_INCOMPLTE));当然,您可能希望使用IoC (如果可能)在给定服务中注入这些映射器,而不必在某个随机位置使用new运算符。
发布于 2017-11-27 03:27:39
您是否考虑过使用Traits
如果由我决定,我会创建一个文件夹App/Traits,并具有例如一个具有getAllUncompletedActionsForUser()功能的UserActions特征。
特征UserActions可以在任何适当的类/模型中使用。
https://stackoverflow.com/questions/47498784
复制相似问题