Questa sezione è stata progettata per fornire agli ingegneri una panoramica di 5 minuti su come le chiamate tra più profili funzionano con l'SDK e come possono essere testate. Non provare a creare qualcosa. Questa slide non è pensata per essere usata come riferimento o guida, ma solo come introduzione.
Classi e metodi personalizzati basati sul profilo
L'SDK delle app collegate ti consente di annotare le tue classi e i tuoi metodi come più profili. Questo genera classi e metodi che consentono di eseguire annotato su qualsiasi profilo.
Ad esempio, prendi in considerazione la seguente classe, con l'aggiunta dell'annotazione SDK:
public class CalendarDatabase {
@CrossProfile // SDK annotation
public void deleteEvent(Event event, Account account) {
// complex logic with database calls
}
}
In questo modo viene generata una classe con prefisso Profile che ti consente di chiamare questa API su
il profilo che preferisci. Ad esempio: java
profileCalendarDatabase.work().deleteEvent(event, account);
Esempi più complessi
In modo più realistico, le lezioni e i metodi saranno più complessi. Ad esempio:
l'API esistente potrebbe utilizzare ListenableFuture
tipi restituiti e potresti aver bisogno
per combinare i risultati di entrambi i profili. Considera questo esempio:
public class CalendarDatabase {
@CrossProfile // SDK annotation
public ListenableFuture<Collection<Event>> getEvents() {
// complex logic with database calls
}
}
// Merge results from both profiles into a set
profileCalendarDatabase.both()
.getEvents()
.transform((Map<Profile, Collection<Event>> events) -> {
return events.values()
.stream()
.flatMap(Collection::stream)
.collect(Collectors.toSet());
}, directExecutor());
Questi metodi e classi generati funzionano come previsto con le funzionalità di sicurezza di tipo completo Completamento del codice IDE.
Ogni tipo restituito e di parametro delle API annotate deve essere supportato dal
SDK, ma supporta completamente la nidificazione e le generiche di elenchi, set, array,
primitive, qualsiasi tipo parcelable e qualsiasi tipo serializzabile, oltre
ListenableFuture
, Optional
e proto. Puoi anche aggiungere
per i tipi non supportati in modo nativo dall'SDK. Come esempio estremo,
supporteranno perfettamente ListenableFuture<List<Map<CustomProto,
CustomParcelableType[]>>>
.
Test
L'SDK è progettato per semplificare il test delle unità. Per ogni corso Profile generato
c'è un corso FakeProfile
corrispondente che puoi fornire e che
alle tue istanze personali. Ad esempio:
// Create an instance of the SDK-generated fake connector class. This
// class lets you control the availability of the profiles, which
// profile you are now running on.
private final FakeCrossProfileConnector connector =
new FakeCrossProfileConnector();
// Create an instance of your real/fake/mock class for both profiles.
private final CalendarDatabase personalCalendarDatabase =
new FakeCalendarDatabase();
private final CalendarDatabase workCalendarDatabase =
new FakeCalendarDatabase();
// Create an instance of the SDK-generated fake profile-aware class.
private final FakeProfileCalendarDatabase profileCalendarDatabase =
FakeProfileCalendarDatabase.builder()
.personal(personalCalendarDatabase)
.work(workCalendarDatabase)
.connector(connector)
.build();
// Pass profileCalendarDatabase into your classes under test, or set
// Dagger up to inject the fake automatically.