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

时间:2013-08-20 11:40:43

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

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

  1. CRUD数据库操作
  2. 创建TableFormContentBox个对象,填充数据库中的数据
  3. 结果有些模型非常大,所以我从Illuminate Database component设置了Laravel framework,我正在考虑使用Eloquent ORM来创建执行CRUD的模型然后生成表格和表格的单独模型,在Eloquent模型中调用方法来获取数据。

    域驱动设计中这两种不同“模型”的正确用法是什么?我是否称为执行CRUD 实体的模型和其他模型模型

    我已经阅读了一些相关的帖子,我知道模型是现实世界中的某种模型。例如,我有一个名为Invoices的模型,其中包含用于创建新发票的Form对象和用于列出所有发票的Table对象的方法。但它也有一种方法可以返回单张发票的PDF。所以这不是单一发票的模型 - 它能够为多张发票返回数据......这还是一个模型吗?

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

    提前致谢。

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

2 个答案:

答案 0 :(得分:2)

在您的情况下,我认为表格或表格不是域名模型。

域模型反映了您的核心业务概念。例如,您可以通过调用invoice.isOverdue()

来回答发票是否过期

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

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

public class Invoice {

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

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

答案 1 :(得分:1)

通常的做法是在Models文件夹中设置laravel中的模型。我相信您正在寻找的是名为存储库的存储库,并将其添加到composer.json文件中的自动加载部分。

将轻量级控制器和模型真正用于包含所有额外逻辑,这被认为是一种很好的做法,因此拥有存储库可以帮助您保持应用程序非常有条理。