Я недавно сделал рефакторинг. По сути, у нас есть система, которая читает XML-файл и выполняет с ним некоторые операции, а затем обновляет его и записывает. Я разделил эту функциональность на два класса
- Класс, который "контролирует" XML и абстрактно говорит, что с ним делать.
- Класс, который обрабатывает все с помощью XML и предоставляет простой интерфейс для обновления и чтения того, что беспокоит №1.
Теперь реализация стала значительно понятнее. # 1 не нужно беспокоиться о пространствах имен XML, запросах XPath или о чем-то подобном. Он просто говорит: "Эй, №2, обновите эту часть с" foo "до" bar "".
Однако я не знаю, как это назвать. Старый класс был назван чем-то моим FooManifestXml. Как мне назвать эти два класса? У меня есть кое-какие идеи, но я бы не хотел искажать результаты.
Кроме того, большая причина, по которой я беспокоюсь об этом простом именовании, заключается в том, что в будущем, вероятно, будет проведен больше рефакторинга, подобного этому, и я хотел бы иметь для него некоторую интуитивно понятную схему именования.
Ответ 1 · рейтинг 2 · oleksii
Похоже на шаблон команды с небольшими изменениями.
Класс, который "контролирует" 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();
Ответ 2 · рейтинг 1 · Mike Valenty
На высоком уровне я думаю об этом так:
Место хранения
- Файловая система
- База данных
- объем памяти
С четкой абстракцией хранилища (AbcStore или AbcRepository) вы можете более легко добавить поведение, такое как кеширование или блокировка.
Формат сериализации
Почему вы выбрали XML, возможно, это изменится или данные будут доступны в разных форматах для разных клиентов. Я недостаточно знаю ваше приложение, чтобы понять, имеет ли это смысл.
Я мог бы назвать эту абстракцию AbcSerializer.
Бизнес-логика
Здесь вы манипулируете данными, и имена методов должны находиться в проблемной области, а не в области решения. Я имею в виду, что имя метода должно быть примерно таким, как changeAddress, а не updateChildNode