手机看片欧美日韩,久久精品国产主播一区二区,欧美亚洲中日韩中文字幕在线

Ruby on Rails的信條和哲學

本文翻譯自?The Rails Doctrine?- 作者是 DHH,原始由 @juanito 翻譯成?繁體中文,再由?Ruby China?組織成簡體中文。 如你發現本文有錯別字或翻譯不準確的地方,請訪問?GitHub?提交 Pull Request。 下文將提到的我,表示 DHH 自己。

Ruby on Rails 驚人的活躍度主要是因為本身采用了新穎的技術和好的時機。但技術優勢隨著時間的推移而減弱;縱然有好的時機,時間久了影響也會逐漸減少。Rails 為何不僅能繼續存在,還依然具有影響力并帶領社區繼續前進呢?需要更進一步的解釋。我提議以下這篇內容,這是我們的基本信條,也是飽受爭議的信條。

這篇信條,在過去 10 年里不斷演進,是 Rails 主要的支柱,同時也是基本的支柱。我不自詡自己是這些想法的原創者。Rails 的主要成就是整理和培養出一套編程與程序員本身的思想集合。

廢話不多說,以下是由我所認為,Rails 中最重要的 9 個基本信條:

  1. 程序員的幸福最大化
  2. 約定優于配置
  3. 主廚精選
  4. 多元化的設計模式
  5. 推崇優美的代碼
  6. 提供實用工具
  7. 重視整合系統
  8. 進步比穩定更重要
  9. 包容并重

程序員的幸福最大化

是 Ruby 造就了 Rails,所以第一條信條便是從創造 Ruby 的核心理念所提煉出來。

早期 Ruby 的極端邪說就是把程序員的幸福度放到第一位。還把追求幸福置于驅動編程語言與生態圈前進的考量之上。

然而 Python 可能對于“用一種方法,最好只有一種方法來完成一件事”而感到自豪,而 Ruby 則喜歡自身表現力與巧妙。Java 是飽受軟件工程師的強力推崇,Ruby 則在歡迎工具里就附上了自盡的繩子。Smalltalk 專注于消息傳遞的純粹性,Ruby 則累積關鍵字和臃腫的語法構造。

Ruby 與眾不同的原因是看重的事情不一樣。這些考量,都是為了滿足和追求軟件工程師的幸福。這些追求導致了與其他編程語言的辯論,也打開了主流文化對于究竟什么是軟件工程師,以及應該如何應對軟件工程師的認知。

Ruby 不僅承認,而且從設計上適應和提升軟件工程師的感受。不管它們是不足的、奇思妙想的,還是令人喜悅的。Matz 跨越了驚人難度的實踐門檻,讓機器面有喜色,且富有人性。Ruby 滿滿是視覺上的錯覺,在我們看起來 Ruby 很簡單,清晰,也很優美,背后其實是雜技般的錯綜復雜。這些選擇不是沒有代價(問問 JRuby 那些試著要對 Ruby 逆向工程的人看看!),這也是為什么,這是很值得贊揚的一件事。

這是對軟件開發另一種愿景的致敬,也決定了我對 Ruby 的鐘愛。這不止是簡單易用,不僅是美學的元素,也不是單一的技術成就。而是一種愿景,是反文化。Ruby 是一個不適應呆板專業軟件開發的人,而是專屬于愛好之士的樂土。

我過去談過,發現 Ruby 像是找到完全適合我的魔法手套。比我想象中的任何手套都來得合用。這是我從“寫程序只是因為我需要程序”到“寫程序是因為熱衷于其中的心智表達與練習”的一次轉變。是找到無我之境,且能夠隨意開放的入口。對于任何熟悉 Csikszentmihalyi 作品的人來說,我真的一點也不夸張。

當我說 Ruby 改變了我,我真的不夸張,Ruby 決定了我人生的努力目標。如此深刻的啟示。Ruby 感染了我,呼喚我對 Matz 的產物做出宣教的工作。傳播這深刻的語言與恩賜。

我想你們現在大概都感到疑惑的搖搖頭。我不怪你們,假如我還處于“編程只不過是工具”的階段,有人跟我說上面的經歷,我也會搖頭。接著我還可能會對這宗教般的語言發笑。但說實在的,這也是最真誠的理由,即便這可能使某些人,甚至是多數的人感到不愉快。

無論如何,究竟這對 Rails 意味著什么?這個理念為什么持續引導 Rails 演進?要回答這個問題,我想用另一個啟發性的理念來說明,一個早期常用來描述 Ruby 的概念:最小驚訝原則(The Principle of Least Surprise)。Ruby 應該要如你預期般的運行。可以用下面這個對比于 Python 的例子來解釋:

$ irb
irb(main):001:0> exit
$ irb
irb(main):001:0> quit


$ python
>>> exit
Use exit() or Ctrl-D (i.e. EOF) to exit

Ruby 可以用?exit?和?quit,來回應程序員的需求,也就是想離開終端交互界面。而 Python 則迂腐的告訴程序員如何做該做的事,即便它已經知道程序員想干嘛了(卻只顯示錯誤信息)。這是非常清晰的、微小的、最小驚訝原則的例子。

不過最小驚訝原則最終在 Ruby 社區失寵的原因非常直觀。最小驚訝原則,驚訝誰?那當然是 Matz 了,以及那些跟 Matz 一樣對同樣事物感到驚訝的人。Ruby 社區成長茁壯的同時,人們對不同的事情感到驚訝與 Matz 成長過程中感到驚訝的事情不一樣,這主要咎于失敗的郵件列表討論。為了要避免更多甲男對乙物是否感到吃驚的爭論沒完沒了,所以這個理念從此退居幕后。

再一次,這跟 Rails 到底有什么關系?嗯,Rails 就是按照相似的理念,盡量不驚訝(Matz)而設計,以及(DHH 的)璀璨微笑理念,這理念就是:框架的接口設計是著重考量,怎樣可以讓人用起來能會心一笑。寫下此句時,即便是我自己,也會覺得這在第一次聽到時會感到非常的滑稽與自戀。

但創作出 Ruby 或 Rails 這樣的成果,本身就是深度自戀的努力成果。Ruby 與 Rails 都是誕生于單一創造者。但也許我只是在這把我的動機投射在 Matz 身上,所以讓我縮小我宣言的范疇:我發明 Rails 只是為了我自己。從最初開始就是為了讓我自己微笑。Rails 的許多工具,很多方面看來,它們的用途都是為了讓我更加享受人生。充實那些每天為需求所爭論不休的生活,以及用來打造 Web 應用程序。

和 Matz 一樣,我有時候為了實現我的理念也會做出一些蠢事。一個例子便是 Inflector,一個可以對英文做不規則轉化的類,譬如 Person 類對應到 People 表、Analysis 對應到 Analyses,Comment 對應到 Comments 等。這個東西現在已經是 Rails 不可分割的元素了,但早期爭議的怒火延燒到今日,傷口仍未愈合,由此可見其重要性。

另一個例子僅用了些許代碼實現,卻幾乎引發了驚愕的程度。Array#second?到?#fifth(以及挑釁意味的?#forty_two)。這些別名的存取器,非常嚴重的冒犯了常發表意見的支持者,他們說:這簡直太過度設計了(幾乎是編程時代的結束),這些寫成?Array#[1]Array#[2](以及?Array[41])不就可以了嘛。

但時至今日,主要的抉擇還是,讓我自己開心。我喜歡在終端或測試里編寫?people.third。不,這不合理,也不高效。可能我有病吧,但這仍能讓我發自內心的微笑,滿足了這個理念,也豐富了我的人生,幫我在過了 12 年之后,還仍繼續參與 Rails。

不像性能優化有明確的指標,幸福優化很難衡量。這使得幸福優化變成了不科學的無謂努力,某些人要不是徹底失望,可能就是覺得這并不怎么重要。程序員被教導要爭執并征服實際的東西,也就是可以明確指出,為什么 A 比 B 好的東西。

但追求幸福,是很難從微觀的角度來衡量,但從宏觀的角度來看便很清楚。許多人留在 Ruby on Rails 社區便是這個原因。他們自豪于能更好、更圓滿的工作生活。而正是因為這些情感因素,勝利是很清楚的。

總結,追求幸福可能是形成 Ruby on Rails 的關鍵因素。而這個因素將會跟著 Rails 一直走下去。

約定優于配置

早期 Rails 的生產力座右銘是:“你不是獨一無二的,大家都一樣”。只要放下了自負的個人喜好,便可以跳過無謂的世俗決定,專注在最重要的地方下更快的決定。

有人在乎你的數據庫主鍵命名用什么格式嗎?用?idpostIDposts_id?或?pid?真的有差別嗎?這真的是值得反復討論的嗎?不!

Rails 的部分使命就是,幫助開發者在日漸復雜龐大的 Web 應用程序決策叢林中劈荊斬棘。幾千個無謂的決定只需要做一次,而若是別人幫你做這些決定,那就更好了。

約定優于配置,可以將我們從各種小的決定中解放出來,也提供一個繁茂的草原,讓我們孕育更深層的抽象。如果我們可以依賴 Person 類對應到 people 表,我們也可以用同樣的詞形變化,從?has_many :people?推導出類名是 Person。優良約定的力量是廣泛使用才能獲得許多好處。

不僅專家的生產力提升了,約定也降低了新手的門檻。Rails 里有非常多的約定,新手無須知道,但卻能實實在在的從中獲益。他們不需要了解每一件事情為什么是這樣,也可以打造出偉大的應用。

但框架要僅是厚重的教科書就不可能了,新的應用好比一張白紙。單純要理解到從那開始,如何起步,就需要花費巨大的努力。一半的時間都花在糾結,糾結該拉那一條線才是正確的。

同樣的道理也可以套用在當你了解了所有組件是如何一起工作時。每當一個改變的下一步非常明確時,我們可以快速的游走在應用相似或于其它應用相同的組件之間。一個包含了所有東西的地方,所有東西都在一個地方。即便是最有能的人,也可以從約束中解放出來。

世間萬物,有好有壞,約定的力量不是沒有危險。當 Rails 這么簡單就可以做這么多事情的時候,很容易就會這么想,應用的每個部分,都可以用一個預先準備的模版來解決。

但多數值得做的應用,總有某種程度上獨一無二的部分,它們可能是 5% 或是 1%,不管多少,但總是會有的。

最困難的部分就是何時應該打破約定?什么時候才要偏離正軌?我主張多數的行動其實都沒什么不同的,也沒好好認真想過,而偏離 Rails 的代價被低估了,其實是有代價的,需要你引以深刻的反思。

主廚精選

在餐廳不知道什么好吃該怎么點菜?若你交給主廚挑選,可能可以在了解為何“好”之前,就吃上一頓好菜。這就是 Omakase。無需成為美食專家或亂點菜碰運氣,就可以吃到好東西的方法。

對軟件開發來說,主廚精選這個實踐的好處是技術棧交給別人幫你組合,跟我們從約定優于配置所得出的論點相似,但它更上一層。CoC (約定優于配置)考量如何用好單一的工具,而 Omakase 則考量該用什么框架,以及框架之間該如何協作。

有這么一說,軟件開發的優良傳統便是把可用的工具交給使用者自己去選擇,決定權(還是負擔?)交給程序員。

你一定聽過這句話,也在心里面點頭贊同:“用最好的工具來解決問題”。這聽起來很基本,但能夠選擇“最好的工具”需要明確的定義出什么是“最好”。這其實比想象中要難的多。

這個問題跟在餐廳要吃什么相似。像是挑選八道菜的每一道,選擇每一個三方庫或框架,這不是獨立的決定。選擇需要根據今晚的狀況來考慮,挑選三方庫則要考慮整個系統。

所以 Rails 我們根據大局考慮,把選擇減少到一套好的工具,讓每個工程師可以從中挑選:一套為了大家好的工具。好處如下:

  1. 分散風險:當大家都用預設的方式來使用 Rails,我們有共同的體驗。這個共同基礎讓我們可以容易指導和幫助新人,大家有討論的共同基礎。就好比大家昨晚七點都看了某個節目,所以明天大家都有共同話題可以談論。進而培養出更有凝聚力的社區。
  2. 大家熟練使用相同的工具:身為一個全棧的框架,Rails 有很多可以移動的組件,這些組件之間如何協調工作?如何獨立工作?兩者同樣重要。多數的軟件開發者的痛苦不是來自于獨立的組件,而是組件之間的互通。當我們用同樣的方式來使用這些組件,相同的配置便可以得出相同的錯誤,則大家受的苦便減少了。
  3. 有必要的時候也可以換掉:Rails 是主廚精選的技術棧,某些子框架或類庫你仍然有選擇的權利。只是不一定你要換掉它們,這些決策可以之后再做,在你開發出一個明確的、需要不一樣的個性化應用的時候再來考慮吧。

因為多數使用 Rails 且有經驗的軟件工程師,并不是都討厭菜單上的每一道菜(討厭的話就不會繼續使用 Rails 了)。他們努力挑選想要的替代方案,而其它則享受和大家一樣的工具。

多元化的設計模式

大家對中央集權的概念有很強烈的情感,而根據最終得出的理性結論來作為架構基礎。這個理念存在某種純粹性,這也是為什么軟件工程師會被中央集權所吸引。

Rails 不是這樣,Rails 不是一件裁剪完美的衣服,Rails 是一件棉被。一個用很多概念,甚至是設計模式組成的棉被。這些概念和設計模式看起來可能有抵觸、自相矛盾或互相矛盾。但這不是我們要做的事,這不是靠有更優越的點子就可以勝出的總冠軍賽,不是一定要選出一個贏家。

看看 Rails MVC 里用來打造 View 的模版。在默認情況下,這些 Helper 允許我們從 View 抽取出代碼,抽出來不過是一堆函數!這些函數甚至存在于同一個 Namespace 下面。噢,驚訝了嗎?感到恐懼了嗎?正是像 PHP 那樣呢!

但我認為 PHP 在單一函數之間,很少需要互動這點上是對的,就像 View 有著許多的抽象一樣。根據這個目的,單一的 Namespace,一堆的方法,這不只是個合理的決定,還是很棒的決定。

這不代表我們不會偶爾想要用“面向對象”的方式來打造 View。Presenter 的概念,把彼此之間獨立的方法以及要呈現的資料包在一起;這可能是方法混在一起最好的解藥。但這很少見。

相比之下,我們通常把 MVC 的 Model 看成是“面向對象”精華的主要堡壘(需要改善翻譯!)。選擇正確的名稱,增加一致性,減少耦合,這是 Model 好玩的地方。這跟 View 是很不一樣的,所以我們采用了和 View 不同的做法。

但即便我們不采納單一設計模式的教條。Rails 的 concerns,Ruby mixin 的特例,通常用來擴展 Model。這跟 Active Record 的模式完美結合,給予每個方法有直接存取、存儲正在交互資料的權力。

即使 Active Record 框架的根本侵犯了某些純粹主義者。我們把跟數據庫打交道的邏輯和業務邏輯混合了在一起。合并了邊界!沒錯,因為這才是做出 Web 應用貼切的實際方法, Web 應用通常就需要跟數據庫打交道,也需要存儲某些業務邏輯的狀態。

有如此理想的彈性,正是為什么 Rails 可以解決許多不同的問題。多數單一的流派解決單一的問題很厲害,但超出舒適圈就變得非常尷尬死板,需要使用許多交錯的設計模式。而我們旁敲側擊,在后面把關,最終整合出來的框架更強大,也是比單一模式能做更多事情。

現在,這種與許多程序設計流派結合的多重關系,是概念上的負擔。僅了解面向對象程序設計是不足以用好 Rails 的。還需要有面向過程編程和函數式編程的經驗。

這也可以應用到許多 Rails 的子語言。我們不試圖剝奪你學習的機會,比如你可以在 View 里寫 JavaScript,或者用 SQL 來寫復雜的查詢。這些都是允許的。

降低學習曲線的方法,真的只是想辦法讓大家更容易上手,在了解框架的每一個組件之前,做一些有實際價值的東西(更有意義)。這也是框架為何要盡快示范出 Hello World。告訴你桌子已經準備好了,前菜也上了。

這其中的思想就是:盡早給出有實際價值的東西。我們鼓勵 Rails 的實踐家快速學習,接受學習的過程是一種喜悅,而不是障礙。

推崇優美的代碼

我們寫程序,不只是要讓計算機和其他人理解,而是要沐浴在優美的夕陽余暉里。看起來漂亮的代碼,本身就有價值的,要盡力追尋。但這不代表優美的代碼就應該勝于一切的考量,而是要把優美納入優先考量。

什么是優美的代碼?在 Ruby 里面通常穿插于 Ruby 本身的慣用式和自定義的 DSL 威力之間。這是一條模糊的分界線,但非常值得一試。

以下是一個取自 Active Record 的簡單例子:

class Project < ApplicationRecord
  belongs_to :account
  has_many :participants, class_name: 'Person'
  validates_presence_of :name
end

這看起來像是 DSL,但這只是一個類 (Class) 定義,其中有三句類方法 (Class Method) 調用,方法調用接收 Symbol 以及 Hash 參數。沒有什么特別的,但這很漂亮。這也很簡單。只需幾行聲明,便賦予我們巨大的能力與彈性。

這幾條語句部分的美麗,來自于履行先前的理念,像是約定優與配置。當我們使用?belongs_to :account?時,我們假設projects?表有一個叫做?account_id?的外鍵存在。當我們把?participants?的關聯類用?class_name?指定為?Person時,我們只需要定義?Person?類就可以了。這條語句便可推導出外鍵以及其它需要的設定。

以下是取自數據 Migration 的另一個例子:

class CreateAccounts < ActiveRecord::Migration
  def change
    create_table :accounts do |t|
      t.integer :queenbee_id
      t.timestamps
    end
  end
end

這是框架威力的精華所在。軟件工程師按照某種約定來聲明一個類,像是繼承自?ActiveRecord::Migration?并實現#change?方法,剩下的就交給框架來處理,該去哪里,該調用哪個方法。

這樣軟件工程師只需編寫很少的代碼。以?Migration?的例子來說,這樣一個文件加上?rails db:migrate?命令,就可以創建一張新表;反過來也可以用另一條命令來刪除一張表。這跟軟件工程師自己使用背后的函數去修改,搞定所有細節很不一樣。

有時候優美的代碼反而更玄乎。不是要追求寫得多短多短,或是多厲害,而是讀起來要有節奏感。

以下兩條語句是等價的:

if people.include? person
...      
if person.in? people

但它們的執行流程與關注的地方有著微妙的不同。第一個語句,關注的是群體里是否有特定的人。第二條語句則是人是否屬于群體。兩條語句都差不多,但我主張第二條語句更美,能讓我在想這個條件的時候更容易有種會心一笑的感覺。

提供實用工具

Ruby 本身就有許多實用的工具,不是碰巧,設計正是如此。最出名的就是 Monkey Patching - 一種可以修改類與方法的能力。

但這個能力很快被嘲諷說,一般的軟件工程師掌控不了。而限制性較為嚴格的語言陣營的人們認為,Ruby 這個功能盲目的信任軟件工程師,Ruby 注定是要失敗的。

什么都可以改變的話,又怎么能阻止你把?String#capitalize?從原來處理?"something bold".capitalize?改成"Something Bold"?而不是原來的?"Something bold"?呢?這里你自己的應用上可能沒問題,但這就把其它依賴String#capitalize?的庫搞壞了。

有人說禁止使用才是答案。在 Ruby 里面,只要有好的理由,沒有什么可以阻止你使用 Monkey Patching。我們通過約定、推廣、教育來宣導好的觀念,而不是禁止使用廚房的菜刀或者規定每個人只能用湯勺來切番茄。

但 Monkey Patching 的另一面是能夠做成?2.days.ago(算出從現在計算兩天前的時間)這樣的美技。你可能會覺得,哦,這交易真不劃算。也就是你寧可不要?2.days.ago?也不想修改語言的標準庫,你若這么想的話,那 Ruby 可能不適合你。

但有些人出自于安全性的考慮,不得已只好放棄修改 Ruby 的標準庫。但反過來說,語言活躍的原因,正是因為給軟件工程師提供了激進的觀點:同時也相信可以放心的把工具交給軟件工程師使用。

不只是相信,語言本身也有多種方法來教導我們使用這些有用的工具。如此一來我們可以把整個產業向上提升,透過假設多數的軟件工程師都想要進步,大家都能使用好的工具,而不是傷害到自己。這真是一個鼓舞人心的想法啊,但這有悖于大部分軟件工程師對其他同事的想法。

在決定實用工具的價值時,總得以大家為出發點來討論。我尚未聽到任何一個軟件工程師說,“我無法相信這股力量,請把它拿走!”。常常聽到則是“我想其他的軟件工程師會濫用這個”。但我從來就不喜歡這個家長式的作風。

這正是 Rails 要提供實用工具的原因。框架所提供的工具不僅和語言所提供的工具同樣實用,也很銳利。我們不為提供這些工具而感動抱歉。事實上我們自豪,我們有足夠的信心啟發下一代的軟件工程師,并且有勇氣相信他們。

許多 Rails 的功能常常飽受這樣的爭議:“太過自由”。但我現在想到的一個例子是 Concern。這個基于 Ruby 內建功能 Module 之上的一層,薄薄的語法糖。為了單一類打造,可以用來封裝多個相關卻又獨立理解的“關系”(也正是 Concern 名字的由來)。

對于 Concern 的指控是有了一組新的抽屜,讓軟件工程師很容易把物件都塞進去。這說得沒錯,Concern 的用途就像這樣。

但謬論是不要提供像是 Concern 的功能,但凡讓有點能力的人來使用 Concern,便可得出有說服力的概念分離,軟件工程師可以從 Concern 獲得先天上的架構優勢。這么說吧,如果你不能保持 Concern 的整潔度,那你也不可能寫出優雅的代碼。

尚未學會使用這些實用工具的軟件工程師,嘗不到收獲的果實。這里有一個重要的點:“尚未”。我相信每個軟件工程師都有自己的一條道,最終都將變成有能力的 Ruby 與 Rails 軟件工程師。有能力我是指足夠的知識,知道自己應該在何時,以及該怎么根據實際場景來使用不同的工具,有時甚至使用危險工具。

這不是要把幫助他們成為厲害開發者的責任卸下。框架與語言應該是有耐心的導師,愿意幫助和指導任何人,讓他們走上大師之路。同時認可不斷犯錯是唯一的道路:錯用工具、一點教訓、汗水,有時候還可能是淚水。是的,想要變強就是應該這樣,沒有捷徑。

Ruby on Rails 是大廚的廚房,是想變成大廚的試煉場。你可能從洗盤子起步,但可以一步步努力往上爬,爬到掌管廚房。別讓任何人告訴你,最好的工具不能放心的交給你使用,而是應該看作成長過程的一部分。

重視整合系統

Rails 可以在很多場景下使用,但最初是用來做整合系統的?Majestic Monolith!Majestic Monolith - 即用一個系統來解決所有的問題。這表示著 Rails 從需要做即時刷新的前端 JavaScript,到能讓數據庫在生產環境遷移到下一個版本等等各方面功能,都要納入設計的考量。

我們已經談過,這是多么廣闊的眼界。但對于一人團隊來說,不過就是現實的考量而已。Rails 特別尋找通才(全棧工程師,各方面都擅長的人)來打造整個系統。目的不是要把專家束之高閣,而是讓通才和專家合力,打造出更具長遠價值的系統。

為了讓一個人可以做更多的事情,才想出了整合系統。而正是在整合系統里,我們可以拿掉許多不必要的抽象,減少抽象層之間的重復(像是服務端與前端可以共用 View 模版),以及避免系統在非必要的情況下分離。

系統開發的復雜度多半是引入了系統組件之間的界限,比如現在 A 組件該如何和 B 組件進行相互調用。本地組件之間的方法調用要遠比 Microservices 之間的遠程調用來的簡單。Microservices 是另一個存在失敗狀態、延長問題,依賴更新周期的新場景(需要對比原文理順,有點不太對),有許多潛在的問題等著嘗試拆分的人去冒險。

當然有時候這種服務的拆分是必要的。若想建立讓大家可以透過 HTTP 實用的 API,好吧,那你就得毫無怨言的處理許多的問題(雖然處理進來的請求比發出去請求要單一,但要是你的服務掛了,別人就會收到錯誤的狀態了)。但這至少對你個人的開發體驗傷害有限。

更糟糕的是,當系統過早解耦,或是過早拆成小服務,以及更糟糕的拆成 Microservices。這是現代網絡應用的錯誤認知,你只會反復的重造系統:同樣的功能在后端做一次,在前端再做一次,在 Native 手機端又再次實現一次等等。這不是自然規律,你也不需要這樣。

若想在整個應用里共享大部分的功能,這完全是可行的。桌面應用和 Mobile App 可以用同樣的 Controller 和 View。盡可能的把功能集中在 Majestic Monolith - 整合系統。集中在一起完全不需要犧牲構建速度,開發者體驗,以及其它錯讓你以為要盡早拆分系統的因素。

這正是我們要追求的系統:包含所有功能,容易發布,簡單理解的單一系統,整合系統。

進步比穩定重要

當一個系統已經存在超過 10 年,比如 Rails,自然會慢慢僵化。每一處的修改,都有百萬種理由可能會變成別人的困擾,或是有人仍需要舊的行為。這對他們來說都是合理的理由。

但若我們太仔細聽取保守派的意見,我們將永遠不知道另一邊的聲音是什么。我們需要勇敢的做出改變,打破陳規,然后才可以茁壯演化。正是這樣的演變,才讓 Rails 存活下來,并可能繼續繁榮發展(數)十年。

這些理論上都很簡單,但實際做起來卻很困難。特別是你的應用因為升級大版本的 Rails 時,因為有不兼容的變更而壞掉了。正是此時,我們珍重[進步比穩定更重要]的價值觀,這個價值觀給我們力量來搞定升級,搞清楚為什么并與時俱進。

但這不代表我們就可以加入不需要的功能,或是胡來把別人的應用搞壞了。Rails 2 升到 3 的遷移噩夢,仍在經歷過的人身上陰魂不散。那真的是很艱難的決定。修改太大使得許多人停滯在 Rails 2.x 無法前進,有些人更是討厭至極。可我們從大局來看,這件事仍然是值得的選擇。

這些是需要一直做出的權衡。做了這個改變之后,Rails 能夠在 5 年之內變得更好嗎?Rails 可以采用某些問題的解決方案,比如異步任務隊列或 WebSockets,這能讓 Rails 在今后變得更好嗎?如果這個答案是肯定的,那么就別說了,卷起袖子干活吧。

這些工作不只是 Rails 需要,廣大的 Ruby 社區也需要。Rails 應該站在時代的前沿,通過引導大家快速升級新版本來推動 Ruby 演進。

這一點我們做的非常好。最早開始時,我們從 Ruby 1.6、1.7、1.8、1.9、2.0、2.1、2.2 一路升上 2.3。沿路歷經多次的大版本更新,但 Ruby 總是有 Rails 當后盾,并幫助每個人的代碼跑得更快。這是身為最流行的 Ruby 項目 Rails 的特權,同時也是義務。

這點也可以延伸到工具鏈的輔助工具。Bundler 曾是一個爭議性的概念,但透過 Rails 的不懈努力,Bundler 成了未來的重要工具,今天理所當然已經是不可或缺的工具了。同樣也可以應用到 Assets Pipeline 和 Spring (Rails 開發環境常駐的指令)。這三個一起出現,也仍然一起往前走,過程中可能造成了一些痛苦,但長遠下來,這些工具提供的價值正是為什么我們要推廣它們的原因。

最終進步的是人,以及人們樂意做出改變。這也是為什么,像 Rails Core 或 Rails Committers 這樣的團隊里沒有終身職位。這兩個團隊是給活躍的,致力于帶動框架進步的那群人而設定。對某些人來說,可能就幾年,但我們永遠感激他們做出的貢獻,這些貢獻可能將持續影響我們幾十年。

而這也是為什么對我們來說,有一個能鼓舞社區新成員的友好環境非常重要。我們需要新血液、新概念,才可以激蕩出更好的進步。

包容并重

正是歸功于這么多爭議性的概念才有 Rails。但若我們要求每個人完全遵從所有的信條,Rails 可能很快的就變成孤芳自賞的小族群,所以我們不這么做!

我們需要反面意見。我們需要方言。我們需要多元的思想和群眾。許多人用代碼或是深思熟慮的論證來提供意見。正是在概念的熔爐里,我們才能提煉出這之中最好的讓大家共享。

這篇基本信條描繪出一種理想狀況,但日常生活中的實際情況卻是更微妙的(也更有趣的),正因為 Rails 幾乎從來不考驗(? 不合理)每一個想法,它才能包容下這樣龐大的社區

RSpec,一個我不喜歡的 Test DSL,RSpec 的持續成功是最完美的證據。雖然我可以說到臉紅氣喘,說為什么我不覺得它的方式是對的,但 RSpec 人可以繁榮綻放。這點才是最重要的!

同樣的論點也適用在 Rails 做 API 的例子。雖然我個人關注也花心思的是帶有 View 的整合系統;但對于一些想要做前后端分離的人來說,這當然是 Rails 可以改進的地方。我們應該要擁抱這一點,就是 Rails 不只是能做一件事情,當然也可以做 API。

包容并重并不代表把所有東西強加給所有人。這只是代表你歡迎人們帶自己的飲料來參加你的 Party。我們要給別人加入我們的機會,卻又不能失了我們的靈魂與價值觀。因為我們從他們身上可以學到如何調一兩杯新的飲料。

當然這是要付出代價的,需要努力讓付出的貢獻受歡迎。特別是我們目標不僅僅是要吸引住已經在社區的人,我們永遠都要真正考慮如何降低起步門檻。

你永遠不知道,改正文件錯誤拼寫的人,可能就是下個大功能改進的黑馬。無論是多小的貢獻,都能笑著說感謝,這樣貢獻者就能一直持續下去。

蜀ICP備15035023號-4

<rp id="pptpi"><xmp id="pptpi"><th id="pptpi"></th><dl id="pptpi"><pre id="pptpi"><noframes id="pptpi"><code id="pptpi"></code><kbd id="pptpi"><strong id="pptpi"><pre id="pptpi"></pre></strong></kbd>
  • <var id="pptpi"><dl id="pptpi"></dl></var>
    <menu id="pptpi"></menu>

    
    <rt id="pptpi"></rt>
  • <rp id="pptpi"><strong id="pptpi"><meter id="pptpi"></meter></strong></rp>
  • <p id="pptpi"></p>
    主站蜘蛛池模板: 称多县| 国产精品亚洲二区在线观看| 启东市| 平安县| 欧美日韩在线视频| 滦平县| 巨大黑人极品videos精品| 国产农村妇女aaaaa视频| 会泽县| 久久精品99国产精品日本| 婺源县| 吴堡县| 安远县| 临朐县| 国产午夜三级一区二区三| 凌海市| 人妻奶水人妻系列| 欧美不卡一区二区三区| 花垣县| 国产乱码精品一区二区三区中文 | 亚洲熟妇色xxxxx欧美老妇| 闻喜县| 国产精品久久久久久无码| 亚洲国精产品一二二线| 中文成人在线| 贵溪市| 铜川市| 无套内谢的新婚少妇国语播放 | 日韩精品视频一区二区三区| 益阳市| 亚洲熟女一区二区三区| 欧美高清精品一区二区| 国产又色又爽又高潮免费| 国产偷人爽久久久久久老妇app| 国产一区二区三区精品视频| 无码国产精品一区二区免费16 | 永定县| 99精品视频在线观看免费| 中文字幕一区二区三区四区五区| 滕州市| 建水县| 中国老熟女重囗味hdxx| 日韩精品无码一区二区三区久久久| 中文字幕日韩一区二区三区不卡| 日韩熟女精品一区二区三区| 额济纳旗| 69精品人人人人| 男ji大巴进入女人的视频| 靖远县| 枣庄市| 国产老妇伦国产熟女老妇视频| 天干夜天干天天天爽视频| 亚洲中文字幕无码爆乳av| 贵阳市| 报价| 亚洲国产精品成人久久蜜臀| 永久免费看mv网站入口亚洲| 污污内射在线观看一区二区少妇 | 兴城市| 大港区| 国产成人三级一区二区在线观看一 | 胶州市| 特黄三级又爽又粗又大| 欧美 日韩 人妻 高清 中文| 黎川县| 后入内射欧美99二区视频| 亚洲熟妇色xxxxx欧美老妇| 兰州市| 久久久噜噜噜久久中文字幕色伊伊| 国产精品久久久爽爽爽麻豆色哟哟| 国产精品久免费的黄网站| 狠狠色噜噜狠狠狠888米奇视频 | 久久发布国产伦子伦精品| 性史性农村dvd毛片| 国产精品成人一区二区三区| 国产综合在线观看| 西充县| 平武县| 南川市| 国产又粗又猛又爽又黄| 亚洲日韩av无码| 欧美精品在线观看| 国产精品国产三级国产专区53| 天天操夜夜操| 彰化市| 临朐县| 欧美又粗又大aaa片| 精品国产一区二区三区四区阿崩 | 久久99精品国产麻豆婷婷洗澡| 欧美日韩精品| 随州市| 一本大道东京热无码| 免费网站在线观看高清版电视剧| 阿克陶县| 久久av一区二区三区| 国产精品久久午夜夜伦鲁鲁 | 丰满少妇被猛烈进入无码| 诸暨市| 波多野吉衣av无码| 日韩精品一区二区在线观看| 成人免费无码大片a毛片| 欧美 日韩 国产 成人 在线观看| 三年成全免费观看影视大全| jzzijzzij日本成熟少妇 | а√中文在线资源库| 涿州市| gogogo免费观看国语| 甘孜县| 色视频www在线播放国产人成| 麻豆人妻少妇精品无码专区| 江陵县| 沙湾县| 美姑县| 大冶市| 通山县| 国产精品揄拍100视频| 国产精品无码天天爽视频| 香蕉影院在线观看| 久久午夜无码鲁丝片| 风流少妇按摩来高潮| 极品少妇xxxx精品少妇偷拍| 在线亚洲人成电影网站色www| 玛曲县| 嘉善县| 丁香婷婷综合激情五月色| 广东省| 临城县| 国产精品永久久久久久久久久| 午夜精品久久久久久久久| 辣妹子影院电视剧免费播放视频| 潼南县| 夜夜欢天天干| 柘城县| 欧美日韩在线视频一区| 项城市| 国产精品久久| 国产成人无码精品久久久露脸| 兴安盟| 德保县| 中文在线资源天堂www| 勐海县| 内射合集对白在线| 免费又黄又爽又色的视频| 亚洲区小说区图片区qvod| 无码人妻精品一区二区| 营山县| 永胜县| 熟妇高潮精品一区二区三区| 富锦市| 云阳县| 资兴市| 宝兴县| 白玉县| 蕲春县| 兴国县| 嘉祥县| 凤城市| 长治县| 激情五月综合色婷婷一区二区| 国产成人精品久久| 中文字幕在线播放| 人人妻人人澡人人爽久久av| 国产精品扒开腿做爽爽爽a片唱戏| 油尖旺区| 国产精品一区二区在线观看| 午夜精品国产精品大乳美女| 国产午夜视频在线观看| 最好看的2018中文在线观看| 久久精品国产成人av| 内射干少妇亚洲69xxx | aa片在线观看视频在线播放| 东乡县| 欧美性生交大片免费看| 库车县| 国产精品午夜福利视频234区| 亚洲熟妇无码久久精品| 大又大又粗又硬又爽少妇毛片| 天干夜天干天天天爽视频| 亚洲中文无码av在线| 99精品一区二区三区无码吞精 | 国产精品久久久午夜夜伦鲁鲁| 国产奶头好大揉着好爽视频| 俺去俺来也在线www色官网| 亚洲人成人无码网www国产| 札达县| 风韵少妇性饥渴推油按摩视频| 盈江县| 成人欧美一区二区三区| 好吊色欧美一区二区三区视频| 国产真实乱人偷精品人妻| 馆陶县| 滦平县| 国产麻豆天美果冻无码视频| 武鸣县| 苍溪县| 一本大道久久久久精品嫩草 | 瑞金市| 云林县| 青海省| 奉化市| gogogo在线高清免费完整版| 拜城县| 湖口县| 乌海市| 性生交大全免费看| 国内精品国产成人国产三级| 少妇粉嫩小泬白浆流出| 汽车| 彭山县| 拍真实国产伦偷精品| 廊坊市| 国产熟妇搡bbbb搡bbbb搡| 乖乖趴着h调教3p| 狠狠综合久久av一区二区| 亚洲国产精品久久人人爱| 老色鬼久久av综合亚洲健身| 国产精品伦一区二区三级视频| 久久久久久亚洲精品中文字幕 | 岢岚县| 成人免费无码大片a毛片| 三年中文在线观看免费大全| 黄页网站视频| 国产国语亲子伦亲子| 俺去俺来也在线www色官网| 国产午夜亚洲精品午夜鲁丝片 | 宁都县| 国产卡一卡二卡三无线乱码新区| 宕昌县| 久久久久久成人毛片免费看 | 武城县| 摸bbb揉bbb揉bbb视频| 都匀市| 屏南县| 太原市| 真实的国产乱xxxx在线| 南汇区| 天堂网在线观看| 特级精品毛片免费观看| 珲春市| 成全电影大全在线播放| 久久99精品久久久久久琪琪| 国产探花在线精品一区二区| 紫阳县| 性少妇freesexvideos高清| 石渠县| 少妇人妻真实偷人精品视频| 一本大道久久久久精品嫩草| 成全视频在线观看免费高清| 少妇被躁爽到高潮无码人狍大战 | 最近免费中文字幕大全免费版视频| 国产成人三级一区二区在线观看一 | 免费又黄又爽又色的视频 | 一边吃奶一边摸做爽视频 | 欧美日韩欧美| 成人无码av片在线观看| 乌鲁木齐市| 日日噜噜噜夜夜爽爽狠狠 | 国产熟妇久久777777| 极品新婚夜少妇真紧| 国产精品久久久久久久久久久久| 狠狠色噜噜狠狠狠888米奇视频| 精品人妻一区二区三区四区| 高陵县| 精品人伦一区二区三电影| 少妇人妻偷人精品无码视频新浪| 且末县| 亚洲小说春色综合另类| 人妻巨大乳hd免费看| 中文人妻av久久人妻18| 日韩伦人妻无码| 崇明县| 定安县| 县级市| 沐川县| 临高县| gogogo在线高清免费完整版| 峨山| 好吊色欧美一区二区三区视频| 国产又粗又猛又黄又爽无遮挡| 仙游县| 国产欧美精品区一区二区三区| 丝袜美腿一区二区三区| 手机福利视频| 久久久久99精品成人片三人毛片| 建昌县| 国产又粗又猛又黄又爽无遮挡| 亚洲精品一区中文字幕乱码 | 国产精品久久久久久| 庆阳市| 亚洲男人天堂| 中文字幕人成人乱码亚洲电影| 亚洲无人区码一码二码三码的含义 | 内射无码专区久久亚洲| 苏尼特左旗| 亚洲熟妇无码久久精品| 狠狠综合久久av一区二区| 久久久无码人妻精品无码| 亚洲欧美精品aaaaaa片 | 在线亚洲人成电影网站色www| 国产亚州精品女人久久久久久| 灯塔市| 阿合奇县| 97人妻精品一区二区三区| 国产精品自产拍高潮在线观看 | 久久99精品久久只有精品| 中文久久乱码一区二区| 国产精品视频在线观看| 国产精品久久久久久久| xx性欧美肥妇精品久久久久久| 冕宁县| 大关县| 桂林市| 新绛县| 亚洲精品字幕| 国产在线视频一区二区三区| 敦化市| 中文字幕乱码人妻二区三区| 成全电影大全在线观看国语版高清 | 亚洲国产精品久久久久久| 洛隆县| 宿松县| 精品人妻少妇嫩草av无码专区 | 大兴区| 日韩伦人妻无码| 清流县| 天堂在线中文| 玩弄人妻少妇500系列视频| 乱色精品无码一区二区国产盗| 久久er99热精品一区二区| 欧美性猛交xxxx免费看| 美女视频黄是免费| 无码国产伦一区二区三区视频| 大又大又粗又硬又爽少妇毛片| 欧美一区二区| 三年片在线观看免费观看高清电影| 国产精品自产拍高潮在线观看| 人人妻人人澡人人爽精品日本| 国产人成视频在线观看| 日照市| 国产裸体美女永久免费无遮挡| 商南县| 西西人体44www大胆无码| 油尖旺区| 狠狠色综合7777久夜色撩人| 西畴县| 石泉县| 化州市| 大邑县| 龙岩市| 乳山市| 国产又猛又黄又爽| 蒙自县| 大城县| 高潮毛片又色又爽免费| 海林市| 天天爽天天爽夜夜爽毛片| 亚洲精品一区国产精品| 日韩一区二区在线观看视频| 无码精品人妻一区二区三区影院| 盘山县| 内射后入在线观看一区| 邻居少妇张开双腿让我爽一夜| 郯城县| 欧美午夜精品一区二区蜜桃| 国产美女裸体无遮挡免费视频 | 尤物视频在线观看| 亚洲日韩精品一区二区三区| 乳山市| 中文字幕一区二区三区乱码 | 国产又爽又猛又粗的视频a片| 国产真实乱人偷精品视频| 玉环县| 精品国产18久久久久久| 亚洲第一av网站| 伽师县| 日本少妇毛茸茸高潮| 精品欧美一区二区三区久久久| 少妇人妻真实偷人精品视频| 成全免费高清观看在线电视剧大全| 艳妇臀荡乳欲伦交换在线播放| 成全视频在线观看免费高清| 狠狠cao日日穞夜夜穞av| 国精品无码人妻一区二区三区| 国产精品无码免费专区午夜| 宣汉县| 格尔木市| 韩城市| 国产无遮挡aaa片爽爽| 成全我在线观看免费观看| 固原市| 国产精品成人无码免费| 国产成人精品aa毛片| 国产精品毛片一区二区三区| 天天干天天日| 万全县| 久久午夜无码鲁丝片| 鹤山市| 涿州市| 在线观看的网站| 城固县| 邯郸县| 与子敌伦刺激对白播放的优点 | 大地资源中文在线观看官网免费| 天堂中文在线资源| 日本理伦片午夜理伦片| 极品少妇xxxx精品少妇偷拍| 亚洲欧美精品aaaaaa片| 国产精品久久久久久久久久久久人四虎| 国产精品51麻豆cm传媒| 丰满岳跪趴高撅肥臀尤物在线观看| 麻豆美女丝袜人妻中文| 无码视频在线观看| 安仁县| 天美麻花果冻视频大全英文版| 久久久国产精品人人片| 甘谷县| 久久中文字幕人妻熟av女蜜柚m| 三年在线观看免费大全哔哩哔哩| 国产免费一区二区三区在线观看| 国产精品久久久久久无码| 精品无码久久久久久久久| 大冶市| 欧美午夜理伦三级在线观看| 国产成人精品一区二区在线小狼| 嘉祥县| 亚洲精品久久久久久一区二区| 洪湖市| 少妇熟女视频一区二区三区| 男人扒女人添高潮视频| 狠狠躁18三区二区一区| 午夜精品久久久久久久久| 草色噜噜噜av在线观看香蕉| 国产伦精品一品二品三品哪个好| 国产内射老熟女aaaa∵| 亚洲精品一区| 99国产精品久久久久久久久久久 | 宁陵县| 伊人久久大香线蕉综合网站 | 稷山县| 筠连县| 成武县| 亚洲中文字幕无码爆乳av| 久久国产精品波多野结衣av | 精品黑人一区二区三区久久| 如皋市| 精品亚洲一区二区三区四区五区| 97人妻人人揉人人躁人人| 云霄县| 国产精品96久久久久久| 麻豆精品| 瑞金市| 人妻少妇一区二区三区| 亚洲精品久久久久久| 子长县| 国产精品污www在线观看| 一本色道久久hezyo无码| 国产老妇伦国产熟女老妇视频| 中文成人在线| 国产午夜亚洲精品午夜鲁丝片| 久久偷看各类wc女厕嘘嘘偷窃| 大关县| 成人欧美一区二区三区在线观看| 女人和拘做爰正片视频| 黄浦区| 洪江市| 怀远县| 荥经县| 特级西西人体444www高清大胆 | 灌云县| 女子spa高潮呻吟抽搐| 柳州市| 洞口县| 若尔盖县| 国产成人精品一区二区三区视频| 国产真实的和子乱拍在线观看| 99精品视频在线观看| 辉南县| 亚洲啪av永久无码精品放毛片| 精品国产成人亚洲午夜福利| 无码国产精品一区二区免费式直播| 国产精品99| 凯里市| 999zyz玖玖资源站永久| 二连浩特市| 97人妻精品一区二区三区| 成人精品一区二区三区电影| 涡阳县| 国产麻豆剧传媒精品国产av| 日本护士毛茸茸| jlzzzjlzzz国产免费观看| 国产成人一区二区三区| 普洱| 青青草视频免费观看| 成全影视大全在线观看| 成人欧美一区二区三区在线观看| 国模无码视频一区二区三区| 乌鲁木齐市| 全国最大成人网| 日韩高清国产一区在线| 柘荣县| 国产午夜亚洲精品午夜鲁丝片| 国精品人妻无码一区二区三区喝尿 | 成人网站在线进入爽爽爽| 国产精品伦一区二区三级视频| 图片| 隆回县| 国产精品爽爽久久久久久| 普兰店市| 汪清县| 陇西县| 延边| 华坪县| 无码一区二区三区视频| 国产一区二区| 鹤岗市| 丁香婷婷综合激情五月色| jzzijzzij日本成熟少妇| 崇礼县| а√中文在线资源库| 桃源县| 南宫市| 日本免费一区二区三区| 国产偷窥熟妇高潮呻吟| 国产奶头好大揉着好爽视频| 辰溪县| 久久精品aⅴ无码中文字字幕重口| 中文久久乱码一区二区| 无码人妻精品一区二区蜜桃色欲 | 国产精品久久久一区二区三区| 在线观看的网站| 蜜臀av在线播放| 国产福利视频在线观看| 成全视频在线观看大全腾讯地图| 国内精品一区二区三区| 国产良妇出轨视频在线观看| 国产精品一品二区三区的使用体验| 国产aⅴ激情无码久久久无码| 涿鹿县| 国产看真人毛片爱做a片| 国产午夜精品一区二区| 永登县| av免费网站在线观看| 来宾市| 国产成人无码一区二区三区在线| 成全在线观看免费高清动漫| 亚洲精品久久久久avwww潮水| 靖西县| 乐至县| 少妇被爽到高潮动态图| 德清县| 长岛县| 枣强县| 名山县| 新竹市| 成人无码视频| 国产成人小视频| 国产欧美精品区一区二区三区| 三年大片免费观看大全电影| 沧州市| 望奎县| 色欲av永久无码精品无码蜜桃| 成全视频在线观看大全腾讯地图| 陵川县| 亚洲中文字幕无码爆乳av| 鹤庆县| 柘城县| 欧美俄罗斯乱妇| 明溪县| 国产乱码精品一品二品| 余庆县| 日本不卡三区| 欧美人妻日韩精品| 三年片在线观看大全| 漾濞| 少妇精品无码一区二区三区| 牛牛在线视频| 亚洲 小说区 图片区 都市| 囯产精品一品二区三区| 正镶白旗| 国产精品久久久久影院老司| 亚洲日韩一区二区三区| 苏州市| 国模无码视频一区二区三区| 德钦县| 久久精品噜噜噜成人| 99国产精品久久久久久久成人| 中文在线资源天堂www| 樟树市| 焦作市| 玉门市| 成人网站在线进入爽爽爽| 西昌市| 8050午夜二级| 欧美黑人又粗又大高潮喷水| 国产精品久久久午夜夜伦鲁鲁| 象州县| 永城市| 禄丰县| 凤冈县| 韶山市| 嘉荫县| 国产麻豆成人传媒免费观看| 久久国产劲爆∧v内射| 十堰市| 国产精品96久久久久久| 台安县| 妺妺窝人体色www在线下载| 九江县| 久久久久噜噜噜亚洲熟女综合| 郴州市| 国产精品久久久久无码av | 泗阳县| 国产麻豆剧果冻传媒白晶晶| 迭部县| 肥老熟妇伦子伦456视频| 邹城市| 成全在线观看免费高清电视剧| 宿松县| 高潮毛片又色又爽免费| 国产又爽又黄无码无遮挡在线观看 | 少妇被又大又粗又爽毛片久久黑人| 汨罗市| 熟妇高潮精品一区二区三区| 免费无码又爽又黄又刺激网站| 日韩一区二区a片免费观看| 女人和拘做爰正片视频| 濮阳县| 无码人妻精品一区二区蜜桃色欲| 国模无码一区二区三区| 齐河县| 国产成人av一区二区三区在线观看| 国产激情久久久久久熟女老人av | 亚洲熟女乱色综合亚洲小说| 999久久久国产精品| 精产国品一二三产区m553麻豆 | 欧洲-级毛片内射| 日韩av无码一区二区三区| 成全视频在线观看免费| 云龙县| 成人做受黄大片| 欧美一区二区三区成人片在线| 共和县| 精品少妇爆乳无码av无码专区| 永康市| 宜兴市| 汽车| 国产精品高清网站| 衢州市| 定州市| 少妇又紧又色又爽又刺激视频| 久久99精品久久久久久| 国产麻豆剧果冻传媒白晶晶| 东明县| 特级做a爰片毛片免费69| 日产电影一区二区三区| 三年中文在线观看免费大全| 欧美精品在线观看| 国产精品美女久久久久av超清| 徐水县| 巨大黑人极品videos精品| 亚洲永久无码7777kkk| 国产乱xxⅹxx国语对白| 国产午夜视频在线观看| 国产欧美一区二区精品性色| 天堂国产一区二区三区| 红原县| 久久久久久久久毛片无码| 牛牛在线视频| 南宁市| 中文人妻av久久人妻18 | 霸州市| 无码少妇一区二区| 喀喇| 天堂va蜜桃一区二区三区| 维西| 亚洲日韩一区二区三区| 最好的观看2018中文| 少妇被爽到高潮动态图| 婷婷四房综合激情五月| 在线观看的av网站| 全国最大成人网| 阳信县| 赤城县| 久久久久麻豆v国产精华液好用吗 国产亚洲精品久久久久久无几年桃 | √8天堂资源地址中文在线| 国产偷窥熟妇高潮呻吟| 国产午夜激无码毛片久久直播软件| 临邑县| 亚洲国精产品一二二线| 无码人妻丰满熟妇bbbb| 久久久噜噜噜久久中文字幕色伊伊| 渑池县| 五常市| 特黄aaaaaaaaa毛片免费视频| 欧美顶级metart裸体全部自慰| 日本55丰满熟妇厨房伦| 平江县| 琪琪电影午夜理论片八戒八戒| 加查县| 无码人妻丰满熟妇区bbbbxxxx| 呼和浩特市| 成人精品视频99在线观看免费| 久久婷婷成人综合色| 国产久久精品| 成人h视频在线观看| 遂宁市| 狂野少女电视剧免费播放| 搡老熟女老女人一区二区| 国产后入清纯学生妹| 欧美成人在线视频| 大地资源二在线观看免费高清| 性生交大片免费看l| 下面一进一出好爽视频| 芜湖县| 佛坪县| 中文字幕乱码人妻无码久久| 临夏市| 好爽又高潮了毛片免费下载| 普洱| 台北县| 少妇被又大又粗又爽毛片久久黑人| 国产免费视频| 国产偷人妻精品一区| 闻喜县| 沅江市| 讷河市| 性少妇freesexvideos高清| 成人做爰a片免费看黄冈| 欧洲-级毛片内射| 国模无码大尺度一区二区三区 | 亚洲精品久久久久久| 海林市| 狠狠干狠狠爱| 久久久久久无码午夜精品直播| 定结县| 国产精品丝袜黑色高跟鞋| 澄迈县| 国产成人精品aa毛片|