Illustration af Virginia Poltrack

Genindfør plaid

Opdatering af Plaid til moderne appstandarder

—Nick Butcher og Florina Muntenescu

Skærestof: Plains oprindelse

For omkring 4 år siden (2014) begyndte jeg at se noget af det tidlige designarbejde for, hvad der ville ske med at blive Material Design. Det blev mig begejstret - alle de fantastiske animerede overgange, fed typografi og farvepaletter, animerede ikoner og en håndgribelig elevationsmodel. Samtidig introducerede Android (Lollipop) en række nye API'er til støtte for opbygningen af ​​disse oplevelser. Jeg ville straks starte med at prototypeopbygge den form for design, jeg så - for at finde ud af, hvordan (eller hvis!) Du kunne bygge dette i en Android-app. Denne prototype blev ved med at vokse, da jeg undersøgte flere interaktioner og mønstre, indtil den begyndte at ligne en sammenhængende app. Jeg indså, at jeg ville åbne kildekode for at dele det, jeg havde lært, og lægge det i andres hænder for at vise, hvad materialedesign kunne være, og hvordan man bygger det. Sådan blev Plaid født og endte med at blive åbnet i juli 2015. Det henter designnyheder og inspiration fra API'er, der tilbydes af Dribbble, Designer News og Product Hunt og viser dem i en rig, interaktiv brugergrænseflade.

Visualisering af, hvordan elevation reflekterer og forstærker de vigtigste elementer

Det store mål med Plaid var at fremvise materialedesign og hvordan man bygger det; giver både uddannelse og inspiration. Jeg er især tilfreds med noget af arbejdet med animationer og overgange - det var en af ​​de første udstillingsvinduer for delte elementovergange og vektorikonanimation:

Delte elementovergange leder brugerne mellem skærmeIkonanimationer letter tilstandændringer og giver karakter

Spol frem til 2018, og jeg mener, at appen nåede det store mål at være et udstillingsvindue for materialedesign og hvordan man bygger det. Men alt var ikke godt. De to primære datakilder, det blev bygget på, var ændret markant. Designer News lancerede v2 af deres API, som var en stor afgang fra v1 og ville kræve betydelig omarbejdning. Dribbble lancerede også en ny version af deres API, som fjernede en masse af den tilgængelige funktionalitet i v1. Med ændringerne til disse datakilder kunne du ikke længere få adgang til sektioner af appen, f.eks. ovennævnte tekstovergang til et skærmbillede af Designer News fungerer ikke længere. Det opfyldte ikke længere sine mål.

På toppen af ​​dette var verden gået videre. Plaid eksisterede i forvejen vores meningsfulde guide til arkitektur & arkitekturkomponentbibliotekerne og brugte i stedet ... ja ingen arkitektur ud over oppustede aktiviteter. Det eksisterede også design-understøttelsesbiblioteket, hvad så meget mere MDC-Android (hvilket er grunden til, at det har sine egne implementeringer af klasser som FAB'er eller bundark) eller Material Theming. Mens jeg introducerede nogle Kotlin i projektet, var det stadig stort set Java-baseret. Det havde ingen test! Det havde en masse teknisk gæld.

Denne tekniske gæld gjorde udsigten til at opdatere appen til de reviderede API'er eller måske endda tilføje nye datakilder temmelig skræmmende. Jeg overvejede, om jeg ville investere i den tid og kræfter, som den havde brug for ... eller om jeg skulle kalde det en dag og gå på appen. Det var da Florina Muntenescu kom med et interessant forslag. Over til Florina ...

Plaid 2.0 - stadig Plaid, anderledes stof

Hvad gør du, når API'en, din app får data fra ændringer, eller du er nødt til at begynde at understøtte nye funktioner? Giver du op og skifter job eller endda omskriver appen fra bunden? Det tvivler jeg på. Så hvorfor skulle Plaid, en smuk, kompleks app, dø?

Samtidig sker der to store forskydninger i udviklingen af ​​Android-apper: introduktionen af ​​arkitekturkomponenter og Kotlin. Selvom de tilsyneladende adskiller sig, ender samspillet mellem disse to store ændringer med at påvirke hinanden. Men de fleste udviklere begynder ikke fra bunden med disse nye paradigmer, de har en eksisterende kodebase, som de vil migrere.

Kunne migrering af plaid til arkitekturkomponenter og Kotlin medvirke til at nedbetale dets gæld og gøre det muligt for det at leve videre? Vi tror, ​​det kan!

Visionen

I øjeblikket viser Plaid indhold fra 3 forskellige kilder og har planer om at tilføje en til. Men hver af disse kilder er meget forskellige - de har deres egne API'er, deres egne muligheder (opstemning, kommentering, tilføjelse af nyt indhold osv.) Og deres egne detaljeringsskærm. De er kun forbundet via hovedfeedsstrømmen. Det betyder, at hver kilde kan indkapsles i sit eget modul, adskilt fra resten, med grænseflader, der driver forbindelsen mellem dem og med et appmodul til at vise feedet.

Generel vision af Plaid-modulopdelinger

At have ting så modulært åbner døren til et nyt område af muligheder. Hvert modul kan være et dynamisk funktionsmodul, og ved kørsel kunne vi beslutte at begynde at indlæse flere datakilder. Som dette får vi til at kombinere 3 vigtige ting: kodeadskillelse, øget buildhastighed og små APK'er.

Vi vidste, at vi inden for hvert modul skulle tage guiden til app-arkitektur som udgangspunkt: at have aktiviteter og ViewModels tilsluttet via LiveData, et arkiv, der indkapsler eksterne og lokale datakilder. Men forretnings- og UI-logikken, som Plaid har, er ikke-triviel, så vi er nødt til at bygge oven på guiden til arkitektur og adskille koden endnu mere for at sikre, at vi faktisk har små klasser, der hver har et enkelt ansvar. Klasser, som vi let kan erstatte, når det er nødvendigt, for at give den udvidelsesmulighed, som Plaid har brug for. For at gøre dette låner vi konceptet brugssager fra ren arkitektur og vi deler hvert modul i 3 lag: data, domæne og UI.

  • Datalaget indeholder datakilder og depoter.
  • Domænelaget har forretningslogikken, der er eksponeret som brugssager.
  • UI-laget indeholder Aktiviteter, brugerdefinerede visninger og ViewModels, men også alle UI-klasser, der gør Plaid til den smukke app, som den nu er: tilpassede widgets og smarte overgange.

Vi validerer, at vores arkitektur faktisk er korrekt ved at teste de klasser, vi opretter.

Vi vidste, at vi ville omfavne de forskellige programmeringsmodeller, som Kotlin bringer, så vi besluttede at sætte coroutines i kernen af ​​vores arkitektur, hvilket hjælpe os med let at håndtere langvarigt arbejde, samtidig med at vi undgår callback helvede.

Plaids vigtigste rolle er at fremvise materialedesign, for at være en inspiration for både designere og udviklere. Så denne rolle kan ikke ændres! Endnu mere skal den måde, hvorpå vi arkiverer Plaid 2.0, muliggøre en endnu lettere genanvendelighed af UI-komponenter i andre apps.

Gaven

Vi begyndte at arbejde på Plaid 2.0 i begyndelsen af ​​juni. Vi har stadig meget at gøre for at opnå den ovenfor beskrevne vision, men vi har startet en gang - de nye funktioner har datakilder, opbevaringssteder og brugssager, alle disse, selvfølgelig, testet og skrevet i Kotlin.

  • Vi har en CI takket være Tiem
  • Appen er opdelt i moduler, nogle endda dynamiske funktionsmoduler og distribueres som et app bundt takket være Ben
  • Dribbble bruger ikke længere V1 API, og alle de ødelagte UI-elementer er nu rettet takket være Nick
  • Jeg fik Designer News historier og kommentarer og endda login og upvote arbejde

Vi accepterer ikke bidrag fra lokalsamfundet endnu, mens appen er under hård udvikling, men vi lover at gøre det snart. Indtil da er du velkommen til at tjekke vores projektbord, der afspejler det, vi arbejder på for den aktuelle sprint, men også viser en del af vores efterslæb.

Knapning op

Vi syr stadig Plaid sammen, står over for nye problemer og finder løsninger hver dag. Ligner sandsynligvis de problemer, du også står overfor, når du arkituerer din app, flytter til Architecture Components og Kotlin. Vi planlægger at tale (og skrive) om dem, mens vi går, fortælle jer, hvilke beslutninger vi var nødt til at tage, hvad vi overvejede, hvad var de argumenter, der førte os til en bestemt vej. Følg Plaid på GitHub, og os på vores Medium- og Twitter-konti for fremtidige indlæg. —Plaid-teamet (Ben, Nick, Tiem & Florina)

Opdatering i april 2019: En ny garderobe

Arbejdet med at opdatere Plaid fortsætter, men vi ønskede at opdatere dette indlæg med en betydelig ændring. Plaid flytter hjem fra github.com/nickbutcher/plaid til github.com/android/plaid for at afspejle, at dette er vokset ud over en personlig app til en officiel prøve, som et team af mennesker bygger sammen. Alle links til kode / problemer osv. Skal migreres, og vi opfordrer dig til at følge med på det nye sted.