Я разрабатываю «тупой» интерфейс, это приложение AIR, которое взаимодействует с «умным» сервером LiveCycle. В настоящее время существует около 20 пар запросов и ответов для приложения. По многим причинам (тестирование, разработка вне корпоративной сети и т. Д.) У нас есть несколько файлов XML с поддельными данными, и, если установлен определенный флаг конфигурации, файлы загружаются, определенный файл анализируется и используется для создания ложного ответа , Каждый XML-файл представляет собой набор ответов для различных ситуаций, все внутренне согласованы. В настоящее время у нас есть около 10 файлов XML, каждый из которых соответствует своей ситуации. Вероятно, это увеличится до 30-50 XML-файлов.
Нынешняя система была разработана мной во время одного из этих 90-часовых циклов выпуска, когда мы находились под принуждением, потому что LiveCycle снова вышел из строя, и у нас был крайний срок для выполнения. Большая часть мелкого дерьма была убрана.
Поддельные данные находятся в объекте с именем FakeData, со свойствами, такими как customerType1: XML, customerType2: XML, overdueCustomer1: XML и т. Д. Затем в конструкторе FakeData все свойства устанавливаются следующим образом:
customerType1:XML = FileUtil.loadXML(File.applicationDirectory.resolvePath("fakeData/customerType1.xml");
И всякий раз, когда вам нужны поддельные данные (это происходит в специальных FakeDelegates, расширяющих реальные делегаты LiveCycle), вы получаете их из экземпляра FakeData.
Это ужасно по многим причинам, но это работает. Одна неловкая часть заключается в том, что каждый раз, когда вы создаете экземпляр FakeData, он перезагружает все файлы XML.
Я пытаюсь выяснить, есть ли шаблон проектирования, отличающийся от Singleton, который может справиться с этим более элегантно. Ограничения:
- Глобальные экземпляры не требуются (в настоящее время весь код, касающийся поддельных данных, включая поддельные делегаты, извлекается из производственных сборок без каких-либо побочных эффектов, и он должен оставаться таким). Это выводит заводскую модель из строя.
- Может обрабатывать несколько объектов с использованием данных XML без проблем с производительностью.
- XML-файлы читаются централизованно, так что другой код не должен знать, где находятся XML-файлы, и поэтому можно выполнить некоторую предварительную обработку (например, создать карту определенных значений тегов и связанного XML-файла).
Шаблоны проектирования или другие предложения по архитектуре будут с благодарностью.