我正在编写一个应用程序,其中大部分跑腿工作都是在模型中完成的,模型执行 2 组(相当不同的)任务:-
- CRUD 数据库操作
- 创建
Table
、Form
和ContentBox
对象,并使用数据库中的数据进行填充
因此,一些模型相当大,因此我设置了 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/