PHP命名空间/设计问题

时间:2011-04-15 19:24:54

标签: php design-patterns namespaces

我目前正在编写一个小型库,用于检测内容中的“坏”字(请参阅here),我在确定如何命名特定类的命名方式时遇到了一些麻烦。

到目前为止我的图书馆的使用流程如下,

$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\ConfigWord中的Dictionary转换为正则表达式。

现在我的问题是我不知道该叫什么和/或把这个“转换器”放在哪里。

我目前的想法是,

  1. Word\RegExpConverter(因为有Word类来表示单词)
  2. Word\Converter\RegExp
  3. Filter\RegExpConverter
  4. 因为正在转换Word,所以将它放在Word\命名空间中似乎是有意义的,但同时它是Filter特有的并且需要{ {1}}。

    思考?想法?

    干杯,史蒂夫

2 个答案:

答案 0 :(得分:0)

所以你有一个名为Word的课程Filter消费(通过转换器)?

你可能过度了 - 首先,考虑让Filter消费Word并在内部转换它们。如果您没有计划在其他地方重用正则表达式转换功能,并且您没有具体计划提供替代转换器来代替RegExConverter,那么就没有充分的理由将其粘贴在自己的类中。

似乎更有可能提供其他(非RegEx)转换器。

如果是这种情况,那应该是一个提示。也许这样的事情是合适的:

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

答案 1 :(得分:0)

在阅读timdev的答案和一些反思后,他说得对,我试图过度抽象我的建筑。

我只想将Word转换为正则表达式。如果我要转换成多种格式,我会引入转换器并注入它们。

因为Filter\Config存在以定义应该如何生成正则表达式,所以只有逻辑应该驻留在那里才有意义。

所以我的实现将是,

$config->generateRegExp($word);

干杯。