php - 对模型/实体含义以及 CRUD 和业务逻辑分离感到困惑

标签 php model entity domain-driven-design laravel-4

我正在编写一个应用程序,其中大部分跑腿工作都是在模型中完成的,模型执行 2 组(相当不同的)任务:-

  1. CRUD 数据库操作
  2. 创建 TableFormContentBox 对象,并使用数据库中的数据进行填充

因此,一些模型相当大,因此我设置了 Illuminate Database component来自Laravel framework我正在考虑使用 Eloquent ORM 创建执行 CRUD 的模型,然后使用单独的模型来生成表和表单,调用 Eloquent 模型中的方法来获取数据。

领域驱动设计中这两种不同“模型”的正确术语是什么?我是否将执行 CRUD 实体的模型称为实体,而其他模型称为模型

我读过一些相关的文章,并且我知道模型是现实世界中某些事物的模型。例如,我有一个名为 Invoices 的模型,它具有返回 Form 对象、用于创建新发票的方法和 Table对象,用于列出所有发票。但它还有返回单个发票 PDF 的方法。所以这实际上并不是单个发票的模型 - 它能够返回多个发票的数据...这仍然是一个模型吗?

抱歉,这里实际上有两个问题,我只是想知道正确的术语是什么,或者在我可以阅读到此类事情的地方寻找建议,以便我可以做一些被认为是最佳实践的事情,并将对其他程序员来说有意义。

提前致谢。

更新所以在阅读 this 后在我看来,Laravel 所谓的模型(在向其添加业务逻辑之前)实际上是一个实体。所以我打算做的是有一个名为 Entities 的文件夹,其中包含我的 ORM“模型”,另一个名为 Models 的文件夹,其中包含业务逻辑“模型” - is这是常见做法吗?

最佳答案

我不认为 Table 或 Form 是您的情况下的域模型。

域模型反射(reflect)了您的核心业务概念。例如,您可以通过调用invoice.isOverdue()来回答发票是否逾期

另一方面,列出发票、输出 pdf 的表格负责处理演示问题。

预设组件依赖于域对象,但反之则不然。例如,您可以在 html 页面上列出发票或通过 pdf 导出发票。但您可能不希望代码如下所示:

public class Invoice {

    Table list() {...}
    File  outport() {....}
    ...add another method for excel maybe? 
}

您可能对此感兴趣post组件的职责。

关于php - 对模型/实体含义以及 CRUD 和业务逻辑分离感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18334080/

相关文章:

php - PracticeController.php 第 0 行中的 FatalErrorException:方法 Illuminate\Database\Eloquent\Collection::__toString() 不得引发异常**

php - 我在更新 MySQL 表行时遇到问题

php - 我正在尝试在 Joomla 中添加一个插件,但它给了我一个 fatal error

java - 删除EventListener中的实体

java - 有没有办法在 JPA 中使用鉴别器值与实体继承建立双向关系?

Symfony 将实体管理器注入(inject)自定义验证器

php - 如何进一步增加我对 PHP 的 "advanced"知识? (迅速地)

python - 如何获取django模型的子类对象

php - Zend Framework 2 - Doctrine 2 - 如何处理 Zend 标准模型

c# - 嵌套对象不与服务器端模型映射