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