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


Confused about model/entity meaning and separation of CRUD and business logic

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

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

因此,有些模型相当大,所以我从Laravel框架中设置了Illuminate数据库组件,我正在考虑使用Eloquent ORM创建进行CRUD的模型,然后有单独的模型来生成表和表单,调用Eloquet模型中的方法来获取数据。

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

我读过一些相关的帖子,我明白模型是现实世界中的一个模型。例如,我有一个名为Invoices的模型,它有返回Form对象、创建新发票和列出所有发票的Table对象的方法。但它也有一种返回单个发票PDF的方法。因此,这实际上不是一个单一发票的模型——它能够返回多个发票的数据。。。这还是一个模型吗?

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

提前谢谢。

更新因此,在阅读本文之后,我认为Laravel所称的模型(在向其添加业务逻辑之前)实际上是一个实体。所以,我计划做的是有一个名为Entities的文件夹,其中包含我的ORM"模型",另一个名称为Models的文件夹,中包含业务逻辑"模型"——这是常见的做法吗?

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

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

另一方面,表用于列出发票,outport-pdfs负责处理表示问题。

预设组件依赖于域对象,但反之亦然。例如,您可以在html页面上列出发票,也可以通过pdf输出发票。但你可能不希望代码看起来像这样:

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

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

在models文件夹的laravel中设置什么是模型是常见的做法。我相信您正在寻找的是所谓的存储库,您可以为其创建一个文件夹,并将其添加到composer.json文件的自动加载部分。

拥有轻量级控制器被认为是一种很好的做法,而模型实际上并不打算包含所有额外的逻辑,因此,在存储库中放置所有繁重的工作将有助于保持应用程序的组织性。