Проблема шаблона проектирования - PullRequest
0 голосов
/ 11 марта 2011

В моем текущем приложении есть класс DataMgr, в который я помещаю все, что связано с данными. Этот класс в последнее время стал слишком большим, и я хочу разделить его на более мелкие части для облегчения обслуживания.

Вот о чем я думаю:

  • Создайте класс AbstractDataMgr, который будет иметь все переменные, к которым будет обращаться везде в приложении. Например, коллекция ArrayCollection usersList, которая будет содержать всех пользователей.

  • Все меньшие части DataMgr будут расширять AbstractDataMgr. Пример, класс UsersDataMgr, который расширяет AbstractDataMgr. Таким образом, UsersDataMgr загружает и заполняет список usersList в AbstractDataMgr. Другой пример, класс SessionDataMgr, который заботится о некоторых игровых сессиях, которые происходят в моем приложении.

Мои вопросы:

  1. Я на правильном пути?

  2. Я хочу поместить каждый меньший класс DataMgr в отдельный модуль для ускорения времени компиляции. Таким образом, когда я компилирую SessionsModule, он не будет смотреть на UsersModule и, следовательно, будет меньше времени компиляции.

И это мой вопрос, для которого я начал эту тему: когда внутри SessionsModule, как получать информацию о пользователях из UsersDataMgr (например, вызывая функцию getUserData) без необходимости импортировать UsersDataMgr в SessionsDataMgr. Потому что, если я импортировал его, он будет скомпилирован в SessionsDataMgr ... который я не хочу.

Надеюсь, я вас не смутил и надеюсь найти помощь.


ОБНОВЛЕНИЕ 1:

Итак, основная проблема в том, что у меня есть большое приложение, которое было плохо спроектировано до моего прихода. Сейчас я пытаюсь сделать вещи лучше и проще.

В настоящее время компиляция полного приложения занимает много времени (около 3-3: 30 мин.). Это связано с несколькими проблемами: 1. Слишком много файлов в платформе, которые нужно проверять на наличие изменений каждый раз, когда я компилирую приложение. 2- Некоторые из этих файлов содержат большой объем данных (например, одна из информационных таблиц жестко запрограммирована в большой толстый массив внутри файла размером 7,5 МБ).

Так что в настоящее время мне требуется много времени, чтобы исправить ошибки, и это из-за долгого времени компиляции. Поэтому я попытался решить эту проблему, разбив приложение на модули. После создания трех модулей я обнаружил, что время компиляции каждого модуля также занимает много времени (около 2 минут) ...

В дополнение к этой проблеме, теперь вместо одного SWF большого размера у меня есть 3 других SWF с большим размером. Поэтому я решил полностью удалить фреймворк из этих модулей и включить только необходимые файлы. Вначале все выглядело хорошо, пока я не включил DataMgr ... после чего мне пришлось включить всю инфраструктуру, чтобы компилировать без ошибок. Это связано с тем, что DataMgr импортирует в него множество фреймворков.

Итак, мой второй шаг в решении этой проблемы - разделить DataMgr. Мне нравится ваше предложение, и именно так я планировал это сделать ... Однако у меня все еще остается один вопрос без ответа:

Мое намерение иметь модули и разделять DataMgr состоит в том, что я не хочу включать полную структуру в каждый модуль. Скорее только необходимые файлы. Однако, если в модуле SessionsDataMgr я бы вызвал:

UsersDataMgr.getInstance (). GetUserInfo (userId);

Это означает, что я должен импортировать UsersDataMgr внутри SessionsDataMgr ... что также означает (если я правильно понимаю), что при компиляции UsersDataMgr компилятор проверит все файлы модуля SessionsModule, но также проверит все файлы в SessionsDataMgr. Это увеличит размер файла SWF и увеличит время компиляции.

  • Мое понимание того, как все работает правильно?
  • Есть ли решение этой проблемы, чтобы иметь возможность полностью отделить оба модуля, но в какой-то момент иметь возможность выполнять пользовательские функции от другого модуля?

Извините за длинный ответ, и спасибоза вашу помощь.

1 Ответ

0 голосов
/ 11 марта 2011

Судя по всему, ваш DataMgr класс действительно пытается сделать слишком много.Разбить его - это, безусловно, путь.

Абстрактные классы предназначены для обеспечения функциональности, необходимой для всех конкретных реализаций.Чтобы обеспечить глобальный доступ к данным, вам нужен шаблон проектирования Singleton

Как вы получите информацию о пользователях от SessionsModule:

UserDataProvider.getInstance().getAllUsers();
UserDataProvider.getInstance().getUserDetails(UserId:String);

Надеюсь, это поставит вас на правильный путь!Если вы можете поделиться с вами более подробной информацией о вашем приложении и других обязанностях DataMgr, я был бы рад помочь вам разработать чистый и более эффективный дизайн.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...