2011-04-15 124 views
0

我目前正在編寫一個小庫,用於檢測內容中的「壞」字(請參閱here),並且在決定特定類的命名空間方式/位置方面遇到一些麻煩。PHP命名空間/設計問題

我的圖書館的使用流程迄今如下,

$dictionary = new Dictionary\Csv('/path/to/file.csv'); 
$config = new Filter\Config\Standard(); 
$filter = new Filter($dictionary, $config); 

基本上你創建單詞的Dictionary,一個Filter\Config定義如何Filter執行,然後創建一個Filter從所述對象。

在內部,Filter使用Filter\ConfigDictionary中的Word轉換爲正則表達式。

現在我的問題是我不知道該叫什麼和/或把這個「轉換器」放在哪裏。

我的當前的想法是,

  1. Word\RegExpConverter(因爲有一個Word類來表示一個字)
  2. Word\Converter\RegExp
  3. Filter\RegExpConverter

由於Word正在轉換,它在Word\命名空間中似乎有意義,但同時它是一些特定於Filter的東西,並且需要Filter\Config

想法?想法?

乾杯,史蒂夫

回答

0

閱讀timdev的答案和一些反映後,他是正確的,我用我的抽象結構努力。

我只想將Word轉換爲正則表達式。如果我要轉換成多種格式,那麼我會引入轉換器並注入它們。

而且由於存在Filter\Config來定義應該如何生成正則表達式,所以只有在邏輯應該駐留的位置纔有意義。

所以我的實現將是,

$config->generateRegExp($word); 

乾杯。

0

所以,你有一個名爲WordFilter消耗類(通過轉換器)?

您可能會過度使用它 - 首先,考慮讓Filter使用Words並在內部轉換它們。如果您沒有計劃在其他地方重複使用正則表達式轉換功能,並且您沒有具體的計劃來提供替代轉換器來替代RegExConverter,那麼沒有理由將其固定在自己的類中。

似乎提供一些其他(非RegEx)轉換器更有可能。

如果是這樣的話,那應該是一個提示。或許,這樣的事情將是適當的:

Filter\WordConverter\RegEx 
Filter\WordConverter\Magic 
Filter\WordConverter\AbstractWordConverter (or maybe I'm just an interface?) 
+0

首先'Filter'檢查是否有正則表達式的緩存。如果沒有,它使用'Dictionary'上的'getWords()'來獲取'Word'對象。這是我不確定的地方。使用'Config','Filter'將'Word'轉換成正則表達式。我可以在Filter內部做到這一點,但它看起來「錯誤」,因爲它不是「Filter」的工作?儘管我明白你的意思,也許我正在設計(?)這個。 – 2011-04-15 19:47:32

+0

這聽起來更糟糕,但我渴望得到別人的意見。你認爲'$ config-> getRegExp($ word)'是什麼意思?由於'Config'的作用是從字面上定義如何構建正則表達式,以及可能有1或2個適用於'Filter'本身的規則。 – 2011-04-15 19:57:05