雄辩的ORM活动记录 - 这是正确的方法吗?

时间:2018-02-13 15:34:53

标签: php database laravel activerecord eloquent

我认为自从我开始反叛并质疑我所教过的一切以来,我终于达到了青春期的代码。我希望这里有人能指出我正确的方向。目前什么应该是简单和简短的任务,最终花费数小时,因为我坐下来盯着几行代码并质疑这是否确实是正确的方法...

这是一个例子。我们有一个系统可以让User在该帖子中创建PostMention个人。我们有一个获取请求的控制器,然后将其发送到PostService,后者的方法如下:createPostByUser(int $id, string $title, string $content)并最终发送到保存帖子的$postingUser->post($title, $string)

在createPostByUser方法中,我们将检查是否有任何@mentions,然后我们将其传递给MentionService。因此,在这种情况下,我们将访问:$mentionService->createMentionByUser(int $id, string $username, Mentionable $mentionable)然后检查提及的用户($ id)和提到的用户($ username)是否存在或者甚至可以恢复提及(如果它已存在但是软删除)。如果它不存在且无法恢复并且两个用户都有效,那么我们将继续致电$mentioningUser->mention($mentionedUser),其中将保存提及。

虽然这一切都有效,但我开始看到它有些问题。什么会阻止新开发人员跳过服务层并直接进入用户对象并使用这些方法?我的意思是,在MentionService中,我们在保存提及之前检查一切是否正常,例如检查两个用户是否都有效,如果提及应该恢复。什么会阻止一个新的不知情的开发人员直接进入用户对象,只是在不考虑两次的情况下创建一个新的提及?

希望有人能指出我正确的方向。我们在这里走在正确的轨道上吗?

我只是在想事情吗?

2 个答案:

答案 0 :(得分:2)

我认为这个问题无法以技术方式解决。任何设计模式和任何建筑风格都可能以某种方式被误解和故意绕过。这个问题可以在组织层(在您的团队中)解决。一种可能性是,例如代码审核培训文档。最重要的是带分支和拉取请求的代码审查。随着时间的推移,您可以为新开发人员实现学习效果并防止新的失败。

答案 1 :(得分:1)

我的观点是,您首先要问自己,您正在构建什么样的软件/应用程序。如果您要构建Enterprise个应用程序,我会使用Services,因为您的Services将包含业务逻辑,而您的Controllers将包含应用程序逻辑,这样您就可以将这两个应用程序逻辑分开随着应用的增长,将帮助您极大地调试代码。如果你正在构建一个基本的CRUD应用程序而不是我没有看到创建Services的重点,那么这只是我的观点,因为有no right approach,它真的是的情境。