新手问题 rails 中的 table 和 database 是一个概念吗?

huangpuxiang · 发布于 2017年07月08日 · 最后由 sec 回复于 2017年07月09日 · 400 次阅读
96

model既不是资料库database也不是资料表table,所以它们是一个东西吗?源自(http://railsbook.tw/chapters/16-model-basic.html

共收到 6 条回复
1107

Rails 的 Model 指的是 Domain Model (领域模型),这个要去看一下 领域驱动开发 还有 领域模型的资料去,这个也不是 Rails 独有的概念。Active Record 选择的是领域模型中的充血模型

如果不是很精确地去理解的话,也可以把 Rails 的 Model 理解成 数据库表的实体类 + 业务逻辑

96

貌似现在理解这个概念有点难度

1

通常 Model 和 Table 一一对应。

Model = 数据(存于 Table)+ 逻辑

6e6ad3

什么是模型呢?最开始我也很奇怪,已经有数据库了,在再增加模型层有什么用呢?我们知道如果用非mvc等架构,我们是可以直接读写数据库的,但是你会发现每个地方都要去写sql,非常麻烦。这时如果我们通过模型层就可以不用重复sql语句了。

模型和数据库的结构是一致的,模型相当于给我们提供了一个接口,通过模型我们就方便的操作数据库了。

举个例子,有个数据表posts,他有两个字段,id和title,我们就建立一个Post模型,也就是建立名字是Post的类,在这个类里面我们建立许多的方法,去操作数据库。比如建个方法叫all,作用就是取出posts表里的每一条记录。那么我们就可以用Post.all的方式读取posts 表的数据了。

另外,你也会发现,如果我们开发用的是sqlite,但是部署却用的是mysql。因为我们有模型层,就可以直接换一下数据库的接口,必担心换了数据库会因为数据库的不同而产生问题了。

最后再说下,我们的所有程序最后到计算机的cpu,他只能执行很简单的一条条预设的指令,但是我们如果要一条条写就累死了(比如汇编),这个时候我们就用各种方式去组织代码,方便我们写程序,比如函数,对象,分层,所以无论多么复杂的代码,本质上都指令的组织方式。关键是了解这种组织方式。

你只要知道,所有的代码最后到cpu那里就是这样的, a=1 b=2 c=a+b

21190
1107jasl 回复

一个之前面试被问住的问题,虽然已经知道了Fat Model,可是仍不知道是哪里冒出的充血贫血这些概念,Google几次无果,原来是领域模型相关的概念,感谢大佬!回头去看看Evans DDD

27349
ActiveModel  # model interfaces for Rails

ActiveRecord # Object-relational mapping in Rails

ActiveRecord = ActiveModel + Database Support 

32 huangpuxiang 关闭了讨论 07月10日 01:56
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册