الخطوات الأولى

تم تصميم هذا القسم لمنح المهندسين نظرة عامة مدتها 5 دقائق حول كيفية تعمل المكالمات بين الملف الشخصي وملف العمل مع حزمة تطوير البرامج (SDK) وكيف يمكن اختبارها. لا تحاول تنشئ أي شيء حتى الآن - فهذا ليس مصممًا لاستخدامه كمرجع أو دليل، ولكن فقط كمقدمة.

الفئات والطرق المخصّصة الواعية بالملف الشخصي

تتيح لك حزمة تطوير البرامج (SDK) للتطبيقات المرتبطة إضافة تعليقات توضيحية إلى صفوفك وطرقك كما يلي: بين الملف الشخصي وملف العمل. يؤدي هذا إلى إنشاء فئات وطرق تتيح لك تنفيذ مع تعليقات توضيحية على أي ملف شخصي.

على سبيل المثال، يُرجى مراعاة الفئة التالية، مع إضافة تعليق توضيحي لحزمة تطوير البرامج (SDK):

public class CalendarDatabase {

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

يؤدي هذا إلى إنشاء فئة تبدأ بـ Profile (الملف الشخصي)، ما يسمح لك بطلب واجهة برمجة التطبيقات هذه على للملف الشخصي الذي تختاره. مثلاً: java profileCalendarDatabase.work().deleteEvent(event, account);

أمثلة أكثر تعقيدًا

وعلى نحو أكثر واقعية، ستكون الفئات والأساليب أكثر تعقيدًا. على سبيل المثال: يمكن لواجهة برمجة التطبيقات الحالية أن تستخدم أنواع إرجاع 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.

يجب أن يتوافق كل نوع إرجاع ومَعلمة من واجهات برمجة التطبيقات التي تتضمّن تعليقات توضيحية مع ، لكنها تدعم بشكل كامل تداخل وعمومات القوائم والمجموعات والصفائف الأساسية وأي نوع قابل للنقل وأي نوع قابل للتسلسل، بالإضافة إلى "ListenableFuture" و"Optional" و"نماذج أوّلية" من الممكن أيضًا أن تضيف دعم الأنواع غير المعتمدة في الأصل من خلال حزمة تطوير البرامج (SDK). كمثال دقيق، إنها ومتوافقة مع ListenableFuture<List<Map<CustomProto, CustomParcelableType[]>>> بسلاسة.

الاختبار

تم تصميم حزمة تطوير البرامج (SDK) لتبسيط اختبار الوحدة. لكل فئة ملف شخصي تم إنشاؤها، تتوفّر فئة 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.