شروع شدن

این بخش به منظور ارائه یک نمای کلی 5 دقیقه ای از نحوه کار تماس های پروفایل متقابل با SDK و نحوه آزمایش آنها به مهندسان طراحی شده است. هنوز سعی نکنید چیزی بسازید - این برای استفاده به عنوان مرجع یا راهنما طراحی نشده است، بلکه فقط به عنوان یک مقدمه طراحی شده است.

کلاس‌ها و روش‌های آگاه از پروفایل سفارشی

SDK برنامه‌های متصل به شما امکان می‌دهد کلاس‌ها و روش‌های خود را به‌عنوان نمایه متقابل حاشیه‌نویسی کنید. این کلاس‌ها و متدهایی را ایجاد می‌کند که به شما امکان می‌دهد روش حاشیه‌نویسی را در هر نمایه‌ای اجرا کنید.

به عنوان مثال، کلاس زیر را با حاشیه نویسی SDK در نظر بگیرید:

public class CalendarDatabase {

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

این یک کلاس با پیشوند Profile ایجاد می کند و به شما امکان می دهد این API را در نمایه دلخواه خود فراخوانی کنید. به عنوان مثال: java profileCalendarDatabase.work().deleteEvent(event, account);

نمونه های پیچیده تر

واقع بینانه تر، کلاس ها و روش های شما پیچیده تر خواهند بود. برای مثال، API موجود شما می‌تواند از انواع بازگشتی ListenableFuture استفاده کند و ممکن است لازم باشد نتایج هر دو نمایه را ترکیب کنید. این مثال را در نظر بگیرید:

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

این کلاس‌ها و روش‌های تولید شده همانطور که انتظار می‌رفت با ایمنی کامل و تکمیل کد IDE کار می‌کنند.

هر نوع بازگشتی و پارامتری از APIهای مشروح شما باید توسط SDK پشتیبانی شود، اما به طور کامل از تودرتو و ژنریک لیست‌ها، مجموعه‌ها، آرایه‌ها، ابتدایی‌ها، هر نوع parcelable و هر نوع سریال‌پذیری، علاوه بر ListenableFuture ، Optional و Protos پشتیبانی می‌کند. . همچنین می‌توانید برای انواعی که به طور بومی توسط SDK پشتیبانی نمی‌شوند، پشتیبانی اضافه کنید. به عنوان یک مثال شدید، به طور یکپارچه از ListenableFuture<List<Map<CustomProto, CustomParcelableType[]>>> پشتیبانی می کند.

تست کردن

SDK برای ساده سازی تست واحد طراحی شده است. برای هر کلاس Profile تولید شده، یک کلاس FakeProfile مربوطه وجود دارد که می توانید نمونه های کاری و شخصی را برای آن ارائه دهید. به عنوان مثال:

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