数据库
首页 > 数据库> > php – 域模型MVC中的本机数据库查询

php – 域模型MVC中的本机数据库查询

作者:互联网

我有一个MVC应用程序,其中包含一个包含实体,数据映射器和服务类的模型层.到现在为止还挺好.但是现在我有一个控制器需要显示一个报告,其中包含来自多个数据库表的数据,与我模型中的任何实体无关.该报告是根据包含连接,SUM / AVG选择的高级MySQL查询构建的.我想要的只是一个数据数组,所以在VIEW中显示.

>我可以在服务层中混合方法,一些返回实体(“getById()”)和一些只返回数据库查询数据(“getAdvancedReport()”)的方法?
>将db-queries放在服务层中是否可以?如果没有,他们应该去哪里?数据映射器感觉不对,因为它的工作只是将我的entites映射到数据库,而不是检索自定义数据.

也许只是“编码官僚机构”,但我需要这样做.

除了域模型的简单CRUD示例之外,无法在网上找到任何内容.

解决方法:

Not really an answer .. more like pontifications with bottle of beer

对于拥有数据映射器甚至关于域对象的观点,你似乎有点困惑.

数据映射器负责存储(有时是SQL数据库)和域对象之间的信息交换.如果您甚至有一个规范化的数据库结构,则数据库实体和域对象将不会映射1:1.映射器是针对特定域对象而不是针对数据库表.单个域对象甚至可以有多个映射器(例如:一个映射器将数据存储在DB中,一个映射器存储在会话中).

如果您的Report对象没有域逻辑,您甚至可以使用活动记录.实用的方法是在潜在域对象仅具有没有域逻辑的CRUD时使用它们.如果有一些计算,坚持使用域对象数据映射器对.

服务层用于应用程序逻辑,而不是存储逻辑.它中应该没有SQL.服务应该主要控制域对象和映射器的未确定混合之间的交互.邮件服务和类似结构除外.

此外,通常在线报告是动态的.您可以订购数据,过滤数据并进行操作.您最终会得到一个服务,它可以操作Report对象,对其应用过滤器或从所述对象中提取数据.所有这些修补都是“应用逻辑”.

that’s it … I run out of beer

标签:php,domain-driven-design,model-view-controller
来源: https://codeday.me/bug/20190826/1725270.html