Skip to content

Instantly share code, notes, and snippets.

@kirilltobola
Forked from UnQuaiz/README.md
Last active September 20, 2021 13:33
Show Gist options
  • Save kirilltobola/103d213f1da6819c0083faea2d24b6cf to your computer and use it in GitHub Desktop.
Save kirilltobola/103d213f1da6819c0083faea2d24b6cf to your computer and use it in GitHub Desktop.
StringHandler

Имеется набор парсеров текстовых форматов: XmlParser и CsvParser. Сама реализация парсеров сейчас не имеет значения. Есть класс StringHandler - который имеет метод parseString(string $format, string $string)

Перепишите код таким образом, чтобы этот код можно было свободно расширять, добавлять новые типы парсеров, не модифицируя в дальнейшем класс StringHandler Руководствуйтесь принципами разработки которые знаете.

Решение можно оформить в виде gist'а Сделайте форк и в нём измените код


В данный момент нарушаются принцип DIP.

DIP - Класс StringHandler зависит от конкретных реализаций парсера.

Решение:

<?php
class StringHandler
{
public function parseString(Parser $parser, string $string)
{
return $parser->parse($string);
}
}
interface Parser
{
public function parse(string $string);
}
class XmlParser implements Parser
{
public function parse(string $string)
{
echo "xml parser -> ".$string;
}
}
class CsvParser implements Parser
{
public function parse(string $string)
{
echo "csv ->".$string;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment