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

寫好軟件的訣竅

開發 前端 后端
事實上,計算機并不去閱讀你在程序里寫了什么,而人會。計算機把程序員寫的代碼編譯成字節比特,真正會去看你寫的是什么的只有人類。

[[72114]]

 

真實情況

真實情況是,計算機能正確的按照命令去運行。無論你寫的是“Hello World”,還是用無人飛機去殺死一個人。計算機都能精確的按照你的命令去做。

可我們的工作,我們的真正工作是:告訴程序員和我們自己:我們讓計算機做什么了。現代的軟件編程思想就是結構化的、清楚的描述計算機將要執行的任務。

事實上,計算機并不去閱讀你在程序里寫了什么,而人會。計算機把程序員寫的代碼編譯成字節比特,真正會去看你寫的是什么的只有人類。

寫軟件要像講故事

如果你對你的工作和你寫的代碼的行為有了新的認識,你會馬上很清楚的發現,編程工作更像講故事。

想一想。你是如何知道一個人講故事沒人愛聽的?這很簡單,他老跑題,他老是糾結在不重要的細節上,他老是在故事場景中挑來跳去,等等。你立刻能知道故事被他講爛了。

雖然在***你能明白故事里發生了什么,你甚至能復述它,但你會喜歡這樣的故事嗎?你會有興趣轉述給別人或豐富故事內容嗎?

相同的事情也發生在軟件開發中。如果你的代碼寫的含糊不清,亂七八糟,沒有人會愿意欣賞它。沒有人會愿意看它第二次。并且你是***個受它折磨的人。

訣竅

那么,現在你想要知道這個簡單的秘訣,不是嗎?下面就是代碼里的干擾因素越少越好

注意,我不是在討論明晰的代碼vs隱晦的代碼,不是在討論約定優先,不是在討論元數據編程有害或其它類似的東西。

寫出好的軟件的訣竅是代碼里只寫那些能讓你的代碼講出的故事更有意義的內容。如果它能讓你的代碼更清楚,那就這樣寫它。如果這個東西對故事沒有任何意義,那就扔了它。扔了它能讓故事更好。如果代碼耦合模塊不清,就用元數據編程和約定。

例子

有一些經典的例子可以證明這一點。比如,描述一篇帖子和它的作者的關系。

  1. class Post < ActiveRecord::Base  
  2.   belongs_to :author, class_name: 'User', foreign_key: :authored_by  
  3. end 

看見了沒?所有關于類名,外鍵的信息都是干擾。去掉它們。

  1. class Post < ActiveRecord::Base  
  2.   belongs_to :user  
  3. end 

第二版中沒有好聽的“作者”字眼,但卻是更優的,因為它直奔主題,用最簡短的語句告訴所有你想知道的。

另外一個例子,說一個類需要關聯那些創建/修改它的信息的用戶

  1. class Setting < ActiveRecord::Base  
  2.   belongs_to :creator  
  3.   belongs_to :editor  
  4.  
  5.   attr_accessor :editing_user  
  6.  
  7.   before_create :set_creator  
  8.   before_update :set_editor  
  9.  
  10. private 
  11.  
  12.   def set_creator  
  13.     self.creator = @editing_user  
  14.   end  
  15.  
  16.   def set_editor  
  17.     self.editor = @editing_user  
  18.   end  
  19.  
  20. end 

干擾,所有的這些回調和attr_acessors都是干擾,都是垃圾信息,沒有任何價值體現在你想完成的任務中。更簡潔更好的方法是下面這樣寫:

  1. class Setting < ActiveRecord::Base  
  2.   belongs_to :creator  
  3.   belongs_to :editor  
  4.  
  5.   def editing_user=(user)  
  6.     if new_record?  
  7.       self.creator = user  
  8.     else 
  9.       self.editor = user  
  10.     end  
  11.   end  
  12. end 

你可以看到它精煉的告訴了我們發生了什么。這段代碼說,這個類有一個記錄創建者,一個編輯者,我們用editing_user賦給它們值。沒有回調干擾。沒有幾個private方法的無用信息。

一個更經典的例子。在controller里管理數據

  1. class PostsController < ApplicationController  
  2.   def create  
  3.     if params[:post][:text].present?  
  4.       if params[:post][:text] =~ /fuck|cock|shit/  
  5.         flash[:error] = "Be nice" 
  6.         @achtung = true 
  7.       end  
  8.     end  
  9.  
  10.     if !@achtung  
  11.       @post = Post.new(params[:post])  
  12.  
  13.       if @post.save  
  14.         flash[:success] = "Yoo hoo!" 
  15.         redirect_to :index  
  16.       else 
  17.         render :new 
  18.       end  
  19.     else 
  20.       redirect_to :index  
  21.     end  
  22.   end  
  23. end 

所有的這些條件邏輯跟你的controller實際上沒有任何關系。所有的這些邏輯判斷并不屬于controller層負責。當然,你可以這樣做,而其能正常的運行,但這不是好的軟件。

試試這樣寫

  1. class PostsController < ApplicationController  
  2.   def create  
  3.     @post = Post.new(params[:post])  
  4.  
  5.     if @post.save  
  6.       flash[:success] = "Yoo hoo!" 
  7.       redirect_to :index  
  8.     else 
  9.       render :new 
  10.     end  
  11.   end  
  12. end  
  13.  
  14. class Post < ActiveRecord::Base  
  15.   validate :bad_language_check  
  16.  
  17. private 
  18.  
  19.   def bad_language_check  
  20.     if text =~ /fuck|shit|cock/  
  21.       errors.add(:text, "has some pretty bad language")  
  22.     end  
  23.   end  
  24. end 

現在你的controller能清楚的說明白發生了什么。你可以清楚的看明白當記錄可以創建和不能創建時會發生什么。跟Post類一樣,你可以清楚的理解它在過濾那些不干凈的文字。而且校驗器有自己單獨的地方。它的實現方式不會影響Post本身。

結論

其實很簡單。想寫出好的軟件嗎?別再給機器寫代碼,從此后為人寫代碼。

就這么簡單。

英文原文:The Trick To Good Software

譯文連接:http://www.aqee.net/the-trick-to-good-software/

 

 

責任編輯:林師授 來源: 外刊IT評論
相關推薦

2020-08-31 10:54:05

勒索軟件漏洞網絡安全

2009-12-14 14:36:40

VS 2008軟件

2009-09-28 11:06:00

CCNA自學訣竅CCNA

2024-03-01 16:12:11

2020-05-25 22:39:38

機器學習物聯網IOT

2016-10-25 13:46:25

深度學習機器學習性能提升

2010-03-24 17:57:36

2024-09-03 08:24:52

RestfulAPI結構

2013-01-11 11:32:51

2010-10-12 10:15:45

升級無線網卡

2011-10-17 09:47:53

應用性能工作負載服務器

2019-01-18 09:50:14

物聯網數據IOT

2016-10-17 14:29:01

數據中心恒溫恒濕“智”冷

2011-03-23 14:09:50

Oracle數據

2012-06-15 10:14:22

2021-06-22 09:18:13

Python代碼技巧

2018-08-28 16:02:59

LinuxShellBash

2011-06-13 14:05:58

描述標簽

2010-03-12 09:57:00

寫好簡歷

2015-10-28 15:04:06

程序員好代碼好文檔
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国精日本亚洲欧州国产中文久久 | 亚洲成av人片在线观看 | 欧美日韩在线视频一区二区 | 亚洲成人精选 | 久在线| 99re在线视频| 免费精品久久久久久中文字幕 | 久久精品国内 | 亚洲综合资源 | 午夜精品视频在线观看 | 视频二区在线观看 | 久久国产一区二区三区 | 久草中文网 | 成年视频在线观看 | 成人一区二区三区在线观看 | 特一级黄色毛片 | 日韩成人av在线 | 国产精品成人一区二区三区吃奶 | 国产美女精品 | 夜夜久久| 免费激情网站 | 精品自拍视频 | 欧美aⅴ | 国产精品一区免费 | 91动漫在线观看 | www.天天操.com | 99re在线| 亚洲在线一区二区 | 久久久综合久久 | 日韩三级 | av资源中文在线天堂 | 中国一级大黄大片 | 成人欧美日韩一区二区三区 | 国产免费xxx | .国产精品成人自产拍在线观看6 | 国产精品一区二区在线 | 亚洲精品大片 | 国产日韩欧美 | 欧美三级电影在线播放 | 亚洲欧美在线一区 | 一区二区视频在线 |