• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    OO難題在Ruby中有了新解

    發布: 2008-2-18 16:48 | 作者: Robert C. Martin | 來源: CSDN博客 | 查看: 198次 | 進入軟件測試論壇討論

    領測軟件測試網 單一職責原則(SRP)認為,一個類應該有且只有一個改變的原由。換個說法,一個類中的方法應該出于同樣的一種原由而改變,它們不應被不同原由所驅使,而導致朝著不同的方向改變。

      舉個例子來說,考慮一下以下的Java類:

      class Employee
      {
       public Money calculatePay() {...}
       public void save() {...}
       public String reportHours() {...}
      }

      這個類由于擁有三種改變的原由,所以違反了SRP。第一種,是跟支付薪水方式有關的商業規則;第二種,是數據庫的結構;第三種,是報表的時間格式的字符串。我們不希望這樣一個單一的類會被這三種完全不同原由所影響,不希望因為會計認為需要每天改變報表的時間格式,或是DBA每天都要改變數據庫結構,也可能是管理人員每天要改變支付薪水的方式,而去改變Employee類。相反,我們希望把這些方法分離到不同類中,這樣它們就既能彼此互不干擾,又可隨意改變。

      當然這好像又與OO的概念相違背,因為一個好的對象應該包含所有操縱它的方法。分解的做法的確有這種趨勢,我們因為不希望商業規則與報表格式混雜起來,所以就需要將這些方法放入到不同的類中。

      然而,在Ruby中,情況會有些不同。仔細想想下面三個文件:

      employeeBusinessRules.rb

      class Employee  def calculatePay ... endend

      employeeDatabaseSave.rb

      class Employee  def save ... endend

      employeeHourlyReport.rb

      class Employee  def reportHours ... endend

      由于在Ruby中,類是在運行時被創建的(也就是說,上面的代碼也可視作是一段程序執行片斷),類可能是在程序執行的任意時間被展開,更多的方法和成員也可能是在此時被賦到類上。在主程序中我們也許會看到一些諸如:

      require 'employeeBusinessRules.rb'
      require 'employeeDatabaseSave.rb'
      require 'employeeHourlyReport.rb'

      因此,類會在余下的程序開始執行前被構造完成?墒菦]有一個源文件包含了所有這三個不同的方法。實際上,這三個源文件對彼此一無所知,而這就意味著,這三個文件之間并沒有耦合。

      毫無疑問,我們必須要關注這些成員。為了能訪問這些成員(分散在多個源文件中),我們搞不好會使得這些源文件拙劣的耦合起來?墒,假如你有那么一點點地關注并抽象的話,就能使得這些源文件非常漂亮的解耦,進一步的,還可以把這些方法保留在同一個類中(因此也在同一對象中)!

      所以,在Ruby中,不用違反SRP原則,就可以把不同的方法放置在同一個類中,并且屬于同一個類。你只需簡單的將這些有著不同原由的方法放置在不同的源文件中即可。真是魚與熊掌得其兼!

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/

    TAG: ruby Ruby


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備2023014753號-2
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>