成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

5個(gè)常見的Rails開發(fā)誤區(qū)

開發(fā) 后端
本文作者是一名Rails開發(fā)者,他總結(jié)了在Rails開發(fā)過程中的一些常見誤區(qū)。文章內(nèi)容如下:

本文作者是一名Rails開發(fā)者,他總結(jié)了在Rails開發(fā)過程中的一些常見誤區(qū)。文章內(nèi)容如下:

我使用Rails已經(jīng)有一段時(shí)間了,在這期間我看了大量的Rails項(xiàng)目,下面的這五個(gè)常見的誤區(qū),我?guī)缀踉诿恳粋€(gè)Rails代碼中都看到過。

1. 沒有 schema 規(guī)范的遷移

數(shù)據(jù)模型是應(yīng)用程序的核心。沒有schema的約束,你的數(shù)據(jù)會因?yàn)轫?xiàng)目代碼上的bugs而慢慢變得糟糕,直到你無法相信庫中的任何字段。這里有一個(gè) Concact Schema:

  1. create_table "contacts" do |t|  
  2.     t.integer  "user_id" 
  3.     t.string   "name" 
  4.     t.string   "phone" 
  5.     t.string   "email" 
  6. end 

上面哪些需要更改呢?通常一個(gè)Contact必須依附于User,并且會有一個(gè)name 屬性,這可以使用數(shù)據(jù)庫約束來確保。可以添加“:null => false”,這樣即使驗(yàn)證代碼存在bugs,我們依然可以確保模型一致性,因?yàn)槿绻`反了null約束,數(shù)據(jù)庫并不會允許模型保存這些數(shù)據(jù)。

  1. create_table "contacts" do |t|  
  2.     t.integer  "user_id":null => false 
  3.     t.string   "name":null => false 
  4.     t.string   "phone" 
  5.     t.string   "email" 
  6. end 

TIPS:使用“:limit => N”規(guī)范你的string類型字段的大小。Strings 默認(rèn)255個(gè)字符,而phone字段應(yīng)該不需要這么長吧!

2. 面向?qū)ο缶幊?/strong>

大多數(shù)Rails開發(fā)人員并不寫面向?qū)ο蟮拇a。他們通常會在項(xiàng)目中寫面向MVC的Ruby代碼(把模型和控制器分開寫在合適的位置)。通常是在lib目錄下添加帶有類方法的工具模塊,僅此而已。但開發(fā)人員往往需要花費(fèi)2-3年才能認(rèn)識到“Rails就是Ruby。我完全可以創(chuàng)建一些簡單的對象,并且不一定按照Rails建議的方式去封裝它們。”

TIPS:對你調(diào)用的第三方服務(wù)使用facade(外觀模式)。通過在測試中提供mock facade,你就不用在你的測試集中真的去調(diào)用這些第三方服務(wù)了。

3. 在 helpers中連接HTML

如果你正在創(chuàng)建helper,恭喜,至少說明你正在試圖讓你的視圖層更整潔。但是開發(fā)人員經(jīng)常不知道一些使用helpers創(chuàng)建標(biāo)簽的常見方式,這就導(dǎo)致了槽糕的字符串連接或者糟糕的插值形式。

  1. str = "<li class='vehicle_list'> " 
  2. str += link_to("#{vehicle.title.upcase} Sale", show_all_styles_path(vehicle.id, vehicle.url_title))  
  3. str += " </li>" 
  4. str.html_safe 

看吧,相當(dāng)糟糕,而且容易導(dǎo)致XSS安全漏洞!讓 content_tag 來拯救這些代碼吧。

  1. content_tag :li:class => 'vehicle_list' do 
  2.   link_to("#{vehicle.title.upcase} Sale", show_all_styles_path(vehicle.id, vehicle.url_title))  
  3. end 

TIPS:現(xiàn)在就開始在helper中使用blocks(代碼塊)吧。當(dāng)產(chǎn)生內(nèi)嵌的HTML時(shí),嵌入的blocks更自然、更貼切。

4. Giant Queries(大查詢,比如載入整張表的查詢)會把一切都加載到內(nèi)存

如果你需要修正數(shù)據(jù),你只需要遍歷并且修正它,對嗎?

  1. User.has_purchased(true).each do |customer|  
  2.   customer.grant_role(:customer)  
  3. end 

假設(shè)你有個(gè)***別客戶的電商網(wǎng)站,假設(shè)每個(gè)用戶對象需要500字節(jié),上面的代碼會在運(yùn)行的時(shí)候消耗500M內(nèi)存。

下面是更好的方式:

  1. User.has_purchased(true).find_each do |customer|  
  2.   customer.grant_role(:customer)  
  3. end 

find_each使用 find_in_batches 每次取出1000條記錄,非常有效的降低了對內(nèi)存的需求。

TIPS:使用 update_all 或者原始 SQL 語句執(zhí)行大的更新操作。學(xué)習(xí)SQL可能需要花費(fèi)點(diǎn)時(shí)間,不過帶來的好處是明顯的:你會看到100x的性能改善。

5.  代碼審查

我猜你會使用GitHub,并且我進(jìn)一步猜測你不會去pull requests(GitHub上的申請代碼合并操作)。如果你需要花費(fèi)一到兩天去構(gòu)建一個(gè)新特性,那么到一個(gè)分支上去做吧,然后發(fā)送一個(gè) pull request。團(tuán)隊(duì)會審查你的代碼,并且給出一些你沒有考慮到的改進(jìn)或者***特性的建議。我保證這樣會提高你的代碼質(zhì)量。我們在TheClymb項(xiàng)目中90%的改動都是通過這種方式完成的,并且這是100%值得去做的一個(gè)經(jīng)驗(yàn)。

TIPS:不要沒有經(jīng)過任何測試就合并你的pull request。測試對保證應(yīng)用的穩(wěn)定性非常有價(jià)值,并且可以讓你踏實(shí)地睡一個(gè)好覺。

英文原文:Five Common Rails Mistakes

原文鏈接:http://www.iteye.com/news/25074

【編輯推薦】

  1. Java端通過CXF調(diào)用.NET端服務(wù)
  2. Java線程池的原理及幾類線程池的介紹
  3. Java中的異常對程序效率有無影響
  4. JVM的內(nèi)存溢出異常
  5. Java簡單的網(wǎng)絡(luò)爬蟲實(shí)現(xiàn)
責(zé)任編輯:林師授 來源: ITEYE
相關(guān)推薦

2020-01-14 17:31:46

數(shù)據(jù)科學(xué)誤區(qū)人工智能

2018-04-20 11:19:17

Java誤區(qū)細(xì)節(jié)

2017-11-20 14:18:32

2014-07-17 09:08:20

Android L

2022-05-27 12:40:25

前端測試項(xiàng)目

2018-04-23 10:28:01

Java誤區(qū)

2017-11-20 08:56:54

克服容器誤區(qū)

2019-07-01 13:43:14

公共云云計(jì)算云平臺

2022-07-31 23:53:37

Linux操作系統(tǒng)設(shè)備

2022-07-31 23:54:24

Linux操作系統(tǒng)

2021-10-08 09:18:37

物聯(lián)網(wǎng) LPWANIOT

2013-05-17 14:10:38

2019-12-26 15:12:14

Html5框架Web

2020-11-30 10:41:25

CIO首席信息官IT文化

2020-11-30 12:57:27

IT文件數(shù)字化IT組織

2023-03-09 09:38:01

數(shù)據(jù)科學(xué)

2020-10-09 06:54:22

通信專業(yè)誤區(qū)

2018-08-17 08:26:25

2011-07-15 10:42:27

電子配線架

2014-07-23 10:01:03

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 欧洲一区二区三区 | 日韩视频一区二区 | www.99热这里只有精品 | 国内精品在线视频 | 不卡在线视频 | 亚洲精品在线免费播放 | 国产精品欧美一区二区三区不卡 | 国产精品一区二区av | 亚洲精品99999 | 97成人免费 | 在线成人 | 午夜精品久久久久久久 | 国产男女视频网站 | 精品国产18久久久久久二百 | 国产精品一区久久久久 | 中文字幕日韩欧美一区二区三区 | 精品欧美乱码久久久久久 | 国产亚洲精品美女久久久久久久久久 | 久热免费在线 | 精品欧美乱码久久久久久1区2区 | 国产视频导航 | 一区二区日本 | 天天射影院 | 男女羞羞视频大全 | 中文字幕一二三 | 免费视频99 | 国产福利精品一区 | 色婷婷久久久久swag精品 | 国产视频一区在线 | 91麻豆精品国产91久久久更新资源速度超快 | 亚洲一级视频在线 | 久久久免费 | 久久精品国产一区二区电影 | 欧美 中文字幕 | 欧美激情亚洲激情 | 成人免费在线视频 | 久久剧场 | 日韩精品福利 | 中文字幕视频在线免费 | 日韩一区在线播放 | 国产亚洲精品精品国产亚洲综合 |