Мой проект содержит много классов, кучу которых можно описать с помощью файлов XML. Не волнуйтесь, это не логика или реализация в XML. Это игра, и примером может служить определение игрового тайла в XML, файла изображения, кадров анимации и т. Д.
В итоге у меня будет куча функций, которые выглядят так:
public static Foo FromXml(ref XmlTextReader reader) { ... }
Вопрос заключается в следующем: должны ли эти функции содержаться в своем собственном соответствующем классе, например, приведенным выше будет Foo.FromXml. Или я должен сделать отдельный класс для чтения вещей из файлов? Кажется, здесь конкурируют два основных принципа:
- Класс должен знать все об одной вещи - о себе.
- У класса должна быть только одна причина для изменения.
Прежде всего, я не совсем понимаю второй, потому что «причина» довольно расплывчата. Первое руководство предлагает поместить каждого читателя в соответствующий класс. Второй говорит сделать один класс, предназначенный для чтения XML-файлов. Но плюсы и минусы спорны. С одной стороны, каждый класс может содержать своего собственного читателя, так что на него не ссылаются дюжина классов. С другой стороны, каждый класс должен включать System.Xml, и если я изменю свой формат xml, вещи могут измениться в нескольких файлах (но я не думаю, что это слишком плохо).
Я знаю, что самое важное правило - это «использовать свой мозг», и не существует такого понятия, как «правильное» решение, только хорошее и работающее. Так что, по вашему мнению, было бы более читабельным или еще лучше поддерживаемым?
изменить: уточнить, классы могут быть совершенно не связаны. Так как это игра, то может быть классом спрайтовой анимации, кто-то может определять поведение врага, кто-то может определять макет или свойства карты. Так что наследование не имеет к этому никакого отношения.