Php 域模型MVC中的本机DB查询
我已经构建了一个MVC应用程序,其中的模型层包含实体、数据映射器和服务类。到现在为止,一直都还不错。但现在我有了一个控制器,它需要显示一个报告,其中包含来自多个db表的数据,与模型中的任何实体都没有关系。该报告是从一个高级MySQL查询中生成的,该查询包含连接、SUM/AVG selects。我想要的只是一个数据数组,所以可以在视图中显示Php 域模型MVC中的本机DB查询,php,model-view-controller,domain-driven-design,Php,Model View Controller,Domain Driven Design,我已经构建了一个MVC应用程序,其中的模型层包含实体、数据映射器和服务类。到现在为止,一直都还不错。但现在我有了一个控制器,它需要显示一个报告,其中包含来自多个db表的数据,与模型中的任何实体都没有关系。该报告是从一个高级MySQL查询中生成的,该查询包含连接、SUM/AVG selects。我想要的只是一个数据数组,所以可以在视图中显示 我可以在服务层中混合使用方法吗?一些方法返回实体(“getById()”),另一些方法仅从数据库查询中返回数据数组(“getAdvancedReport()”
报表
对象没有域逻辑,您甚至可以使用活动记录。语用方法是在潜在领域对象只有CRUD且没有领域逻辑时使用它们。如果有一些计算,请坚持使用域对象+数据映射器对
服务层用于应用程序逻辑,而不是存储逻辑。其中应该没有SQL。服务应该主要控制未确定的域对象和映射器的混合之间的交互。邮件服务和类似结构除外
此外,在线报告通常是动态的。您可以对数据进行排序、过滤和其他操作。您将得到一个服务,该服务可以操作报表
对象,对其应用过滤器或从所述对象提取数据。所有这些修补都是“应用程序逻辑”
就这样。。。我的啤酒喝光了
我可以在服务层中混合使用方法吗?一些方法返回实体(“getById()”),另一些方法仅从数据库查询中返回数据数组(“getAdvancedReport()”)
是的,但我要纠正你的句子:有些返回实体,有些只返回数据数组
=>服务用户不关心实体/数据来自何处。因此,是的,您的服务可以返回实体和原始数据(基元类型数组)
将db查询放在服务层中可以吗
没有
如果没有,他们应该去哪里
在存储库/DAO中。可以在存储库中执行本机查询。这里不使用数据映射器,只是因为我们不需要映射实体
总而言之:
服务->getMyData()>Repository->getMyData()>DB query好吧,这并不是我想要的答案say@Matthieu有时候,一个更抽象的答案比直接回答更有价值是的,我对此有点困惑,但你的回答让我有点聪明这个问题的底部是MVC标签。。。您在谈论SOA。@tereško他在问题中谈论的是DDD和服务。我说的不是SOA,而是DDD。不要返回数据数组,返回可以迭代的数据。@hakre不能迭代数组吗?当然,他可以将数据封装到他喜欢的任何类中,但数组或数据对我来说似乎也很好。@tereško问题的重点是Mysql数据库域还是模型域模型?