再論代碼之美——PHP實戰

英文原文:http://blog.agilephp.com/2008/11/08/more-beautiful-code/?op=ViewArticle&blogId=1&articleId=169

 

自前些日子發表代碼之美一文以來,收到了很多有趣的評論,一些人對我的觀點提出了強烈的質疑。

那麼我錯了?是我扯遠了?是我的判斷能力出問題了?我承認我有時候會有意強調事物的優點而忽略了它的負面影響(或反過來,對一個謹慎的人而言,這是一個很好的練習)。

無論如何,我沒有滿口胡言。讓我再次仔細地分析一下這行以前分析過的代碼:

 

$this->assertThat($form->hasSelect(withName('statusConfirm'))->hasValues(),
    array('Yes','No'));
 

 

我的主要觀點是它非常接近於簡單的英語。不是所有的人都認爲這是一個好事情,但是我認爲人類更易於理解自然語言(事實上這是基因遺傳決定的),而不是程序代碼。因此,當代碼接近於自然語言和表達式時,就能夠方便人們的理解。我們正致力於創造或仿真出一種領域語言(DSL),它可以確切的表達出領域的需求,而不是技術實現的要求。

因此,我們做一個類似的試驗,把這行代碼翻譯爲一個簡單的英語句子:

斷言這個Form包含一個名爲statusConfirm的選擇菜單,它包含兩個值:yes和no。

把這句英語句子重新翻譯會代碼,它可能像下面這樣子:

 

$this->assertThat($form)->hasSelect()->withName('statusConfirm')->andValues('yes','no');
 

 

對於我而言,這行代碼比原先的更接近於自然語言。我認爲我們剛纔解決的是一些和實現細節有關的語法問題,並沒有讓這個API變得更加易於使用。

同時它也說明了代碼的實現方法:這些函數應該全部位於一個斷言對象,它們接收各自的參數進行處理,並且最後返回對象自身,從而可以實現鏈式調用。這也就是衆所周知的流式接口。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章