PHP Namespace / Дизайн Вопрос - PullRequest
0 голосов
/ 15 апреля 2011

В настоящее время я пишу небольшую библиотеку для обнаружения «плохих» слов в контенте (см. здесь ), и у меня возникли небольшие проблемы с решением, как / где именовать пространство определенного класса.

Пока что использование моей библиотеки выглядит следующим образом:

$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 в регулярные выражения.

Теперь моя проблема в том, что я не знаю, как позвонить и / или куда поставить этот «конвертер».

Мои нынешние идеи:

  1. Word\RegExpConverter (поскольку существует класс Word для представления слова)
  2. Word\Converter\RegExp
  3. Filter\RegExpConverter

Поскольку Word преобразуется, кажется, имеет смысл иметь его в пространстве имен Word\, но в то же время это нечто специфическое для Filter и требует Filter\Config.

Мысли? Идеи?

Ура, Стив

Ответы [ 2 ]

0 голосов
/ 16 апреля 2011

Прочитав Тимдев ответ и некоторые размышления, он был прав в том, что я пытался чрезмерно абстрагировать свою архитектуру.

Я только захочу преобразовать Wordв регулярное выражение.Если бы я собирался конвертировать в несколько форматов, я бы тогда представил конвертеры и внедрил их.

И поскольку существует Filter\Config для определения того, как должно генерироваться это регулярное выражение, имеет смысл только то, что именно тамлогика должна постоянно находиться.

Таким образом, моя реализация будет

$config->generateRegExp($word);

Приветствия.

0 голосов
/ 15 апреля 2011

Итак, у вас есть класс с именем Word, который Filter потребляет (через конвертер)?

Возможно, вы переусердствовали - во-первых, подумайте о том, чтобы просто использовать Filter для использования слов и конвертировать их внутренне.,Если вы не планируете повторно использовать функцию преобразования регулярных выражений в другом месте, и у вас нет конкретных планов по предоставлению альтернативного преобразователя для использования вместо RegExConverter, нет веской причины помещать его в свой собственный класс.

Похоже, что предоставление какого-либо другого (не RegEx) конвертера более вероятно.

Если это так, это должно быть подсказкой.Возможно, что-то подобное подойдет:

Filter\WordConverter\RegEx
Filter\WordConverter\Magic
Filter\WordConverter\AbstractWordConverter (or maybe I'm just an interface?)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...