איך מתחילים?

החלק הזה נועד לתת למהנדסים סקירה כללית של 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, אבל היא תומכת באופן מלא בקינון ובכללים כלליים של רשימות, קבוצות, מערכים פרימיטיבים, כל סוג שניתן לפרק וכל סוג שניתן לבצע בו סריאליזציה, בנוסף ל- ListenableFuture, Optional ו-proto. אפשר גם להוסיף תמיכה בסוגים שלא נתמכים במקור על ידי ה-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.