Я ломал голову над тем, как лучше всего спроектировать приложение, над которым я должен начать работу в ближайшее время, и ничего простого не приходит на ум. Может быть, кто-то еще может увидеть то, что мне не хватает.
Цель довольно проста - создать приложение на C # / WinForms, чтобы пользователь мог указать загружаемый файл, затем визуализировать содержимое этого файла в 3D, позволить пользователю настроить некоторые свойства и запустить симуляцию. .
Хитрая часть - это бэкэнд. У меня есть два файла для загрузки.
Первый не указан пользователем, а выходит из более старого приложения C ++ и имеет формат XML и будет загружен автоматически. XML-файл описывает структуру своего объекта - каждый класс, его свойства и соответствующие значения min, max и по умолчанию для этих свойств, а также текстовое поле, документирующее свойство. Этот файл используется для настройки / определения классов / свойств. Этот файл продолжает изменяться довольно регулярно, поэтому целью здесь является импорт этих определений XML, чтобы не связывать этот новый пользовательский интерфейс слишком тесно со старым приложением.
Второй файл содержит входные данные, относящиеся к пользователю. Этот файл описывает, какие объекты будут использоваться, и значения, относящиеся к подмножеству классов / свойств, описанных в первом файле.
Вот и все.
Как я уже сказал, я рассмотрел несколько способов сделать это, но все они кажутся архаичными. Один из методов, о котором я подумал: во-первых, создайте фабрику / диспетчер, который читает и создает класс типа «Загружаемый» для представления тех классов, которые определены в XML; затем создайте универсальное «Свойство» для хранения самих свойств и сохранения их в некоторой коллекции внутри объекта Loadable. Я думаю, что таким образом, я могу ссылаться на эти Loadables позже при загрузке файла пользователя или при перетягивании их в PropertyGrid для редактирования пользователем.
Мысли? Я на трещине? Есть ли более простой способ справиться с этим, которого я не вижу сквозь деревья? Любые комментарии приветствуются.