我目前正在编写一个小型库,用于检测内容中的“坏”字(请参阅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\Config
将Word
中的Dictionary
转换为正则表达式。
现在我的问题是我不知道该叫什么和/或把这个“转换器”放在哪里。
我目前的想法是,
Word\RegExpConverter
(因为有Word
类来表示单词)Word\Converter\RegExp
Filter\RegExpConverter
因为正在转换Word
,所以将它放在Word\
命名空间中似乎是有意义的,但同时它是Filter
特有的并且需要{ {1}}。
思考?想法?
干杯,史蒂夫
答案 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);
干杯。