2010-09-28 77 views
0

這是一個標誌,這裏需要一些設計模式嗎?一堆私人物業一一執行

/** 
* @return string 
*/ 
public function filter($string) 
{ 
    // underscored means private 
    $this->_prepareSomething($string); 
    $this->_prepareSomething2(); 
    $this->_prepareSomething3(); 
    $this->_prepareSomething4(); 
    $this->_prepareSaveSomethingToFile(); 

    return $this->getFiltered(); 
} 
+0

需要更多信息才能真正辨別。 – Chris 2010-09-28 13:15:39

+2

同意我們需要更多信息,但看起來有點像某些抽象可能適用於此處。很難說它是否僅僅爲了可測試性而分裂(而不是單一的例程,將它分解成一堆小的)。但它仍然緊密結合......或許[責任鏈條](http://sourcemaking.com/design_patterns/chain_of_responsibility)或[Command](http://sourcemaking.com/design_patterns/command)模式可能更適合。但是,如果不完全瞭解它的作用,我不確定這裏有什麼適用的...... – ircmaxell 2010-09-28 13:19:21

+0

首先想到的是ircmaxell提到的一個責任鏈,但我認爲需要更多的信息。 – tplaner 2010-09-28 13:22:39

回答

1

這都是關於可讀性和正確的抽象級別。作爲讀者,我很難看到_prepare *函數之間交換了什麼數據。而且,讓我們假裝他們是某種計算,然後將一些數據保存到文件將業務邏輯與持久性混合在一起。這看起來像混合了抽象層次。

此外,getFiltered()調用也令人困惑,因爲它看起來像使用與原始函數類似的命名方案調用公共方法。

樣式:請參閱http://c2.com/ppr/wiki/WikiPagesAboutRefactoring/ComposedMethod.html瞭解組合方法模式說明,http://www.markhneedham.com/blog/2009/06/12/coding-single-level-of-abstraction-principle/ SLAP原理。

+0

+1:另外,我會強烈推薦閱讀[代碼完成2](http://www.amazon.com/Code-Complete-Practical-Handbook-Construction/dp/0735619670),因爲它很好地解釋所有這些... – ircmaxell 2010-09-28 13:53:09

0

它看起來像你已經實施Template Method pattern。如果你的類有子類可能需要重寫該過程中的某些步驟,那麼我會說你已經有效地設計了你的基類。