Memulai

Bagian ini dirancang untuk memberikan gambaran umum 5 menit kepada para insinyur tentang bagaimana panggilan antar-profil berfungsi dengan SDK dan cara mengujinya. Jangan mencoba membangun apa pun - ini belum dirancang untuk digunakan sebagai referensi atau panduan, tapi hanya sebagai pengantar.

Class dan metode kustom yang mengetahui profil

SDK aplikasi yang terhubung memungkinkan Anda menganotasi class dan metode Anda sendiri sebagai antar-profil. Tindakan ini akan menghasilkan class dan metode yang memungkinkan Anda menjalankan metode yang dianotasi di profil mana pun.

Misalnya, pertimbangkan class berikut, dengan anotasi SDK yang ditambahkan:

public class CalendarDatabase {

  @CrossProfile // SDK annotation
  public void deleteEvent(Event event, Account account) {
    // complex logic with database calls
  }
}

Tindakan ini akan menghasilkan class yang diawali dengan Profil, sehingga Anda dapat memanggil API ini pada profil pilihan Anda. Contoh: java profileCalendarDatabase.work().deleteEvent(event, account);

Contoh yang lebih kompleks

Secara lebih realistis, class dan metode Anda akan menjadi lebih kompleks. Misalnya, API yang ada dapat menggunakan jenis nilai yang ditampilkan ListenableFuture dan Anda mungkin perlu menggabungkan hasil dari kedua profil. Perhatikan contoh ini:

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());

Class dan metode yang dihasilkan ini berfungsi seperti yang diharapkan dengan keamanan dan Pelengkapan kode IDE.

Setiap nilai yang ditampilkan dan jenis parameter dari API yang dianotasi harus didukung oleh SDK, tetapi sepenuhnya mendukung penyusunan bertingkat dan generik dari daftar, set, array, primitif, jenis yang dapat dibagi-bagi, dan jenis yang dapat diserialisasi, selain ListenableFuture, Optional, dan proto. Anda juga dapat menambahkan untuk jenis yang tidak didukung secara native oleh SDK. Sebagai contoh ekstrem, akan mendukung ListenableFuture<List<Map<CustomProto, CustomParcelableType[]>>> dengan lancar.

Pengujian

SDK ini dirancang untuk menyederhanakan pengujian unit. Untuk setiap class Profil yang dihasilkan, ada class FakeProfile yang sesuai yang dapat Anda berikan instance kerja dan pribadi. Contoh:

// 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.