В настоящее время я работаю над этим приложением (C #, WPF, LINQ2XML, .NET 4.0), которое отображает подробности для «Животных». Примером этого может служить приложение, отображающее типы животных, такие как «Птицы», «Млекопитающие», «Рептилии». Для каждого типа животных у меня будут подпункты, такие как «Птицы», у меня будут подпункты, такие как «Воробей», «Ястреб»; для «Рептилий» у меня будут «Аллигаторы», «Питон»… и т. д. Пользователь будет иметь возможность добавлять комментарии для каждой из этих вложенных записей. Примером может послужить подпункт «Воробей», у меня будет опция «Добавить комментарии». При нажатии на «Добавить комментарии» откроется текстовое поле, в котором пользователь может ввести свои комментарии для «Воробей». Пользователь может вставить несколько комментариев для вложенной записи. Пользователь может иметь 1,2,3 .... n комментариев для 'Воробей'. Это просто повлечет за собой многократное нажатие кнопки «Добавить комментарии».
Данные предварительно загружены информацией, хранящейся в файлах XML. У меня есть отдельные XML-файлы для каждого животного, такие как Birds.xml, Mammals.xml, Reptiles.xml. Каждый из них будет иметь информацию относительно вложенных записей. В Birds.xml будут фрагменты XML для «Воробья» и «Ястреба».
Я использую Linq2Xml для извлечения информации, необходимой для заполнения моих животных объектов (Модель), которые, в свою очередь, связаны с Presenter (я использую шаблон Model-View-Presenter), который подается в XAML.
Я успешно могу отобразить информацию из моего XML в представлении. Проблема с комментариями.
Здесь нужно достичь двух вещей:
Запишите все комментарии, добавленные в отдельный файл XML (AnimalComments.xml), где я могу хранить все комментарии, которые были добавлены для всех вложенных записей.
В случае сбоя приложения я бы хотел, чтобы этот же XML-файл (AnimalComments.xml) предварительно заполнял все комментарии, которые я вводил до сбоя приложения.
По сути, я пытаюсь сериализовать состояние на диск, но в действительности я не хочу, чтобы весь граф объектов сохранялся на диске, поскольку я думаю, что собираюсь добавить функцию записи / добавления в AnimalComments. XML-файл всякий раз, когда для подпункта вводится комментарий, а фокус изменяется на какой-либо другой подпункт.
Мне было интересно, может ли коллективная мудрость SO помочь мне с некоторыми изящными рекомендациями по дизайну, чтобы собрать все добавленные Комментарии и сохранить их на диске таким образом, чтобы впоследствии его можно было использовать приложением для восстановления или представить в удобочитаемом формате. Любые решения, требующие использования СУБД, не будут уместны в этой ситуации, поскольку это является частью требования хранить любые данные, связанные с приложением, в локальной файловой системе.
Как предложил Дрейк ниже, есть способы сохранить ссылки на Животных, используя какой-то Первичный ключ, но меня интересует, как это следует решать с точки зрения объектно-ориентированного подхода или есть ли некоторые выдающиеся шаблоны, которые занимаются этим видом ситуации.
Спасибо