Профессионалы и недостатки [закрытого] Google App Engine

Вы совершенно правы, чтобы быть затронутыми - вызовы статического метода особенно проблематичны для поблочного тестирования, поскольку Вы не можете легко дразнить свои зависимости. То, что я собираюсь показать Вам, - то, как позволить Spring, контейнер МОК делает грязную работу для Вас, оставляя Вас с аккуратным, тестируемым кодом. SecurityContextHolder является классом платформы и в то время как для Вашего кода в системе защиты низкого уровня может быть нормально быть связанным с ним, Вы, вероятно, хотите выставить более опрятный интерфейс своим компонентам UI (т.е. контроллеры).

cliff.meyers упомянул, что один путь вокруг этого - создает Ваш собственный "основной" тип и вводит экземпляр в потребителей. Spring < aop:scoped-прокси /> тег, представленный в 2.x объединенный с бобовым определением объема запроса и поддержкой метода фабрики, может быть билетом к самому читаемому коду.

Это могло работать как следующее:

public class MyUserDetails implements UserDetails {
    // this is your custom UserDetails implementation to serve as a principal
    // implement the Spring methods and add your own methods as appropriate
}

public class MyUserHolder {
    public static MyUserDetails getUserDetails() {
        Authentication a = SecurityContextHolder.getContext().getAuthentication();
        if (a == null) {
            return null;
        } else {
            return (MyUserDetails) a.getPrincipal();
        }
    }
}

public class MyUserAwareController {        
    MyUserDetails currentUser;

    public void setCurrentUser(MyUserDetails currentUser) { 
        this.currentUser = currentUser;
    }

    // controller code
}

Ничто сложное до сих пор, правильно? На самом деле, вероятно, уже необходимо было сделать большую часть из этого. Затем, в Вашем бобе контекст определяют ограниченный по объему запросом боб для содержания принципала:


    



    
    

Благодаря волшебству aop:scoped-тега-proxy, статический метод getUserDetails назовут каждый раз, когда новый Запрос HTTP входит, и любые ссылки на currentUser свойство будут разрешены правильно. Теперь поблочное тестирование становится тривиальным:

protected void setUp() {
    // existing init code

    MyUserDetails user = new MyUserDetails();
    // set up user as you wish
    controller.setCurrentUser(user);
}

Hope это помогает!

68
задан 9 revs, 5 users 68% 29 August 2012 в 17:32
поделиться

6 ответов

Против: вся ваша база принадлежит нам

... Серьезно:

Против: вы не контролируете среду, в которой работает ваше приложение. Те же недостатки как с аутсорсингом любого компонента. Развлечение для игрушек, а не для бизнеса (пока) ИМХО.

Различные вещи, такие как API для Google проприетарные бэкенды, такие как их система баз данных и другие «блокировки» и фреймворки, которые означают, что ваш код привязан, в некоторых потеря понимания их системы может привести к проблемам с затратами позже, если вы захотите перейти с GAE. Конечно, вы можете абстрагироваться от них.

Мне нравятся GAE, AppJet и другие. Они крутые. Но всему есть свое место. Если вам нужна свобода и возможность управлять модулями вашего языка, API, версиями синтаксиса / stdlib и многим другим ... не уступайте управление поставщику услуг.

1
ответ дан 24 November 2019 в 14:23
поделиться

Против: Ограничено Java и Python

-3
ответ дан 24 November 2019 в 14:23
поделиться

Против: недоступно в некоторых странах (Аргентина).

Изменить

Доступно во всем мире, но только через группы Google для App Engine.

4
ответ дан 24 November 2019 в 14:23
поделиться

Плюсы:

  • Масштабируемость
  • Легко и дешевле (в краткосрочной перспективе).
  • Хороший вариант для стартапов / частных лиц.
  • Подходит для приложений, которые просто хранят и извлекают данные.

Минусы:

  • Не подходит для вычислений с интенсивным использованием процессора. Они медленнее и дороже.
  • Масштабируемость не имеет большого значения, потому что если приложение работает в масштабе Google, то, вероятно, оно зарабатывает достаточно денег, чтобы работать на его собственных серверах.
  • У них есть множество ограничений, накладываемых то тут, то там, так как в результате глубокий анализ данных затруднен. Например, вы не можете построить социальный граф с помощью GAE.

Я бы сказал, что он не предназначен для серьезного бизнеса и дорог в долгосрочной перспективе.

14
ответ дан 24 November 2019 в 14:23
поделиться

Pro: неограниченная масштабируемость для вашего приложения и масштабируемость по запросу.

5
ответ дан 24 November 2019 в 14:23
поделиться

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

(Я ненавижу мобильные телефоны, и моя мама или коллеги не получат SMS)

1
ответ дан 24 November 2019 в 14:23
поделиться
Другие вопросы по тегам:

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