Logika
17 godz. 49 min · Biznes i Automatyzacje
Krzysiek PiekarzAutomation Specialist / No-code DeveloperCzy w Twojej głowie pojawił się pomysł na aplikację, która zrewolucjonizuje świat na miarę Facebook'a, Instagrama albo Airbnb? A może zgłosił się do Ciebie klient, który chce przetestować i wdrożyć swój projekt w jak najszybszym czasie?Jeśli tak było to na pewno zadajesz sobie teraz kolejne pytanie - od czego zacząć? Czy muszę posiadać odpowiednią wiedzę programistyczną? Na jaki język programowania się zdecydować lub z jakiego gotowego framework'u skorzystać? A może zatrudnić profesjonalnego designera i software house, który pozwoli mi zrealizować ten projekt?Niezależnie od tego czy czy zdecydujesz się działać sam/a, czy też przekażesz projekt do zewnętrznej agencji i tak staniesz przed kolejnym dylematem jakim jest nauka programowania lub konieczność przepalenia nawet setek tysięcy złoty na coś, co może okazać się niewypałem.Na szczęście szybki rozwój narzędzi no-code sprawia, że możesz wybrać jeszcze trzecie wyjście. Zaprojektować, zbudować i wypuścić w świat swoją wymarzoną aplikację tylko za pomocą własnych sił i to bez konieczności posiadania specjalistycznej wiedzy programistycznej, a nawet posiadając jedynie podstawową znajomość narzędzi do design'u.Pamiętaj również o tym, że projekt ten podzieliłem na dwie części. Ten kurs to druga część, w której zapoznamy się z bardziej zaawansowanymi opcjami, jakie zapewnia nam edytor Bubble. Zdobytą w ten sposób wiedzę teoretyczną wykorzystamy od razu w praktyce dodając do naszego statycznego designu odpowiednią logikę, dzięki czemu nasz finalny projekt będzie już w pełni działającą aplikacją.Jeśli tylko potrafisz w podstawowym zakresie pracować z edytorem Bubble, budować w nim design aplikacji i rozumiesz czym są option sets oraz workflows to posiadanie wiedzy z poprzedniego kursu nie jest koniecznie wymagane. Natomiast szczerze zachęcam Cię przynajmniej do przejrzenia materiałów z pierwszej części, gdzie skupiamy się właśnie na podstawach, ponieważ teraz będziemy efektywnie przechodzić do bardziej zaawansowanych tematów i rozbudowywać naszą aplikację.
W tym kursie „MVP aplikacji w rekordowym czasie z Bubble (Logika)” nauczę Cię jak zamienić statyczny layout na pełnoprawną aplikację. Poruszymy takie tematy jak praca z bazą danych, privacy rules oraz bardziej zaawansowane workflows, które dodamy zarówno na froncie jak i backendzie naszej aplikacji. Dzięki zdobytej wiedzy dodamy logikę wszędzie tam, gdzie tego wymaga nasz projekt, a dodatkowo wzbogacimy go o możliwość płatności poprzez najbardziej popularny na świecie system jakim jest Stripe. To jednak nie koniec ponieważ przygotowałem dla Ciebie również szereg innych ważnych zagadnień, które omówimy i wykorzystamy w praktyce.W ramach nauki skupimy się na jak najbardziej praktycznym podejściu. Zapomnij o długich i nudnych lekcjach pełnych teorii, które zapomnisz zaraz po obejrzeniu. Będziemy budować a nie debatować! W ten sposób nauczysz się pracować z edytorem Bubble na poziomie zaawansowanym. Zrozumiesz jak zabezpieczyć swoje dane przed nieuprawnionym dostępem, w jaki sposób pobierać i dynamicznie filtrować rekordy z bazy danych. A także jak wykorzystać auto-binding by móc je aktualizować bez wykorzystania skomplikowanych workflows.Dodamy do naszej aplikacji prosty komunikator, który pozwoli na wymianę wiadomości pomiędzy użytkownikami. Zadbamy również o możliwość wysyłania powiadomień mailowych poprzez zewnętrzne serwisy by ich wygląd był zgodny z naszym brandem. Nie zabraknie również takich tematów jak SSO z Google czy też proste automatyzacje z wykorzystaniem serwisu Make.
Materiał szkoleniowy został zaprojektowany tak, aby mogło z niego skorzystać jak najszersze grono odbiorców. Nieważne czy jesteś totalnym laikiem, czy też posiadasz już wiedzę z zakresu programowania lub designu, na pewno znajdziesz tu coś dla siebie. A więc kto jeszcze może skorzystać z wiedzy zawartej w tym kursie?
Zanim przejdziemy dalej i zadbamy o to, aby wyświetlić pobrane dane użytkownika
lub pozwolić mu je edytować, chciałbym jeszcze na chwilę wrócić od tego, co
przygotowaliśmy we wcześniejszej lekcji.
Jak sam widzisz, nasz workflow jest tak naprawdę banalnie proste.
Jedyne co robimy to pobieramy dane, które nasz user przekazał do pól formularza i
kolejno aktualizujemy właściwy rekord w bazie danych.
Jeśli będziemy stosować odpowiednie nazewnictwo i nazywać nasze pola w
formularzu tak jak mamy nazwane kolumny, to całość sprowadza się właściwie do dość
banalnego klikania właściwych wartości.
Natomiast sam ten proces mógł być nasunąć dwa pytania, które teraz
chciałbym zaadresować.
Pierwsze z nich brzmi Skąd Babel wie, które rekord ma zostać zaktualizowany?
Przecież w bazie możemy mieć miliony rekordów użytkowników, a nie wskazaliśmy
w żaden sposób, który z nich ma to być.
A przynajmniej nie bezpośrednio podając jego ID.
To jednak nie do końca jest prawda, ponieważ z pomocą przychodzi nam tutaj
wbudowana akcja, która odnosi się do obiektu Parent User i jego edycji.
Czyli to właśnie tutaj ta akcja make changes to parent user to Babel zadbał dla
nas o to, by wśród tych milionów rekordów w bazie namierzyć to, które użytkownik
jest teraz zalogowany na swoje konto i wykonuje operacje w naszej aplikacji.
A my poprzez te gotowe akcje możemy nie tylko w prosty sposób pobierać sobie jego
dane, co już udowodniłem w przykładzie kierowania usera na stronę od brandingu,
gdy flaga finish boarding jest równa.
nowa, ale także szybko aktualizować ten rekord lub go usunąć.
Takie uproszczone działanie poprzez obiekt karencji user jest dostępne tylko i
wyłącznie dla tego Data type i niestety w przypadku innych typów danych namierzenie
odpowiedniego rekordu będzie odrobinę trudniejsze.
A teraz czas na drugie pytanie.
Jeśli przyszło Ci do głowy, to jestem naprawdę dumny.
Jeśli jeszcze raz spojrzymy na nasze workflow, to całość sprowadza się do tego,
żeby działania użytkownika w formularzu odzwierciedlić w naszym rekordzie w bazie.
Więc skoro i tak koniec końców zapisujemy te wybory poprzez aktualizację rekordu
Karen User, to mógłbyś zapytać dlaczego poprzez workflow nie ustawiamy od razu
odpowiednich wartości dla user type lub wybranych języków?
Po co utrudniamy sobie życie i korzystamy z custom states?
Przecież równie dobrze po wybraniu danej opcji dla typu konta moglibyśmy od razu
zaktualizować tą wartość w bazie danych, a potem podobnie jak robimy teraz w
zakładce Condition, ale mogę tutaj do niej wrócić.
Czyli właśnie odnoszę się do całej grupy Guest.
Tutaj tej zakładki Condition All i tego warunku.
Moglibyśmy się odnieść bezpośrednio do tego rekordu w bazie danych,
a nie właśnie do Custom Stats.
Jest to oczywiście jak najbardziej poprawny tok rozumowania, ale ma jedną
zasadniczą wadę jaką jest szybkość działania, co wpływa na optymalizacje
tego, jak użytkownik czuje się w naszej aplikacji, A mówiąc prościej chciałbym,
żebyś to zapamiętał, jeśli dopiero wkraczasz do świata budowania aplikacji.
Użytkownik w większości przypadków wymaga, aby jego działania przynosiły
natychmiastowy skutek.
Jeśli więc klika w grupę symbolizującą dany typ konta, to musi otrzymać
natychmiast info zwrotne, że coś się zadziało.
I tak właśnie jest.
W naszym przypadku jest to po prostu zmiana koloru obramowania.
Mogę Ci to udowodnić.
Wystarczy, że wrócimy na stronę rejestracji i
spróbujmy tutaj dodać kolejne konto.
Ja korzystam ze standardowego tutaj typu notatki dla moich użytkowników,
czyli po prostu odnoszę się do tego głównego rekordu
Office, a w zasadzie głównego maila Office News Info i poprzez ten parametr
tworzę sobie takie subkonta.
Proste hasło klikamy sign up.
Jesteśmy teraz na stronie brandingu.
Jak widzisz wystarczy, że kliknę tutaj.
To obramowanie natychmiast się zmienia, co oznacza, że ten custom state został
po prostu dla nas zaktualizowany.
Jak więc sam widzisz, ten efekt jest po prostu natychmiastowy.
I dzieje się tak dlatego, że wykorzystujemy właśnie custom state.
Czyli jak już tłumaczyłem w pierwszej części kursu z wartości, które są
przechowywane w przeglądarce usera.
Jest to bardzo ważna zaleta custom states i chciałbym byś to dobrze zrozumiał,
ponieważ kiedy pobieramy lub zmieniamy wartości zapisane, dzieje się to dosłownie
w mikroskopijnych ułamkach sekund.
Dla ludzkiego oka efekt jest po prostu niemal natychmiastowy.
Natomiast w przypadku baz danych sytuacja wygląda zgoła inaczej.
O ile nie korzystasz z planu dedykowanego w Babel, Twoja baza danych będzie
zlokalizowana na serwerach w USA.
To oznacza, że każde zapytania, jakie do niej wyślemy, nieważne czy będzie to
pobranie danych, ich aktualizacja, czy też usunięcie wymaga nieco więcej czasu.
Jest w dużej mierze zależne od szybkości łącza internetowego, z którego
korzysta użytkownik Twojej aplikacji.
Na pewno kojarzysz sytuację, gdy Twoje łącze internetowe łapie zadyszkę i strony
zdają się ładować w nieskończoność.
Tak naprawdę nie zawsze trwa to aż tyle, ale jesteśmy tak przyzwyczajeni do tego,
że wszystko działa niemal natychmiast, że każde odstępstwo od normy wydaje się trwać
znacznie dłużej, niż jest w rzeczywistości.
W tej sytuacji, gdyby user wybrał właściwy typ danych, musielibyśmy najpierw wysłać
taką informację do bazy danych w Stanach i tam odpowiedni rekord
zostałby zaktualizowany.
Ponieważ Babel posiada bazę typu real time, to oznacza, że automatycznie odsyła.
Inaczej mówiąc, propaguje tę zmianę z powrotem do naszej aplikacji
i przy przełącza tym krótszy czas takiej operacji.
Ale nawet przy szybkich łączach potrafi to zająć chwilę, która ludzkie oko
jest już w stanie wychwycić.
Jest duża szansa, że użytkownik uzna, że to po prostu nasza aplikacja wolno działa
i stwierdzi, że nie warto z niej korzystać.
Czy więc zawsze musimy zapewniać mu natychmiastowy efekt?
Jest to bardzo dobre pytanie, ale odpowiedź jak zwykle
nie jest jednoznaczna.
I znów brzmi to zależy.
Jeśli jesteśmy w stanie tak zbudować daną funkcjonalność, by działała
błyskawicznie, to zawsze to róbmy.
Dlatego też zastanów się, czy możesz jakoś przyspieszyć dane
działanie i skorzystać np.
właśnie z custom stats, zamiast od razu odnosić się do bazy danych.
Oczywiście nie zawsze będzie to możliwe, ale to wcale nie oznacza, że stoimy na z
góry przegranej pozycji, ponieważ wszystko da się odpowiednio
rozegrać właściwą komunikacją.
Jeśli działania użytkownika powoduje zmiana np.
bardzo wielu rekordów, co może zająć dłuższą chwilę,
wystarczy wyświetlić odpowiedni komunikat o tym, że dana operacja zostanie
zrealizowana w ciągu powiedzmy kilku kilkunastu minut, a jej
zakończenie opowiadaliśmy my.
Kolejnym komunikatem.
Jest to nie tylko dobra, ale wręcz wskazana praktyka.
Podobnie jak wyświetlanie loader ów, jeśli pod spodem coś się dzieje.
Oczywiście musimy znać umiar, ponieważ nikt nie będzie siedział
i czekał w nieskończoność.
Ale jeśli zrobimy to z głową i dodamy do tego np.
jakiś zabawny komunikat lub grafikę o ile się nie mylę, chyba MailChimp miał
lub może nadal ma w zwyczaju wyświetlać info, że stado wyszkolonych małp właśnie
pracuje nad wykonaniem danego zadania, to uwierz mi, że użytkownik to zrozumie.
To Twoim zadaniem jako developera jest zadbać, aby użytkownik wykonując jakąś
operację został w widoczny sposób poinformowany, że coś się dzieje.
Jeśli bowiem doprowadzisz do sytuacji, że np.
po kliknięciu w button nie otrzyma żadnej zwrotnej informacji,
a efekt swojego działania zobaczę dopiero po dłuższej chwili,
to możesz być w 100% pewien, że przestanie korzystać z Twojej aplikacji.
Dlatego też chciałbym zadać Ci praca domową nieco.
Może na przyszłość, bowiem proszę byś usiadł do niej dopiero po kolejnej lekcji,
gdzie poruszymy temat tego, jak pobierać dane użytkownika.
Spróbuj wtedy dla testu przebudować nasz obecny workflow tak, aby nie korzystało z
custom state, tylko od razu zapisywało i pobierało dane z bazy danych.
Sprawdź, czy zauważysz różnicę.
Może ona być minimalna, ale jestem pewien, że uda Ci się ją wychwycić,
a dodatkowo możesz również przejść do podglądu strony, czyli wybrać np.
Zbadaj.
Kolejno przejdź do zakładki Network i tutaj kliknąć tą opcję.
Domyślnie ustawiona jest ona na Node Routing, ale możesz wybrać np.
tutaj tą opcję Slow 3G.
I właśnie za modelować sobie pracę na takim wolniejszym łączu.
Jestem na 100% pewien, że wtedy na pewno zobaczysz różnicę.
Jeżeli nie będziesz korzystał z custom stats, tylko odnosił się i wysyłał
request bezpośrednio do bazy danych.
To by było na tyle w tej lekcji.
Ja dziękuje Ci w takim razie za uwagę, a w kolejnej zajmiemy się już pobieraniem
i edycją danych użytkownika.