#android #database #lambda #google-cloud-functions
#Android #База данных #лямбда #google-cloud-функции
Вопрос:
Я работаю над приложением для электронной коммерции для Android, и в последнее время у меня возникли небольшие сомнения по поводу некоторых концепций.
Должен ли я включать свои функции в apk на стороне клиента или на онлайн-серверах (например, функции Google, Amazon lambda)?
Например, пользователь добавляет товар в свою корзину
Должен ли я включить свой код в клиентский apk, например:
Get the item's price and multiply it with the quantity and then add to the total price of cart.
Или я должен просто отправить данные со стороны клиента apk, например:
Send the unique ID and quantity to the specific function in online functions
А затем поместите умножение и прочее … в онлайн-функции.
Куда я должен включить эти вычисления?
Ответ №1:
Я думаю, что здесь важно то, как вы управляете состоянием. Когда пользователь добавляет что-то в свою корзину, сообщает ли приложение серверу, что они это сделали? Есть ли у них корзина на сервере со списком того, что этот пользователь добавил на данный момент? Или все это происходит на устройстве пользователя, и сервер ничего не знает о корзине, пока они не отправятся проверять?
Если корзина управляется на сервере, я бы сказал, что лучше позволить ему обрабатывать все состояния и сообщать устройству, что отображать. Если пользователь добавляет 2 товара, сообщите серверу, что они добавили, и сервер может сказать «в вашей корзине есть это» и включить цену в эту информацию. Это дает вам больше контроля, потому что ваш сервер является источником истины — вы не полагаетесь на устройство, чтобы сделать это правильно (что звучит глупо, но может произойти много странных вещей)
Что бы вы ни делали, не позволяйте устройству пользователя сообщать серверу, сколько стоят товары! Если он вычисляет общее количество для пользователя, тогда все в порядке, если это предназначено для отображения. Но когда дело доходит до расчета стоимости товаров при оформлении заказа, вы делаете это самостоятельно, на стороне сервера — берете идентификаторы товаров и количество от пользователя, ничего больше. Если они подделают запрос, в котором говорится, что 50 золотых часов за 1 доллар, у вас будут большие проблемы!
Это может быть очевидно, но я должен был выложить это там на всякий случай!
Ответ №2:
Это зависит от того, откуда вы вызываете эту функцию. Если вы вызываете эту функцию откуда-то из своего внешнего кода, вы должны включить ее в свой клиент. Если вы вызываете функцию откуда-то из одной из ваших функций Lambda или Google, вам следует поместить ее туда.
Концепция, о которой вы, возможно, захотите узнать, называется scope. Где бы функция ни находилась в области видимости, ее может вызвать что-то другое. Вы могли бы рассмотреть возможность поиска правил для области видимости на вашем конкретном языке программирования.