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

huangpuxiang · July 08, 2017 · Last by sec replied at July 09, 2017 · 1743 hits

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

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

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

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

通常 Model 和 Table 一一对应。

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

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

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

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

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

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

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

Reply to jasl

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

ActiveModel  # model interfaces for Rails

ActiveRecord # Object-relational mapping in Rails

ActiveRecord = ActiveModel + Database Support 

huangpuxiang closed this topic. 10 Jul 01:56
You need to Sign in before reply, if you don't have an account, please Sign up first.