Какое имя я должен дать этим двум классам, которые были отделены от одного класса?

Я недавно сделал рефакторинг. По сути, у нас есть система, которая читает XML-файл и выполняет с ним некоторые операции, а затем обновляет его и записывает. Я разделил эту функциональность на два класса

  1. Класс, который «контролирует» XML и абстрактно говорит, что с ним делать.
  2. Класс, который обрабатывает все с помощью XML и предоставляет простой интерфейс для обновления и чтения того, что беспокоит №1.

Теперь реализация стала значительно понятнее. # 1 не нужно беспокоиться о пространствах имен XML, запросах XPath или о чем-то подобном. Он просто говорит: «Эй, №2, обновите эту часть с« foo »до« bar »».

Однако я не знаю, как это назвать. Старый класс был назван чем-то моим FooManifestXml. Как мне назвать эти два класса? У меня есть кое-какие идеи, но я бы не хотел искажать результаты.

Кроме того, большая причина, по которой я беспокоюсь об этом простом именовании, заключается в том, что в будущем, вероятно, будет проведен больше рефакторинга, подобного этому, и я хотел бы иметь для него некоторую интуитивно понятную схему именования.


person Earlz    schedule 07.02.2013    source источник
comment
У вас все хорошо, если ваша основная проблема - это именование классов;) Я бы лично, вероятно, назвал их как-то вроде FooManifestXmlController и FooManifestXmlHandler.   -  person 500 - Internal Server Error    schedule 07.02.2013


Ответы (2)


Похоже на шаблон команды с небольшими изменениями.

Класс, который «контролирует» XML и абстрактно говорит, что с ним делать

Это может быть ICommand

public interface ICommand
{
    void Execute();
}

Класс, который обрабатывает все с помощью XML и предоставляет простой интерфейс для обновления и чтения того, что беспокоит №1

Это может содержать выполнение действий:

public class UpdateCommand : ICommand
{
    private XML file;

    public UpdateCommand(XML file)
    {
        this.file = file;
    }

    public void Execute()
    {
        //omn nom nom xml
    }
}

И main может выглядеть как

XML file = new XML("file.xml");
ICommand updateCommand = new UpdateCommand(file);
updateCommand.Execute();
person oleksii    schedule 07.02.2013

На высоком уровне я думаю об этом так:

Место хранения:

  • Файловая система
  • База данных
  • объем памяти

С четкой абстракцией хранилища (AbcStore или AbcRepository) вы можете более легко добавить поведение, такое как кеширование или блокировка.

Формат сериализации:

Почему вы выбрали XML, возможно, это изменится или данные будут доступны в разных форматах для разных клиентов. Я недостаточно знаю ваше приложение, чтобы понять, имеет ли это смысл.

Я мог бы назвать эту абстракцию AbcSerializer.

Бизнес-логика:

Здесь вы манипулируете данными, и имена методов должны находиться в проблемной области, а не в области решения. Я имею в виду, что имя метода должно быть примерно таким, как changeAddress, а не updateChildNode

person Mike Valenty    schedule 07.02.2013
comment
Это явно не сериализатор, поэтому это не сработает. Мы читаем XML-файл и немного им манипулируем. Некоторые части XML должны оставаться неизменными, и нам даже не нужно о них знать. - person Earlz; 07.02.2013