[DAY2] 听说 Rails 开发很快速?

先来介绍一点关於 Ruby on Rails 这个框架 ,他采用了 ORM 来处理 Ruby 和资料库的关系。

ORM 是什麽?

ORM 全名是 Object-Relational Mapping,顾名思义是将关联式资料库的资料映射至任一程序语言中并转为物件,比较有名的 ORM 有 Ruby on Rails 的 ActiveRecord、Node js 的 Sequelize、.NET 的 Entity Framework。网路上已经有不少介绍 ORM 的文章,以下提供参考

ActiveRecord?

在 Rails 官方的基础教学中,这样一行就可以轻松建立 model 并产生对应的 migration 建立 DB 中的 table

bin/rails generate model Article title:string text:text

而 Rails 自动建立的 model 长这样,他继承的 ActiveRecord::Base 提供了很多基础的功能,包含最基本的 CRUD (Create , Read , Update , Destroy) 和各栏位的 getter、setter 等等。

class Article < ActiveRecord::Base
end

article = Article.create(title: 'Test Article')
article.title # 'Test Article'

透过这些预设好的 method ,我们可以很轻松的存取和改变 model 的值。

article.title = 'TEST2 Article'
article.save # 更新 article 的值 

article.update_attributes(title: 'TEST2 Article') # 更新 article 的值 

很方便,但...

ActiveRecord 很方便,但过度依靠这样的便利性却也很容易产生坏习惯,进而慢慢的腐化 code base。
首先,一个 model 对应到 DB 的一个 table,在专案前期,这可以省去许多时间,但随着专案越来越大,如果资料库没有好好规划,同一个 table 的栏位可能会越来越多,其结果就是对应到一个很肥的 model,而我们就遇到了这样的问题。

一坨大泥球(Big ball of mud)

好的程序码应该努力的方向是「高内聚,低耦合」,而我们的 code base 恰恰相反,一个 model 有 50 个以上的 methods 和 attributes,更惨的是程序中任何一个地方都有可能会出现他的身影,而为甚麽会变成这样呢?我们下集待续~/images/emoticon/emoticon06.gif


<<:  Day 02 : Fibonacci 斐波那契

>>:  30天学会 Python: Day 1-印啦!哪次不印!

马可夫模型

马可夫模型 (Markov Model) 会用来表达状态以及转移机率及它们的随机过程使用的模型,或许...

【D25】 说明一下bid and ask

前言 说明一下bid and ask是什麽,我们这边可以怎麽使用呢? 参考网站:[Bid and A...

day 18 - graceful shutdown 优雅地退场

服务上线之後, 另一个考验才刚开始。 当流量开始进出服务之後, 如果要进行更版, 服务就需要重启或中...

[Day 27] 损失视觉化 Loss Visualization

上回提到视觉化特徵图,这是一个可以用来解释模型学到了什麽的方法,今天介绍另一种技术:损失视觉化(Lo...

Day 32 - 透过手机呼叫 Amazon API Gateway 上传图片到 S3

Day 32 - 透过手机呼叫 Amazon API Gateway 上传图片到 S3 Day 31...