2013-10-24 4 views
1

Я поддерживаю старый SDK. SDK будет вести себя по-разному для разных платформ. Это с использованием статической переменной и требует статической переменной будет создан до любого API вызова, как в следующем:API Design: Global Variable vs Передача объекта вокруг

Пример для статической глобальной переменной (OLD CODE):

SDKContext.init(); 
VideoManager manager = new VideoManager(); 
public void VideoManager#search() { 
    SDKContext.search(); 
} 

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

Local Variable (MY WAY ПРЕДПОЧТИТЕЛЬНЫЙ):

SDKContext context = new SDKContext(); 
// Or even using singleton 
SDKContext context = SDKContext.getInstance(); 
VideoManager manager = new VideoManager(context); 
public void VideoManager#search() { 
    context.search(); 
} 

Что плюсы и минусы этих двух подходов? Любые рекомендации/предложения приветствуются.

ответ

0

Я не думаю, что вы можете назвать это FACADE.

Фасад, по сравнению с обычным подходом, упрощенная версия API, охватывающая более сложные операции под ним. В вашем случае API VideoManager#search() в обоих случаях - тот, который вы называете не-фасадом, и тот, который вы утверждаете как фасад, - это точно то же самое. Более того, тело метода почти одинаково. Замена глобальной переменной на объект не имеет ничего общего с тем, чтобы быть фасадом, это просто решение, которое вы можете сделать во время реализации.

Глобальная переменная (или singleton) может упростить ваш код (в таком случае, когда вам нужно передать его во много мест, возможно, стоит попробовать), по стоимости более сложного тестирования (издевательства) это - решение зависит от вас.

0

Статичность затрудняет тестирование элементов.

Подход 2 намного лучше. Это IoC-friendly и легко проверяемо.

0

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