php - 域模型 MVC 中的 native 数据库查询

标签 php model-view-controller domain-driven-design

我构建了一个 MVC 应用程序,其模型层包含实体、数据映射器和服务类。到目前为止,一切都很好。但是现在我有一个 Controller 需要显示一个报告,其中包含来自多个数据库表的数据,与我的模型中的任何实体都没有关系。该报告是根据包含连接、SUM/AVG 选择的高级 MySQL 查询构建的。我想要的只是一个数据数组,以便在 VIEW 中显示。

  1. 我能否在我的服务层混合方法,一些方法返回实体(“getById()”),一些方法只返回来 self 的数据库查询的数据数组(“getAdvancedReport()”)?

  2. 可以将数据库查询直接放在服务层吗?如果没有,他们应该去哪里?数据映射器感觉不对,因为它的工作只是将我的实体映射到数据库,而不是检索自定义数据。

也许只是“编码官僚主义”,但我需要正确地做到这一点。

除了域模型的简单 CRUD 示异常(exception),在网上找不到任何东西。

最佳答案

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

您似乎对拥有数据映射器甚至一般领域对象的意义有点困惑。

数据映射器负责存储(有时是 SQL 数据库)和域对象之间的信息交换。如果你有一点规范化的数据库结构,数据库实体和域对象将不会 1:1 映射。映射器是为特定领域对象制作的,而不是为数据库表制作的。一个领域对象甚至可以有多个映射器(例如:一个映射器将数据存储在 DB 中,另一个映射器在 session 中)。

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

服务层用于应用逻辑,而不是存储逻辑。里面应该没有SQL。服务应该主要管理域对象和映射器的未确定组合之间的交互。邮寄服务和类似结构除外。

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

that's it ... I run out of beer

关于php - 域模型 MVC 中的 native 数据库查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13581673/

相关文章:

php - 公理 : Network Error with Vuejs

php - Amazon S3 - deleteObjects() - "guzzle"错误?

asp.net-mvc-4 - MVC - 存储安全信息

asp.net-mvc - 使用 IIS 的 MVC "Access is Denied"

constructor - DDD + 公共(public)无参数构造函数——它们应该存在吗?

php - 反射异常 : Class ClassName does not exist - Laravel

php - 将 php 连接到 mysql

ruby-on-rails - 如何在 rails 中添加具有多个条目的特定迁移

orm - 工作单元和存储库模式的实际使用

domain-driven-design - 领域驱动设计、事件溯源和不断发展的模型