Размышление в AppEngine

Создайте отдельный класс или модуль, отвечающий за связь с вашими внешними каналами.

Сделать этот класс способным быть двойным тестом . Вы используете Python, так что вы там довольно золотые; если бы вы использовали C #, я бы предложил использовать интерфейсные или виртуальные методы.

В своем модульном тесте вставьте двойной тест внешнего класса подачи. Проверьте, правильно ли ваш код использует класс, предполагая, что класс выполняет работу с вашими внешними ресурсами правильно. Сделайте так, чтобы ваш тест дважды возвращал фальшивые данные, а не живые данные; протестировать различные комбинации данных и, конечно, возможные исключения urllib2.

А ... вот и все.

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

Редактировать:

Просто заметка о разнице между моим ответом и ответом @ Crast. И то, и другое по сути правильно, но они предполагают разные подходы. В подходе Crast вы используете тестовый дубль на самой библиотеке. В моем подходе вы абстрагируете использование библиотеки в отдельный модуль и тестируете двойной модуль.

Какой подход вы используете, является полностью субъективным; там нет "правильного" ответа. Я предпочитаю свой подход, потому что он позволяет мне создавать более модульный, гибкий код, что я ценю. Но это обходится дорого с точки зрения написания дополнительного кода, что не может быть оценено во многих гибких ситуациях.

6
задан Mark Renouf 10 June 2009 в 16:13
поделиться

4 ответа

Мне интересно, есть ли место, где мы могли бы объединить знания из опыта

Для этого подходят различные группы Google, хотя я не знаю, применимы ли какие-либо непосредственно к Java-GAE тем не менее - мой опыт GAE пока полностью основан на Python (я с гордостью могу сказать, что Гвидо ван Россум, изобретатель Python и теперь работающий в Google над App Engine, сказал мне, что я научил его нескольким вещам о том, как его Его детище сработало - в его рекомендации упоминается, что это то, чем я горжусь больше всего среди всех тех, что есть в моем профиле linkedin ;-). [Я работаю в Google, но мое влияние на App Engine было весьма периферийным - я работал над «построением облака», SW управления кластером и сетью, а App Engine призван сделать эту инфраструктуру полезной для сторонних разработчиков]

. действительно много эссе и презентации о том, как лучше всего денормализовать и сегментировать данные для оптимального масштабирования и производительности GAE - хотя они разного качества. Книги, которые пока вышли, так себе; в ближайшие несколько месяцев появится гораздо больше, надеюсь, лучшие (у меня был проект по написанию одного из них с двумя очень опытными друзьями, но мы все так заняты, что в итоге отказались от него). В общем, я бы порекомендовал видео Google I / O и эссе, которые Google благословил на своем сайте движка приложений и в блогах, ПЛЮС каждый бит контента из блога appenginefan - что Гвидо похвалил меня за то, что я его научил о GAE я, в свою очередь, в основном узнал от appenginefan (отчасти благодаря замечательной встрече разработчиков приложений в Пало-Альто, но и его блог тоже великолепен; -).

в ближайшие несколько месяцев появится гораздо больше, надеюсь, лучшие (у меня был проект по написанию одного из них с двумя очень опытными друзьями, но мы все так заняты, что в итоге отказались от него). В общем, я бы порекомендовал видео Google I / O и эссе, которые Google благословил на своем сайте движка приложений и в блогах, ПЛЮС каждый бит контента из блога appenginefan - что Гвидо похвалил меня за то, что я его научил о GAE я, в свою очередь, в основном узнал от appenginefan (отчасти благодаря замечательной встрече разработчиков приложений в Пало-Альто, но и его блог тоже великолепен; -).

в ближайшие несколько месяцев появится гораздо больше, надеюсь, лучшие (у меня был проект по написанию одного из них с двумя очень опытными друзьями, но мы все так заняты, что в итоге отказались от него). В общем, я бы порекомендовал видео Google I / O и эссе, которые Google благословил на своем сайте движка приложений и в блогах, ПЛЮС каждый бит контента из блога appenginefan - что Гвидо похвалил меня за то, что я его научил о GAE я, в свою очередь, в основном узнал от appenginefan (отчасти благодаря замечательной встрече разработчиков приложений в Пало-Альто, но и его блог тоже великолепен; -).

5
ответ дан 16 December 2019 в 21:45
поделиться

Таймауты жесткие, производительность была в порядке, но невысока, поэтому я обнаружил, что использую дополнительное пространство для экономии времени; например, у меня была связь «многие ко многим» между коллекционными картами и игроками, поэтому я продублировал информацию о том, кто чем владеет: у объектов Card есть список игроков, а у объектов Player есть список карт.

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

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

1
ответ дан 16 December 2019 в 21:45
поделиться

Я поигрался с Google App Engine для Java и обнаружил, что у него много недостатков:

Это не хостинг Java-приложений общего назначения. В частности, у вас нет доступа к полной JRE (например, вы не можете создавать потоки и т. Д.). Учитывая этот факт, вам в значительной степени придется создавать свое приложение с нуля с учетом JRE Google App Engine. Перенос любого нетривиального приложения был бы невозможен.

Более уместно для ваших вопросов о хранилище данных ...

Производительность хранилища данных ужасна. Я пытался записывать 5000 наблюдений за погодой в час - ничего особенного, - но я не мог этого сделать, потому что у меня продолжалось исключение тайм-аута как с хранилищем данных, так и с HTTP-запросом. Использование "низкоуровневого" API хранилища данных несколько помогло, но недостаточно.

Я хотел удалить эти наблюдения за погодой через 24 часа, чтобы не заполнить свою квоту. Опять же, не удалось, потому что операция удаления заняла слишком много времени. Эта проблема, в свою очередь, привела к переполнению моей квоты хранилища данных. Безумно, вы не можете легко удалить большие массивы данных в хранилище данных GAE.

Есть некоторые функции, которые мне действительно понравились. Интеграция с Eclipse великолепна. Пользовательский интерфейс сервера приложений appspot в миллион раз лучше, чем при работе с Tomcat (например, хороший просмотр журналов). Но для меня минусы намного перевешивали эти преимущества.

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

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

Есть некоторые функции, которые мне действительно понравились. Интеграция с Eclipse великолепна. Пользовательский интерфейс сервера приложений appspot в миллион раз лучше, чем при работе с Tomcat (например, хороший просмотр журналов). Но для меня минусы намного перевешивали эти преимущества.

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

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

Есть некоторые функции, которые мне действительно понравились. Интеграция с Eclipse великолепна. Пользовательский интерфейс сервера приложений appspot в миллион раз лучше, чем при работе с Tomcat (например, хороший просмотр журналов). Но для меня минусы намного перевешивали эти преимущества.

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

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

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

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

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

1
ответ дан 16 December 2019 в 21:45
поделиться

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

Пример: Поскольку BigTable не предоставляет достаточно функций агрегирования, вариант суммы (наличные), который был бы в мире СУБД, не доступный. Вместо этого он должен быть сохранен в модели, а метод сохранения модели должен быть переопределен для вычисления денормализованной суммы полей.

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

1
ответ дан 16 December 2019 в 21:45
поделиться
Другие вопросы по тегам:

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