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

Php 雄辩的ORM活动记录-这是正确的方法吗?,php,database,laravel,activerecord,eloquent,Php,Database,Laravel,Activerecord,Eloquent,我想我终于进入了代码青春期,因为我开始反抗并质疑我所学到的一切。我希望这里有人能给我指出正确的方向。目前,什么应该是简单和简短的任务,最终花了几个小时,因为我坐在那里盯着几行代码,并质疑这是否是正确的方法 这里有一个例子。我们有一个系统可以让用户创建一个帖子,并提及该帖子中的某个人。我们有一个获取请求的控制器,然后将请求发送到一个PostService,该PostService具有如下方法:createPostByUser(int$id,string$title,string$content),

我想我终于进入了代码青春期,因为我开始反抗并质疑我所学到的一切。我希望这里有人能给我指出正确的方向。目前,什么应该是简单和简短的任务,最终花了几个小时,因为我坐在那里盯着几行代码,并质疑这是否是正确的方法

这里有一个例子。我们有一个系统可以让
用户
创建一个
帖子
,并
提及该帖子中的某个人。我们有一个获取请求的控制器,然后将请求发送到一个PostService,该PostService具有如下方法:
createPostByUser(int$id,string$title,string$content)
,并最终发送到
$postingUser->post($title,$string)
保存post的位置

在createPostByUser方法中,我们将检查是否有任何
@提及
,然后将其传递给提及服务。因此,在本例中,我们将访问:
$sinetingservice->createsinetingbyuser(int$id,string$username,sinetitable$sinetitable)
,然后检查提及的用户($id)和提及的用户($username)是否存在,或者如果提及已经存在但已被软删除,甚至可能恢复提及。如果它不存在并且无法恢复,并且两个用户都有效,那么我们将继续调用
$sinetinguser->title($sinetieduser)
,保存该提及

当所有这些都起作用时,我开始发现它有一些问题。怎样才能防止新开发人员跳过服务层,直接进入用户对象并使用这些方法呢?我的意思是,在提及服务中,我们在保存提及之前检查一切是否正常,比如检查所需的两个用户是否有效,提及是否应该恢复。等等。什么能阻止一个新的不知情的开发人员直接进入用户对象,不经再三考虑就创建一个新的提及

希望有人能给我指出正确的方向。我们走对了吗


我是不是想得太多了?

我的观点是,你首先要问问自己,你在构建什么样的软件/应用程序。如果您正在构建
企业
应用程序,我将使用
服务
,因为您的
服务
将包含业务逻辑,而
控制器
将包含应用程序逻辑,这使您能够将这两个应用程序分离开来,并在应用程序增长的过程中极大地帮助您调试代码。如果您正在构建一个基本的
CRUD
应用程序,那么我不认为创建
服务有什么意义,但是,这只是我的观点,因为
没有正确的方法,这确实是情况。

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

谢谢您的回答。正如你所说,这是情境性的,因此没有正确的解决方案,但我的问题主要适用于我目前的工作。我们是一家半大型社交媒体,每天有5-10万新用户。所以很多事情都会出错!在basic CRUD中,我不会想太多,但在我们的平台上,情况就不同了。如果事情出了差错,那么付出代价的不仅仅是我们。