Я работаю над проектом, который требует десериализации файла фиксированной длины в структуру объекта.Шаблон для разных структур данных
Файл имеет эту базовую структуру:
- данные заголовка файла
----- группы
---------- детали
Обычно это будет тем не менее, этот конкретный формат файла содержит около 10 различных подформатов для подробных записей. Например, если строка подробностей начинается с кода «7», то ее формат ABC, с очень разными полями, чем формат XYZ (строки начинаются с 8).
Итак, мой вопрос в том, какой шаблон проектирования я мог бы использовать для реализации этого в элегантной форме?
Моя первая мысль - создать общий класс детали с свойством перечисления DetailType, а также иметь свойство типа IDetailSpec, называемое SpecData. IDetailSpec действительно будет просто интерфейсом маркера. Затем всякий раз, когда я работал с объектом Detail, я бы проверял свойство DetailType и выполнял приведение свойства SpecData в зависимости от контекста.
Это, однако, чувствует себя "неправильно" :)
Любые идеи приветствуются!
Как вы храните данные, будет зависеть от того, что вам действительно нужно делать с этим. Не зная, что вам нужно делать с данными, разумное решение о том, как его хранить, не может быть сделано. – Servy
Возможно, вам нужен шаблон фабрики, где параметр на заводе - это тип формата, а созданный тип знает, как десериализовать конкретный тип подробных записей. – antlersoft
@Servy. Все сохраненные данные будут использоваться в приложении в зависимости от контекста операция под рукой. Например, существует концепция возврата подробной записи, поэтому у нас будет метод MarkForReturn(), который затем изменит поля записи подробных данных. Поля, которые меняются и какие значения изменяют их для всех, зависят от формата подробной записи. Другими словами, операции являются общими, но способы их реализации варьируются в зависимости от формата. –