Bắt đầu

Phần này được thiết kế để cung cấp cho các kỹ sư 5 phút tổng quan về cách lệnh gọi giữa nhiều hồ sơ hoạt động với SDK và cách chúng được kiểm tra. Đừng cố gắng tạo bất kỳ nội dung nào – bài viết này không được thiết kế để dùng làm tài liệu tham khảo hoặc hướng dẫn, mà chỉ là để giới thiệu.

Các lớp và phương thức nhận biết hồ sơ tuỳ chỉnh

Với SDK ứng dụng đã kết nối, bạn có thể chú thích các lớp và phương thức của riêng mình như giữa các hồ sơ. Thao tác này sẽ tạo các lớp và phương thức cho phép bạn thực thi trên bất kỳ cấu hình nào.

Ví dụ: hãy xem xét lớp sau đây, kèm theo chú thích SDK:

public class CalendarDatabase {

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

Thao tác này sẽ tạo một lớp có tiền tố là Hồ sơ, cho phép bạn gọi API này trên hồ sơ mà bạn chọn. Ví dụ: java profileCalendarDatabase.work().deleteEvent(event, account);

Các ví dụ phức tạp hơn

Trong thực tế hơn, các lớp và phương thức của bạn sẽ phức tạp hơn. Ví dụ: API hiện có của bạn có thể sử dụng ListenableFuture kiểu dữ liệu trả về và bạn có thể cần để kết hợp kết quả từ cả hai trang doanh nghiệp. Hãy xem xét ví dụ sau:

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

Các lớp và phương thức đã tạo này hoạt động như dự kiến với sự an toàn về kiểu đầy đủ và Hoàn tất mã IDE.

Mỗi loại dữ liệu trả về và tham số của API được chú giải phải được hỗ trợ bởi SDK, nhưng hỗ trợ đầy đủ việc lồng ghép và chung chung cho các danh sách, tập hợp, mảng dữ liệu gốc, bất kỳ loại nào có thể đóng gói và bất kỳ kiểu nào có thể chuyển đổi tuần tự, ngoài ListenableFuture, Optional và các protos. Bạn cũng có thể thêm hỗ trợ cho các loại không được SDK hỗ trợ sẵn. Một ví dụ điển hình là sẽ hỗ trợ liền mạch cho ListenableFuture<List<Map<CustomProto, CustomParcelableType[]>>>.

Thử nghiệm

SDK này được thiết kế để đơn giản hoá việc kiểm thử đơn vị. Đối với mỗi lớp Hồ sơ được tạo, bạn có thể thêm một lớp FakeProfile tương ứng để làm việc và các bản sao cá nhân được thêm vào. Ví dụ:

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