为什么SELECT *不好做法?如果添加了您想要的新列,是不是意味着要更改的代码更少?
我知道这SELECT COUNT(*)是一些DB上的性能问题,但是如果你真的想要每一列呢?
假设每当我进行CRUD操作或以特定方式修改关系时,我也想做其他事情.例如,每当有人发布帖子时,我也想将某些内容保存到表中进行分析.也许不是最好的例子,但总的来说有很多这种"分组"的功能.
通常我会将这种逻辑放入控制器中.在你想要在很多地方重现这个功能之前,这一切都很好.当你开始进入局部,创建一个API并生成虚拟内容时,就会出现干涸问题.
我看到管理它的方法是事件,存储库,库和添加到模型.以下是我对每个人的理解:
服务:这是大多数人可能会放置此代码的地方.我对服务的主要问题是,有时很难在其中找到特定功能,我觉得他们会忘记人们何时专注于使用Eloquent.我怎么知道我需要publishPost()在库中调用方法$post->is_published = 1?
我看到这个工作得很好的唯一条件是,如果你只使用服务(理想情况下,Eloquent不能以某种方式从控制器一起无法访问).
最终,如果您的请求通常遵循您的模型结构,这似乎只会创建一堆额外的不必要的文件.
存储库:从我的理解,这基本上就像一个服务,但有一个接口,所以你可以在ORM之间切换,我不需要.
事件:从某种意义上说,我认为这是最优雅的系统,因为你知道你的模型事件总是会在Eloquent方法中被调用,所以你可以像往常一样编写你的控制器.我可以看到这些变得混乱,如果有人有大型项目的例子使用事件进行关键耦合,我希望看到它.
模型:传统上我会有类执行CRUD并处理关键耦合的类.这实际上让事情变得简单,因为你知道CRUD的所有功能+无论如何都要做到这一点.
很简单,但在MVC架构中,这通常不是我所看到的.从某种意义上说,虽然我更喜欢这种服务,因为它更容易找到,而且需要跟踪的文件较少.但它可能会有点混乱.我想听听这种方法的失败,以及为什么大多数人似乎都没有这样做.
每种方法有哪些优点/缺点?我错过了什么吗?
存储库和服务之间有什么区别?我似乎没有抓住它.
我在谈论通过数据访问层进行数据访问,通常使用linq到sql.
我经常看到使用简单CRUD方法的存储库,以及具有更多业务特定方法的服务.
我们可以以此博客文章为例.如果你看一下底部的接口(图像),他有两个存储库和两个服务.怎么知道放在哪里?
正如我所说,对于类似CRUD的操作和服务更加面向业务,存储库似乎更多.
谢谢
这个问题类似于PHP中的Mysql结果 - 数组或对象?但是,我的问题扩展到那里讨论的内容.
我正在尝试确定哪种格式更适合处理数据库结果:对象或数组.我不关心性能(据我所知,它没有什么区别).我的重点更多的是显示结果 - 不创建,更新或删除它们.
到目前为止,我总是使用像mysqli_fetch_objectPDO这样的函数来使用对象fetchObject.这通常很好用,直到我开始做连接.连接导致奇怪的对象,这些对象是来自两个或多个表的字段的混合.我的代码很快就开始变得混乱.
我应该注意,我正在分配特定的类名,而不是坚持默认stdClass.我这样做,以便我可以访问我在我的类中创建的任何帮助方法.例如:
foreach ($members as $member)
{
echo $member->full_name();
echo $member->age();
}
Run Code Online (Sandbox Code Playgroud)
为了清楚起见,我正在考虑为我的所有数据库结果移动到数组.从我读过的其他人也这样做.但是,这让我没有简单的方法来访问我的帮助方法.
使用上面的例子,我想我可以输出名字和姓氏而不是使用full_name()方法,这不是什么大问题.至于age()方法,我想我可以创建一个通用实用程序类并将其放在那里.
我对如何使用MVC执行插入和更新语句感到有点困惑.是否可以在控制器中创建对象的实例并将其传递给您的服务以保存它,或者您是否将数据传递给您的服务并处理其中的所有其他内容?
插入
在我的控制器中,例如:
$userservice->insert("myname","mypassword");
Run Code Online (Sandbox Code Playgroud)
在我的UserService中:
function insert($username,$password){
$user = ORM::for_table('user')->create();
$user->username= $username;
$user->password= $password;
$user->save();
}
Run Code Online (Sandbox Code Playgroud)
更新
在我的控制器中,例如:
$userservice->update("myname","mypassword",1);
Run Code Online (Sandbox Code Playgroud)
在我的UserService中:
function insert($username,$password,$id){
$user = ORM::for_table('user')->find($id);
$user->username= $username;
$user->password= $password;
$user->save();
}
Run Code Online (Sandbox Code Playgroud)
这是好习惯吗?因为我看到很多这些答案,例如在控制器中创建用户并将其传递到存储库以保存它: PHP中的正确存储库模式设计? 但我不喜欢在控制器中创建用户的想法......