PHP名称空间/设计问题

PHP名称空间/设计问题,php,design-patterns,namespaces,Php,Design Patterns,Namespaces,我目前正在编写一个用于检测内容中的坏词的小库,请参见,我在决定如何/在何处命名特定类时遇到了一些困难 我的图书馆目前的使用流程如下: $dictionary = new Dictionary\Csv('/path/to/file.csv'); $config = new Filter\Config\Standard(); $filter = new Filter($dictionary, $config); 基本上,您可以创建一个单词词典,一个定义过滤器执行方式的Filter\Config,然

我目前正在编写一个用于检测内容中的坏词的小库,请参见,我在决定如何/在何处命名特定类时遇到了一些困难

我的图书馆目前的使用流程如下:

$dictionary = new Dictionary\Csv('/path/to/file.csv');
$config = new Filter\Config\Standard();
$filter = new Filter($dictionary, $config);
基本上,您可以创建一个单词词典,一个定义过滤器执行方式的Filter\Config,然后从所述对象创建一个过滤器

在内部,筛选器使用Filter\Config将字典中的单词转换为正则表达式

现在我的问题是我不知道该调用什么和/或将此转换器放置在何处

我现在的想法是

Word\RegExpConverter,因为有一个Word类来表示一个单词 Word\Converter\RegExp 过滤器\RegExpConverter 因为这个词正在被转换,所以将它放在Word\namespace中似乎是有意义的,但同时它是特定于筛选器的,需要Filter\Config

想法?想法


干杯,史蒂夫,你有一个叫做Word的类,它是通过转换器过滤的

你可能做得太过火了。首先,考虑只使用过滤器消耗的单词并在内部进行转换。如果您没有在其他地方重用regex转换功能的计划,也没有提供替代RegExConverter的替代转换器的具体计划,那么就没有理由将其保留在自己的类中

似乎更可能提供其他非正则表达式转换器

如果是这样的话,那应该是一个提示。也许这样做是合适的:

Filter\WordConverter\RegEx
Filter\WordConverter\Magic
Filter\WordConverter\AbstractWordConverter (or maybe I'm just an interface?)
在阅读了他的答案和一些思考之后,他说得对,我试图过度抽象我的架构

我只想把一个单词转换成正则表达式。如果我要转换成多种格式,我会引入转换器并注入它们

由于Filter\Config用于定义正则表达式的生成方式,因此逻辑应该驻留在这里才有意义

所以我的实施将是,

$config->generateRegExp($word);

干杯。

第一个过滤器检查是否有正则表达式缓存。如果没有,它将使用字典上的getWords来获取单词对象。这就是我变得不确定的地方。使用配置,过滤器将单词转换为正则表达式。我可以在过滤器内部做到这一点,但这似乎是错误的,因为这不是过滤器的工作?我明白你的意思,也许我设计得太过了。这听起来更糟,但我很想听听别人的意见。你认为$config->getRegExp$word怎么样?因为配置的作用是确切地定义正则表达式的构建方式,以及可能应用于过滤器本身的一两条规则。