Корректный подход к Свойствам

К сожалению, AngularFire2 пока НЕ ​​поддерживает это. Вы можете убедиться в этом, проверив исходный код .

Или, если вы ленивы, как я, и вам не хочется копаться в попытке найти его на GitHub ... то, что я сделал для двойной проверки, это загрузил весь репозиторий в виде ZIP-файла, распаковал и открыл папка в VS Code. Поиск по папке FieldValue или arrayUnion ничего не возвращает - эти слова не существуют во всем источнике.

Так что сейчас вы правы в том, что вам нужно придерживаться стандартного пакета Firebase / Firestore. И вложенные массивы определенно являются «законными» вещами, но, как и все остальное, когда их использовать, зависит от вашей ситуации - и я не чувствую себя достаточно квалифицированным или опытным, чтобы оценить вашу ситуацию и дать сильную рекомендацию.

5
задан Jake 30 October 2008 в 15:19
поделиться

9 ответов

Мне нравится использовать внедрение зависимости Spring для многих свойств. Можно рассматривать приложение как стандартные блоки и ввести свойства непосредственно в компонент, которому нужны они. Это сохраняет (поощряет) инкапсуляцию. Затем Вы собираете свои компоненты вместе и создаете "основной класс".

Хороший побочный эффект внедрения зависимости состоит в том, что Ваш код должен быть более легко тестируемым.

7
ответ дан 18 December 2019 в 14:53
поделиться

Если бы свойства необходимы большому количеству классов, я пошел бы для подхода 1. Или возможно вариант, в котором Вы используете шаблон разработки Singleton вместо всех статических методов. Это означает, что Вы не должны продолжать раздавать некоторый объект свойств. С другой стороны, если только нескольким классам нужны эти свойства, Вы могли бы выбрать подход 2 по причинам, которые Вы упомянули. Вы могли бы также хотеть спросить себя, как, вероятно, случается так, что классы, которые Вы пишете, на самом деле будут снова использованными и если так, сколько из проблемы это должно также снова использовать объект свойств. Если повторное использование маловероятно, не беспокойтесь им теперь и выбирайте решение, которое просто для текущей ситуации.

2
ответ дан 18 December 2019 в 14:53
поделиться

На самом деле приблизьтесь к 2 работам действительно хорошо.

Я пытался использовать объект свойств Singleton на недавнем проекте. Затем когда это прибыло время для добавления опций, я должен пересмотреть Singleton и сожалел, что имел необходимость определить местоположение каждого места, где я использовал MySingleton.getInstance().

Приблизьтесь 2 из передачи глобального информационного объекта через Ваших различных конструкторов легче управлять.

Используя явный метод set помогает, также.

class MyConfig extends Properties {...}

class SomeClass {
    MyConfig theConfig;
    public void setConfi( MyConfig c ) {
        theConfig= c;
    }
    ...
}

Это работает хорошо, и Вы будете рады, что плотно управляли точно, каким классам на самом деле нужна конфигурационная информация.

2
ответ дан 18 December 2019 в 14:53
поделиться

Кажется, что Вам нужен компонент менеджера конфигурации. Это было бы найдено через своего рода сервисный локатор, который мог быть столь же простым как ConfigurationManagerClass.instance(). Это инкапсулировало бы всю ту забаву. Или Вы могли использовать платформу внедрения зависимости как Spring.

Много зависит от того, как компоненты находят друг друга в Вашей архитектуре. Если Ваши другие компоненты раздаются как ссылки, сделайте это. Просто будьте последовательны.

1
ответ дан 18 December 2019 в 14:53
поделиться

Я чувствую себя более комфортно, когда у меня есть статический указатель на мои свойства в оперативной памяти. несколько раз Вы хотите перезагрузить свойства во времени выполнения или другую функциональность, которую легче реализовать со статической ссылкой.

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

можно также использовать интерфейсы, просто попытаться не переусердствовать его.

0
ответ дан 18 December 2019 в 14:53
поделиться

При поиске чего-то быстрого, можно использовать свойства System, они доступны всем классам. Можно сохранить Строковое значение или если необходимо сохранить список 'материала', можно использовать Систему. Свойства () метод. Это возвращает объект 'Свойств', который является HashTable. Можно затем сохранить то, что когда-либо Вы хотите в таблицу. Это не симпатично, но это - быстрый способ иметь глобальные свойства. YMMV

1
ответ дан 18 December 2019 в 14:53
поделиться

Не сделали Java некоторое время, но не можете Вы просто поместить Ваши свойства в java.lang. Системные свойства? Таким образом, можно получить доступ к значениям отовсюду и постараться не иметь "глобальный" класс свойства.

0
ответ дан 18 December 2019 в 14:53
поделиться

Я обычно иду для одноэлементного объекта, который находится в общем проекте и содержит хеш-таблицу себя, включил пространство имен, приводящее к классу свойств для каждого.

Внедрение зависимости является также хорошим способом сделать его.

0
ответ дан 18 December 2019 в 14:53
поделиться

Approache 2 является defenetly лучше.

Так или иначе Вы не должны позволять другому классу перерыть объект конфигурации. Вы должны injet конфигурироваться взятый в озиде объекта конфигурации объект.

Смотрите на апачскую конфигурацию свободного городского населения для справки с конфигурацией Impl.

Так в основном () Вы могли иметь

MyObject mobj = new MyObject();
mobj.setLookupDelay(appConfig.getMyObjectLookupDelay);
mobj.setTrackerName(appConfig.getMyObjectTrackerName);

Вместо

MyObject mobj = new MyObject();
mobj.setConfig(appConfig);

где appConfig является оберткой вокруг апачской библиотеки конфигурации, которые делают весь поиск основы значения на названии значения в файле конфигурации.

этим путем Ваш объект становится очень легко тестируемым.

0
ответ дан 18 December 2019 в 14:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: