Хорошо ли иметь один массивный класс для всего хранилища данных? - PullRequest
1 голос
/ 14 ноября 2011

Я создал класс , который я использовал в качестве хранилища для всех списков в моих приложениях. Этот класс позволяет мне «подписать» объект на листинг (который можно создать на лету с помощью метода sign() следующим образом):

manager.sign(myObject, "someList");

При этом сохраняется индекс элемента (с использованием его уникального идентификатора) во вновь созданном или ранее созданном списке «someList», а также объект в 2D-массиве. Так, например, я мог бы закончить с этим:

trace(_indexes["someList"][objectId]); // 0 - the object is the first in this list
trace(_instances["someList"]); // [object MyObject]

В классе есть еще два метода:

  1. find(signature:String):Array
    Этот метод возвращает массив через slice(), содержащий все элементы, подписанные данной подписью.

  2. findFirst(signature:String):Object
    Этот метод просто возвращает первый объект в данном листинге

Итак, чтобы получить myObject, я могу пойти:

trace(find("someList")[0]); or trace(findFirst("someList"));

Наконец, есть функция unsign(), которая удалит объект из указанного списка. Эта функция в основном:

  1. Сохраняет результат pop() в указанном листинге для переменной.
  2. Использует сохраненный индекс для быстрой замены указанного объекта элементом pop().
  3. Удаляет сохраненный индекс для указанного объекта и обновляет индекс для pop() 'd элемента.

При всем этом использование unsign() очень быстро удалит объект из списка любого размера.

Теперь все это хорошо, но у меня были некоторые мысли, которые заставляют меня задуматься, насколько это хорошо на самом деле? Я имею в виду, что возможность легко перечислять, удалять и получать доступ к спискам всего, что я хочу во всем приложении, как это здорово, но есть ли ловушка?

У меня возникла пара начальных мыслей:

  1. До сих пор я не реализовал поддержку списков, которые являются частными и доступны только через данный класс.
  2. Память - кажется, это не очень эффективно для памяти. С другой стороны, ни один не создает массивы для всего, что я хочу хранить отдельно. Просто кажется .. Больше .. Как-то.

Есть идеи?

Я загрузил класс здесь, если приведенное выше не имеет особого смысла: https://projectavian.com/AviManager.as

1 Ответ

1 голос
/ 14 ноября 2011

Ваше решение кажется довольно солидным.Если вы хотите изменить его, чтобы он стал немного более расширяемым и обрабатывать управление правами, вы можете рассмотреть возможность перемещения всех этих индексируемых индивидуально свойств в объект значения для ваших AV-элементов.Вы можете выполнить такие операции, как «подписать» и «не подписать» внутри ВО, или проверить права доступа.Ваш класс управления может отслеживать набор этих виртуальных объектов, передавать их, выполнять вызовы методов, и объекты будут хранить состояние в немного более читаемом формате.

Действительно, хотя это входит в кодированиеобсуждение стиляВаш метод работает, и он не особенно неэффективен.Просто убедитесь, что код читабелен, инкапсулирован и расширяем, и все в порядке.

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