极其简单的表还需要自己的模型类吗?

Posted

技术标签:

【中文标题】极其简单的表还需要自己的模型类吗?【英文标题】:Do extremely simple tables still require their own model class? 【发布时间】:2013-11-24 00:55:16 【问题描述】:

我已经使用 laravel(php mvc 框架)几个星期了。目前我正在为每个非数据透视表创建一个模型。甚至像这样简单的表格:

id (unsigned int (PK)) |用户类型 (varchar(20))

1                            |客人

2                            |会员

3                             |版主

因为使用 eloquent ORM 可以更轻松地将我的其他模型与它们关联起来。

我想知道为了利用 ORM 为这种简单的表创建模型是否正常,或者是否有更好的方法?

目前我的应用程序正在使用这些表的模型运行,但我仍然想确保我在学习时掌握了良好的编码约定。

提前致谢。

【问题讨论】:

简短回答:是的!如果你有一个模式,坚持下去...... 如果你不介意我要求长答案? :) 实际上,在你的域逻辑中镜像数据库表通常是糟糕设计的标志(你可以称之为 - 设计气味)。在您的特定情况下,您实际上需要一个制作精良的User(或者可能是Account)实体,它表示来自多个表的信息。 【参考方案1】:

答案很长:是的!

我不知道model 何时或为何成为entity 的同义词,但这会导致混淆。

根据 MVC 发明者 Trygve Reenskaug 在original MVC article 中的说法:

定义 模型是计算系统中数据形式的抽象的主动表示

[...]

模型在计算机中表示为数据集合以及处理这些数据所需的方法。

所以,现在很多人(错误地)将模型定义为数据表示、数据存储或其他东西,但这是错误的。

模型处理您的应用程序逻辑,这包括数据抽象、数据存储、数据处理等。

我习惯将我的数据抽象称为Entity,而不是model。我的应用程序模型层称为ServiceApplication Model。我的存储层就叫Storage等等......所有这些我们都可以叫Model

说清楚了,现在我们可以继续...

你说:

因为使用 eloquent ORM 可以更轻松地将我的其他模型与它们关联起来。

够了!

没有什么可以阻止您使用计划 txt 文件作为存储,但如果您的数据与其他数据相关,那么您应该寻找一个数据库。

Eloquent 是一个 ORM(对象关系映射),因此它依赖于它背后的数据库。如果使用 txt 文件,如何按用户类​​型恢复用户?

我不习惯框架,但大多数都是自动生成实体的,你只需要声明它们...

如果某个实体没有业务逻辑,而您只需要存储它,那么您就不需要为其提供“完整模型”。这就是你正在做的事情。

希望我说服了你...

【讨论】:

正如所指出的(我认为?)“模型”是一个非常宽松的名称。 Eloquent 是一个 ORM,是 Active Record 设计模式的一种实现。在这种情况下,“模型”既负责(A)查询数据库(B)代表“实体”——业务逻辑的一部分。这可以与更多领域驱动的应用程序设计形成对比,在这种设计中,您可以将实体与用于创建/存储实体表示的数据源的查询分开。一些建议:很有可能,在您的应用程序中使用 ORM 是最好的方法。 是的,数据存储可以是模型的一部分,但并非总是如此。想象一个只对数据进行功能计算的模块。它有它的模型(逻辑),但根本没有存储......

以上是关于极其简单的表还需要自己的模型类吗?的主要内容,如果未能解决你的问题,请参考以下文章

当实体的表还不存在时,实体框架的行为是啥?

mysql为啥被设了外键的表还能被删掉?

多个 REST API 方法可以共享同一个控制器类吗?

ghost版win7安装

我应该定义模型类吗?

django 模型可以嵌入类吗?