2012-05-24 43 views
0

你曾經寫過一個函數Foo,在你的程序中使用它,然後最終決定重構你的代碼並重寫另一個函數Bar,它比Foo好,並決定「哦,我們將使用Bar而不是Foo從今起」。但是,不是隻是刪除Foo,而是在代碼中替換Foo的每一個出現,您決定將Foo聲明爲Bar的一個別名?功能別名不好嗎?

你們中的一些人可能會說:你爲什麼不重寫函數Foo並將它的名字保存爲Foo,那麼你不必用Foo代替Foo的每一次出現?好吧,由於重構,Foo不再是一個合適的名字,因爲它不能反映這個函數的功能,所以我決定不保留它的名字。

這是什麼樣的retrocompatibility?

編輯:假設

  1. 富被寫了一個你的同事
  2. 說同事來富
  3. 你在誰認爲故事中的白癡比別人聰明,寫酒吧
+1

這種* lazy *別名不好,是的。使用真正的重構工具。這並不是說別名是不好的。至於「兼容性」 - 取決於消費者是誰以及是否暴露等。但通常這種兼容性將由代理或其他棄用路由處理,而不是別名。 – 2012-05-24 16:22:19

+5

這取決於Foo是否是Bar的*誤導*名稱。您的技術是保持向後兼容性的常用技術。在Java中,您可以將Foo標記爲'@ Deprecated',並註釋說Bar是更好的選擇,並且編譯器會將Foo的出現標記爲警告 –

+0

哇,我不知道在Java中這很容易。很好的評論,謝謝。 – ychaouche

回答

1
Foo was written by one of you coworkers 
said coworkers are used to Foo 
you're the moron in the story who thinks is smarter than the others and wrote Bar 

問問你的同事,並解釋爲什麼要重命名它。除非他們真的相信原來的名字更好,否則他們不會在乎。如果該方法處於面向公衆的API中或由數百個開發人員使用,則將其棄用。否則,只需使用重構工具將其重命名即可。

如果您試圖讓您的代碼像DSL一樣讀取,並且想要兩種方式來表達同樣的內容(如Ruby中),那麼也可以使用別名。